- added Amplifications and Seuqences (consensus) to derivate hierarchy (DerivateView)
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 18 Dec 2013 15:37:34 +0000 (15:37 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 18 Dec 2013 15:37:34 +0000 (15:37 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/CreateDerivateContextMenu.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java

index 8d1c446eaa450086a9289b95bab97d13435e3a90..a0c89f49a6426c6b9dcf3bf6bfe35e9891213b01 100644 (file)
@@ -15,7 +15,9 @@ import org.eclipse.ui.PlatformUI;
 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;
@@ -46,28 +48,29 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                             //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{
@@ -78,17 +81,12 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
                         }
                     }
 
-                    /**
-                     * @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;
@@ -97,14 +95,18 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
     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)
@@ -112,14 +114,32 @@ public class CreateDerivateContextMenu extends CompoundContributionItem {
          */
         @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();
+                }
             }
         }
 
index 207471637f280111ca4ea8a27a721393658f9655..054ea9fd7c1b7992530d19ebdfba8de74861bd4e 100644 (file)
@@ -8,6 +8,9 @@ import java.util.Set;
 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;
@@ -53,8 +56,14 @@ public class DerivateContentProvider implements ITreeContentProvider {
         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;
@@ -73,6 +82,12 @@ public class DerivateContentProvider implements ITreeContentProvider {
                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;
        }
 
@@ -81,8 +96,13 @@ public class DerivateContentProvider implements ITreeContentProvider {
         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()){