- moved move-logic to occurrence service layer
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 26 Mar 2014 14:37:30 +0000 (14:37 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 26 Mar 2014 14:37:30 +0000 (14:37 +0000)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java

index a6cbe14b57b243fd92bafefd5208a4389556f67d..3b28f72960845230994b34dfc22401f108281db4 100644 (file)
@@ -46,6 +46,8 @@ import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.location.Country;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.media.Rights;
+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.DeterminationEvent;
@@ -876,5 +878,21 @@ public class TransientOccurenceService implements IOccurrenceService {
                 maxDepth, pageSize, pageNumber, orderHints, propertyPaths);
     }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveDerivate(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.DerivedUnit)
+     */
+    @Override
+    public boolean moveDerivate(SpecimenOrObservationBase<?> from, SpecimenOrObservationBase<?> to, DerivedUnit derivate) {
+        return defaultService.moveDerivate(from, to, derivate);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveSequence(eu.etaxonomy.cdm.model.molecular.DnaSample, eu.etaxonomy.cdm.model.molecular.DnaSample, eu.etaxonomy.cdm.model.molecular.Sequence)
+     */
+    @Override
+    public boolean moveSequence(DnaSample from, DnaSample to, Sequence sequence) {
+        return defaultService.moveSequence(from, to, sequence);
+    }
+
 
 }
index 6a044fcf1c7af342b102c59a89b5d2362e81f684..fae2e002ed136170f184090cfa73e07c2e9e47a1 100644 (file)
@@ -15,14 +15,14 @@ import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 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;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author pplitzner
@@ -51,7 +51,6 @@ public class DerivateDropListener extends ViewerDropAdapter {
             TreeNode targetNode = (TreeNode) target;
             TreeNode draggednode = (TreeNode) ((IStructuredSelection) data).getFirstElement();
             if(moveDropTarget(draggednode, targetNode)){
-                derivateView.changed(null);
                 return true;
             }
         }
@@ -75,31 +74,16 @@ public class DerivateDropListener extends ViewerDropAdapter {
         Object targetValue = target.getValue();
         TreeNode dragParentNode = draggedObject.getParent();
         Object dragParentSpecimen = dragParentNode.getValue();
+        IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
 
         // 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
-            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(dragParentSpecimen instanceof SpecimenOrObservationBase<?>){
-                    SpecimenOrObservationBase<?> parentDragSpecimen = (SpecimenOrObservationBase<?>) dragParentSpecimen;
-                    for(DerivationEvent event:parentDragSpecimen.getDerivationEvents()){
-                        if(event.getDerivatives().contains(draggedSpecimen)){
-                            eventToRemove = event;
-                            break;
-                        }
-                    }
-                    parentDragSpecimen.removeDerivationEvent(eventToRemove);
-                }
-                //add new derivation event to target
-                targetSpecimen.addDerivationEvent(DerivationEvent.NewSimpleInstance(targetSpecimen, draggedSpecimen, eventToRemove==null?null:eventToRemove.getType()));
+            if(!dragParentNode.equals(target)//don't drag on direct parent node
+                    && dragParentSpecimen instanceof SpecimenOrObservationBase<?>){
+                occurrenceService.moveDerivate((SpecimenOrObservationBase<?>)dragParentSpecimen, targetSpecimen, draggedSpecimen);
                 return true;
             }
         }
@@ -137,13 +121,10 @@ public class DerivateDropListener extends ViewerDropAdapter {
         // drag'n'drop for Sequence
         else if(dragValue instanceof Sequence && targetValue instanceof DnaSample ){
             Sequence sequence = (Sequence)dragValue;
-            //remove dragged sequence
             if(dragParentSpecimen instanceof DnaSample){
-                ((DnaSample) dragParentSpecimen).removeSequence(sequence);
+                occurrenceService.moveSequence((DnaSample)dragParentSpecimen, (DnaSample)targetValue, sequence);
+                return true;
             }
-            //drop on DnaSample
-            ((DnaSample) targetValue).addSequence(sequence);
-            return true;
         }
         return false;
     }