- wrapped DerivateView selection to pass a handle on one DerivateView when dragging...
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 21 May 2014 07:44:29 +0000 (07:44 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 21 May 2014 07:44:29 +0000 (07:44 +0000)
.gitattributes
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
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewSelection.java [new file with mode: 0644]

index 7ff4d92628418a7236a05179dbc53bca22c533dc..0d666bc560455eb62dfd14583dbe826930eeb404 100644 (file)
@@ -506,6 +506,7 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/d
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewSelection.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java -text
index e4656ef53e55f4257291360d300e954020367a70..72debf1d133f1571d3c38336b139a185d00fec4d 100644 (file)
@@ -39,7 +39,8 @@ public class DerivateDragListener extends DragSourceAdapter{
     @Override
     public void dragSetData(DragSourceEvent event) {
         if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
-            LocalSelectionTransfer.getTransfer().setSelection(derivateView.getViewer().getSelection());
+            DerivateViewSelection derivateViewSelection = new DerivateViewSelection(derivateView.getViewer().getSelection(), derivateView);
+            LocalSelectionTransfer.getTransfer().setSelection(derivateViewSelection);
         }
     }
 
index 009c59fc032fc4c7c5eb3e0c82e1fe7c01ecfa3c..f38154f56c4c8f620c73d96c383972b20ee8dffc 100644 (file)
@@ -10,7 +10,6 @@
 package eu.etaxonomy.taxeditor.editor.view.derivate;
 
 import org.eclipse.jface.util.LocalSelectionTransfer;
-import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
@@ -53,12 +52,25 @@ public class DerivateDropListener extends ViewerDropAdapter {
             return false;
         }
         Object target = getCurrentTarget();
-        if(target instanceof TreeNode && data instanceof IStructuredSelection){
+        if(target instanceof TreeNode && data instanceof DerivateViewSelection){
+            DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data;
             TreeNode targetNode = (TreeNode) target;
-            TreeNode draggednode = EditorUtil.getTreeNodeOfSelection((IStructuredSelection) data);
+            TreeNode draggednode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
             if(draggednode!=null){
                 if(moveTreeNode(draggednode, targetNode)){
+                    //update DerivateView
+                    derivateView.getConversationHolder().commit();
                     derivateView.refreshTree();
+
+                    // update source DerivateView if dragging between different views occured
+                    DerivateView sourceDerivateView = derivateViewSelection.getDerivateView();
+                    if(sourceDerivateView!=derivateView){
+                        sourceDerivateView.setFocus();
+//                        derivateView.getSite().getPage().activate(sourceDerivateView);
+                        sourceDerivateView.getConversationHolder().commit();
+                        sourceDerivateView.refreshTree();
+                    }
+
                     LocalSelectionTransfer.getTransfer().setSelection(null);
                     return true;
                 }
@@ -86,13 +98,14 @@ public class DerivateDropListener extends ViewerDropAdapter {
         Object fromParentSpecimen = fromParentNode.getValue();
 
         // drag'n'drop for SpecimenOrObservationBase
+        IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
         if(draggedNodeValue instanceof DerivedUnit && targetNodeValue instanceof SpecimenOrObservationBase<?>){
             DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
             SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetNodeValue;
             //check if type is a sub derivate type
             if(!fromParentNode.equals(targetNode)//don't drag on direct parent node
                     && fromParentSpecimen instanceof SpecimenOrObservationBase<?>){
-                CdmStore.getService(IOccurrenceService.class).moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
+                occurrenceService.moveDerivate((SpecimenOrObservationBase<?>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
                 return true;
             }
         }
@@ -110,7 +123,7 @@ public class DerivateDropListener extends ViewerDropAdapter {
         else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample ){
             Sequence sequence = (Sequence)draggedNodeValue;
             if(fromParentSpecimen instanceof DnaSample){
-                CdmStore.getService(IOccurrenceService.class).moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
+                occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
                 return true;
             }
         }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewSelection.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewSelection.java
new file mode 100644 (file)
index 0000000..4631495
--- /dev/null
@@ -0,0 +1,58 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.view.derivate;
+
+import org.eclipse.jface.viewers.ISelection;
+
+/**
+ * Wrapper for {@link ISelection} which additionally holds a
+ * reference to the {@link DerivateView}
+ * @author pplitzner
+ * @date 14.05.2014
+ *
+ */
+public class DerivateViewSelection implements ISelection {
+
+    private final ISelection selection;
+    private final DerivateView derivateView;
+
+    /**
+     * @param selection
+     * @param derivateView
+     */
+    public DerivateViewSelection(ISelection selection, DerivateView derivateView) {
+        super();
+        this.selection = selection;
+        this.derivateView = derivateView;
+    }
+
+    /**
+     * @return the selection
+     */
+    public ISelection getSelection() {
+        return selection;
+    }
+
+    /**
+     * @return the derivateView
+     */
+    public DerivateView getDerivateView() {
+        return derivateView;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ISelection#isEmpty()
+     */
+    @Override
+    public boolean isEmpty() {
+        return selection.isEmpty();
+    }
+
+}