- added support for SingleRead drag'n'drop
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 25 Mar 2014 16:08:44 +0000 (16:08 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 25 Mar 2014 16:08:44 +0000 (16:08 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDragListener.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java

index 2be2f9082a716775579ebfc6e82e972cfa8e759b..d73dbd49bd13903764f34751628d0a37ca160685 100644 (file)
@@ -103,9 +103,9 @@ public class DerivateContentProvider implements ITreeContentProvider {
             return children.toArray();
         }
         else if(value instanceof SpecimenOrObservationBase){
-               List<DerivedUnit> derivates = getDerivates((SpecimenOrObservationBase) value);
-               for (Iterator iterator = derivates.iterator(); iterator.hasNext();) {
-                DerivedUnit derivedUnit = (DerivedUnit) iterator.next();
+               List<DerivedUnit> derivates = getDerivates((SpecimenOrObservationBase<?>) value);
+               for (Iterator<DerivedUnit> iterator = derivates.iterator(); iterator.hasNext();) {
+                DerivedUnit derivedUnit = iterator.next();
                 TreeNode node = new TreeNode(derivedUnit);
                 node.setParent(currentnode);
                 children.add(node);
index 1099c62bc5860c88e07c9fbeb42ac6d4c92fddab..d92c224e350c7649543c4471896061afb2486f55 100644 (file)
@@ -17,8 +17,6 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.dnd.DragSourceAdapter;
 import org.eclipse.swt.dnd.DragSourceEvent;
 
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-
 /**
  * @author pplitzner
  * @date 18.03.2014
@@ -54,7 +52,8 @@ public class DerivateDragListener extends DragSourceAdapter{
         if(selection instanceof IStructuredSelection
                 && ((IStructuredSelection) selection).size()==1
                 && ((IStructuredSelection) selection).getFirstElement() instanceof TreeNode
-                && ((TreeNode) ((IStructuredSelection) selection).getFirstElement()).getValue() instanceof SpecimenOrObservationBase<?>){
+//                && ((TreeNode) ((IStructuredSelection) selection).getFirstElement()).getValue() instanceof SpecimenOrObservationBase<?>
+        ){
             event.doit = true;
         }
         else{
index 824c5ac5dbede71e1d65562e21a31f1df295116f..1af71f49a9aa6bab7f461d100ba1513a6d371911 100644 (file)
@@ -15,6 +15,10 @@ import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
+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.molecular.SingleRead;
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -67,20 +71,25 @@ public class DerivateDropListener extends ViewerDropAdapter {
      * @return
      */
     private boolean moveDropTarget(TreeNode draggedObject, TreeNode target) {
-        if(draggedObject.getValue() instanceof DerivedUnit && target.getValue() instanceof SpecimenOrObservationBase<?>){
-            DerivedUnit draggedSpecimen = (DerivedUnit) draggedObject.getValue();
-            SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) target.getValue();
+        Object dragValue = draggedObject.getValue();
+        Object targetValue = target.getValue();
+        TreeNode dragParentNode = draggedObject.getParent();
+        Object dragParentSpecimen = dragParentNode.getValue();
+
+        // drag'n'drop for SpecimenOrObservationBase
+        if(dragValue instanceof DerivedUnit && targetValue instanceof SpecimenOrObservationBase<?>){
+            DerivedUnit draggedSpecimen = (DerivedUnit) dragValue;
+            SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetValue;
             SpecimenOrObservationType dragType = draggedSpecimen.getRecordBasis();
             SpecimenOrObservationType targetType = targetSpecimen.getRecordBasis();
             //check if type is a sub derivate type
-            TreeNode parentNode = draggedObject.getParent();
-            if(parentNode!=null && !parentNode.equals(target) //don't drag on direct parent node
+            if(!dragParentNode.equals(target) //don't drag on direct parent node
                     && (targetType==SpecimenOrObservationType.FieldUnit //dragging on FieldUnit always works (except when direct parent)
                     || (dragType.isKindOf(targetType) && targetType!=dragType))){ //dragging only on parent derivate type
                 //remove derivation event from parent specimen of dragged object
                 DerivationEvent eventToRemove = null;
-                if(parentNode.getValue() instanceof SpecimenOrObservationBase<?>){
-                    SpecimenOrObservationBase<?> parentDragSpecimen = (SpecimenOrObservationBase<?>) parentNode.getValue();
+                if(dragParentSpecimen instanceof SpecimenOrObservationBase<?>){
+                    SpecimenOrObservationBase<?> parentDragSpecimen = (SpecimenOrObservationBase<?>) dragParentSpecimen;
                     for(DerivationEvent event:parentDragSpecimen.getDerivationEvents()){
                         if(event.getDerivatives().contains(draggedSpecimen)){
                             eventToRemove = event;
@@ -94,6 +103,52 @@ public class DerivateDropListener extends ViewerDropAdapter {
                 return true;
             }
         }
+
+        // drag'n'drop for SingleRead
+        else if(dragValue instanceof SingleRead && (targetValue instanceof Amplification || targetValue instanceof Sequence)){
+            SingleRead singleRead = (SingleRead) dragValue;
+            if(dragParentSpecimen instanceof Amplification){
+                ((Amplification) dragParentSpecimen).removeSingleRead(singleRead);
+            }
+            //drop on Sequence
+            if(targetValue instanceof Sequence){
+                Sequence sequence = (Sequence)targetValue;
+                sequence.addSingleRead(singleRead);
+                //remove dragged single read
+                if(dragParentSpecimen instanceof Sequence){
+                    ((Sequence) dragParentSpecimen).removeSingleRead(singleRead);
+                }
+            }
+            //drop on Amplification
+            else if(targetValue instanceof Amplification){
+                Amplification amplification = (Amplification)targetValue;
+                amplification.addSingleRead(singleRead);
+            }
+            return true;
+        }
+
+        // drag'n'drop for Sequence
+        else if(dragValue instanceof Sequence && targetValue instanceof DnaSample ){
+//            SingleRead singleRead = (SingleRead) dragValue;
+//            //remove dragged single read
+//            if(dragParentSpecimen instanceof Sequence){
+//                ((Sequence) dragParentSpecimen).removeSingleRead(singleRead);
+//            }
+//            else if(dragParentSpecimen instanceof Amplification){
+//                ((Amplification) dragParentSpecimen).removeSingleRead(singleRead);
+//            }
+//            //drop on Sequence
+//            if(targetValue instanceof Sequence){
+//                Sequence sequence = (Sequence)targetValue;
+//                sequence.addSingleRead(singleRead);
+//            }
+//            //drop on Amplification
+//            else if(targetValue instanceof Amplification){
+//                Amplification amplification = (Amplification)targetValue;
+//                amplification.addSingleRead(singleRead);
+//            }
+            return true;
+        }
         return false;
     }