import org.eclipse.ui.actions.CompoundContributionItem;
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
import eu.etaxonomy.cdm.model.molecular.DnaSample;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
//context menu for FieldUnit
if(selectedElement instanceof FieldUnit){
FieldUnit fieldUnit = (FieldUnit) selectedElement;
- createMenuItem(menu, "Specimen", fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen));
+ createMenuItem(menu, "Specimen", fieldUnit, DerivedUnit.class, SpecimenOrObservationType.PreservedSpecimen);
new MenuItem(menu, SWT.SEPARATOR);
- createMenuItem(menu, "Tissue Sample", fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample));
- createMenuItem(menu, "DNA Sample", fieldUnit, DnaSample.NewInstance());
- createMenuItem(menu, "Specimen Scan", fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
- createMenuItem(menu, "Artwork", fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
- createMenuItem(menu, "Living Plant Photo", fieldUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
+ createMenuItem(menu, "Tissue Sample", fieldUnit, DerivedUnit.class, SpecimenOrObservationType.TissueSample);
+ createMenuItem(menu, "DNA Sample", fieldUnit, DnaSample.class, SpecimenOrObservationType.DnaSample);
+ createMenuItem(menu, "Specimen Scan", fieldUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
+ createMenuItem(menu, "Artwork", fieldUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
+ createMenuItem(menu, "Living Plant Photo", fieldUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
}
//context menu for Specimen
else if(selectedElement instanceof DerivedUnit && ((DerivedUnit)selectedElement).getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){
DerivedUnit derivedUnit = (DerivedUnit) selectedElement;
- createMenuItem(menu, "Tissue Sample", derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample));
- createMenuItem(menu, "DNA Sample", derivedUnit, DnaSample.NewInstance());
- createMenuItem(menu, "Specimen Scan", derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
- createMenuItem(menu, "Artwork", derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
- createMenuItem(menu, "Living Plant Photo", derivedUnit, DerivedUnit.NewInstance(SpecimenOrObservationType.StillImage));
+ createMenuItem(menu, "Tissue Sample", derivedUnit, DerivedUnit.class, SpecimenOrObservationType.TissueSample);
+ createMenuItem(menu, "DNA Sample", derivedUnit, DnaSample.class, SpecimenOrObservationType.DnaSample);
+ createMenuItem(menu, "Specimen Scan", derivedUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
+ createMenuItem(menu, "Artwork", derivedUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
+ createMenuItem(menu, "Living Plant Photo", derivedUnit, DerivedUnit.class, SpecimenOrObservationType.StillImage);
}
//context menu for DnaSample
else if(selectedElement instanceof DnaSample){
DnaSample dnaSample = (DnaSample) selectedElement;
-
+ createMenuItem(menu, "Consensus Sequence", dnaSample, Sequence.class, null);
+ createMenuItem(menu, "Amplification", dnaSample, Amplification.class, null);
}
//default
else{
}
}
- /**
- * @param parent
- * @param menuItem
- * @param childToCreate
- * @param menu
- */
- private void createMenuItem(Menu menu, String menuLabel, SpecimenOrObservationBase<?> parent, DerivedUnit childToCreate) {
+ private void createMenuItem(Menu menu, String menuLabel, SpecimenOrObservationBase<?> parent, Class<?> childClass, SpecimenOrObservationType specimenType) {
MenuItem menuItem = new MenuItem(menu, SWT.None);
menuItem.setText(menuLabel);
- menuItem.addSelectionListener(new WidgetSelectionListener(parent, childToCreate));
+ menuItem.addSelectionListener(new WidgetSelectionListener(parent, childClass, specimenType));
}
+
}
};
return contributionItems;
private class WidgetSelectionListener implements SelectionListener{
private final SpecimenOrObservationBase<?> parent;
- private final DerivedUnit derivate;
+ //TODO: we need a common interface for the generic like e.g. "IDerivateHierarchyNode"
+ private final Class<?> childClass;
+ private SpecimenOrObservationType specimenType;
/**
* @param parent
+ * @param specimenType
*/
- public WidgetSelectionListener(SpecimenOrObservationBase<?> parent, DerivedUnit derivate) {
+ public WidgetSelectionListener(SpecimenOrObservationBase<?> parent, Class<?> childClass, SpecimenOrObservationType specimenType) {
this.parent = parent;
- this.derivate = derivate;
+ this.childClass = childClass;
+ this.specimenType = specimenType;
}
/* (non-Javadoc)
*/
@Override
public void widgetSelected(SelectionEvent e) {
- parent.addDerivationEvent(DerivationEvent.NewSimpleInstance(parent, derivate, DerivationEventType.GATHERING_IN_SITU()));
- derivate.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
- derivate.getTitleCache(); //update title cache
- IWorkbenchPart activePart = AbstractUtility.getActivePart();
- if(activePart instanceof DerivateView){
- DerivateView derivateView = (DerivateView)activePart;
- derivateView.changed(derivate);
- derivateView.viewer.refresh();
+ if(parent instanceof DnaSample){
+ DnaSample dnaSample = (DnaSample)parent;
+ if(childClass.equals(Amplification.class)){
+ Amplification.NewInstance(dnaSample);
+ }
+ else if(childClass.equals(Sequence.class)){
+ dnaSample.addSequence(Sequence.NewInstance(""));//why does this not have DnaSample as constructor parameter?
+ }
+ }
+ else if(DerivedUnit.class.isAssignableFrom(childClass)){
+ DerivedUnit derivedUnit;
+ if(childClass.equals(DnaSample.class)){
+ derivedUnit = DnaSample.NewInstance();
+ }
+ else{
+ derivedUnit = DerivedUnit.NewInstance(specimenType);
+ }
+ parent.addDerivationEvent(DerivationEvent.NewSimpleInstance(parent, derivedUnit, DerivationEventType.GATHERING_IN_SITU()));
+ derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy());
+ derivedUnit.getTitleCache(); //update title cache
+ IWorkbenchPart activePart = AbstractUtility.getActivePart();
+ if(activePart instanceof DerivateView){
+ DerivateView derivateView = (DerivateView)activePart;
+ derivateView.changed(derivedUnit);
+ derivateView.viewer.refresh();
+ }
}
}
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.cdm.model.molecular.DnaSample;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
if(parentElement instanceof DerivateViewEditorInput){
parentElement = ((DerivateViewEditorInput) parentElement).getDerivate();
}
-
- if(parentElement instanceof SpecimenOrObservationBase){
+ if(parentElement instanceof DnaSample){
+ DnaSample dnaSample = (DnaSample)parentElement;
+ List<Object> children = new ArrayList<Object>();
+ children.addAll(dnaSample.getAmplifications());
+ children.addAll(dnaSample.getSequences());
+ return children.toArray();
+ }
+ else if(parentElement instanceof SpecimenOrObservationBase){
return getDerivates((SpecimenOrObservationBase) parentElement).toArray();
}
return null;
DerivedUnit derivedUnit = (DerivedUnit)element;
return derivedUnit.getOriginalUnit();
}
+ else if(element instanceof Amplification){
+ ((Amplification) element).getDnaSample();
+ }
+ else if(element instanceof Sequence){
+ ((Sequence) element).getDnaSample();
+ }
return null;
}
if(element instanceof DerivateViewEditorInput){
element = ((DerivateViewEditorInput) element).getDerivate();
}
-
- if(element instanceof SpecimenOrObservationBase){
+ if(element instanceof DnaSample){
+ DnaSample dnaSample = (DnaSample)element;
+ if(!dnaSample.getSequences().isEmpty() || !dnaSample.getAmplifications().isEmpty()){
+ return true;
+ }
+ }
+ else if(element instanceof SpecimenOrObservationBase){
SpecimenOrObservationBase specimenOrObservation = (SpecimenOrObservationBase)element;
for(DerivationEvent event:(Set<DerivationEvent>)specimenOrObservation.getDerivationEvents()){
if(!event.getDerivatives().isEmpty()){