- added basic drag'n'drop support to DerivateView
authorPatric Plitzner <p.plitzner@bgbm.org>
Mon, 24 Mar 2014 10:39:36 +0000 (10:39 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Mon, 24 Mar 2014 10:39:36 +0000 (10:39 +0000)
.gitattributes
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/AmplificationTransfer.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDragListener.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SingleReadTransfer.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SpecimenOrObservationTransfer.java [new file with mode: 0644]

index db4cdd9c94b02228209317ca420639d14cb66c4b..148f1e99ceaa04aeacd9dc2357bb6a54c3f5c0a7 100644 (file)
@@ -488,10 +488,15 @@ 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/dataimport/transientServices/TransientReferenceService.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/AmplificationTransfer.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/CreateDerivateContextMenu.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDragListener.java -text
+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/SingleReadTransfer.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SpecimenOrObservationTransfer.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementTransfer.java -text
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/AmplificationTransfer.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/AmplificationTransfer.java
new file mode 100644 (file)
index 0000000..9f6ca82
--- /dev/null
@@ -0,0 +1,59 @@
+// $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 java.util.UUID;
+
+import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @date 18.03.2014
+ *
+ */
+public class AmplificationTransfer extends CdmObjectTransfer<Amplification> {
+
+    private static AmplificationTransfer instance = new AmplificationTransfer();
+    private static final String TYPE_NAME = "amplification-transfer-format";
+    private static final int TYPEID = registerType(TYPE_NAME);
+
+    public static synchronized AmplificationTransfer getInstance(){
+        return instance;
+    }
+
+    private AmplificationTransfer(){}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
+     */
+    @Override
+    protected int[] getTypeIds() {
+        return new int[] { TYPEID };
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
+     */
+    @Override
+    protected String[] getTypeNames() {
+        return new String[] { TYPE_NAME };
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
+     */
+    @Override
+    public Amplification loadElement(UUID uuid) {
+        return (Amplification) CdmStore.getService(IService.class).load(uuid);
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDragListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDragListener.java
new file mode 100644 (file)
index 0000000..b4e6319
--- /dev/null
@@ -0,0 +1,76 @@
+// $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 java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeNode;
+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
+ *
+ */
+public class DerivateDragListener extends DragSourceAdapter{
+
+    private final Viewer viewer;
+
+    /**
+     * @param viewer
+     */
+    public DerivateDragListener(Viewer viewer) {
+        this.viewer = viewer;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.DragSourceAdapter#dragSetData(org.eclipse.swt.dnd.DragSourceEvent)
+     */
+    @Override
+    public void dragSetData(DragSourceEvent event) {
+        if (SpecimenOrObservationTransfer.getInstance().isSupportedType(event.dataType)) {
+
+            IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+            List<SpecimenOrObservationBase<?>> specimens = new ArrayList<SpecimenOrObservationBase<?>>();
+
+            for (Object object : selection.toList()){
+                if(object instanceof TreeNode && ((TreeNode) object).getValue() instanceof SpecimenOrObservationBase<?>) {
+                    Object value = ((TreeNode) object).getValue();
+                    specimens.add((SpecimenOrObservationBase<?>) value);
+                }
+            }
+            event.data = specimens.toArray(new SpecimenOrObservationBase<?>[specimens.size()]);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.DragSourceAdapter#dragStart(org.eclipse.swt.dnd.DragSourceEvent)
+     */
+    @Override
+    public void dragStart(DragSourceEvent event) {
+        ISelection selection = viewer.getSelection();
+        if(selection instanceof IStructuredSelection
+                && ((IStructuredSelection) selection).size()==1
+                && ((IStructuredSelection) selection).getFirstElement() instanceof TreeNode
+                && ((TreeNode) ((IStructuredSelection) selection).getFirstElement()).getValue() instanceof SpecimenOrObservationBase<?>){
+            event.doit = true;
+        }
+        else{
+            event.doit = false;
+        }
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
new file mode 100644 (file)
index 0000000..f4f6159
--- /dev/null
@@ -0,0 +1,120 @@
+// $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.TreeNode;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.widgets.TreeItem;
+
+import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
+import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+
+/**
+ * @author pplitzner
+ * @date 18.03.2014
+ *
+ */
+public class DerivateDropListener extends ViewerDropAdapter {
+
+    /**
+     * @param viewer
+     */
+    protected DerivateDropListener(Viewer viewer) {
+        super(viewer);
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
+     */
+    @Override
+    public boolean performDrop(Object data) {
+
+//        TermBase target = (TermBase) getCurrentTarget();//can be vocab
+//        //DefinedTermBase[] droppedElements = (DefinedTermBase[]) data;
+//        Object[] droppedTerms = (Object[]) data;
+//        Collection<DefinedTermBase> sourceTerms = new ArrayList<DefinedTermBase>(); //Arrays.asList(droppedElements)
+//
+//        for (Object droppedTerm : droppedTerms) {
+//
+//            DefinedTermBase term = (DefinedTermBase) droppedTerm;
+//            sourceTerms.add(term);
+//
+//        }
+//
+//        AbstractPostOperation operation = new MoveDefinedTermOperation("Move Descriptions", StoreUtil.getUndoContext(), target, sourceTerms, editor);
+        //        //TODO: implement execute
+        //        AbstractUtility.executeOperation(operation);
+        Object target = getCurrentTarget();
+        if(target instanceof TreeNode){
+            Object targetDerivate = ((TreeNode) target).getValue();
+            if(data instanceof Object[]){
+                Object[] droppedElements = (Object[])data;
+                for (Object droppedElement:droppedElements) {
+                    //performDrop();
+                    if(droppedElement instanceof DerivedUnit && targetDerivate instanceof SpecimenOrObservationBase<?>){
+                        SpecimenOrObservationBase<?> originSpecimen = (SpecimenOrObservationBase<?>)targetDerivate;
+                        DerivedUnit derivedSpecimen = (DerivedUnit)droppedElement;
+                        originSpecimen.addDerivationEvent(DerivationEvent.NewSimpleInstance(originSpecimen, derivedSpecimen, DerivationEventType.GATHERING_IN_SITU()));
+                        System.out.println("Add Derivate: " + droppedElement.getClass().getSimpleName() + " to " + targetDerivate.getClass().getSimpleName());
+                    }
+                    System.out.println("Drop: " + droppedElement.getClass().getSimpleName() + " to " + targetDerivate.getClass().getSimpleName());
+                }
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
+     */
+    @Override
+    public boolean validateDrop(Object target, int operation, TransferData transferType) {
+        if(SpecimenOrObservationTransfer.getInstance().isSupportedType(transferType)
+                && target instanceof TreeNode){
+            Object value = ((TreeNode) target).getValue();
+            return checkDropTarget(value);
+        }
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
+     */
+    @Override
+    public void dragOver(DropTargetEvent event) {
+        Object draggedDerivate = getCurrentTarget();
+
+        Object targetItem = event.item;
+//        System.out.println(event);
+        if(targetItem instanceof TreeItem){
+            TreeItem treeItem = (TreeItem)targetItem;
+//            System.out.println(treeItem.getData());
+//            System.out.println("Drag over: " + draggedDerivate.getClass().getSimpleName() + " to " + targetItem.getClass().getSimpleName());
+        }
+        super.dragOver(event);
+    }
+
+
+
+    /**
+     * @param value
+     * @return
+     */
+    private boolean checkDropTarget(Object value) {
+        // TODO Auto-generated method stub
+        return true;
+    }
+}
index 1b1bffd437506ec2c1a7f047d82821757997880f..75a8f7ad2336d556545cfda2901e4ce47417c697 100644 (file)
@@ -7,6 +7,8 @@ import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
@@ -42,6 +44,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
     private boolean isDirty;
 
+    private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+
     /* (non-Javadoc)
      * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
      */
@@ -68,10 +72,19 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         viewer.setInput(editorInput);
         if(editorInput instanceof DerivateViewEditorInput){
             SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
-            SpecimenOrObservationBase rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
+            SpecimenOrObservationBase<?> rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
             setPartName(rootElement.toString());
             viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
         }
+
+        //add drag'n'drop support
+        Transfer[] transfers = new Transfer[] {
+                SpecimenOrObservationTransfer.getInstance(),
+//                SingleReadTransfer.getInstance(),
+//                AmplificationTransfer.getInstance()
+                };
+        viewer.addDragSupport(dndOperations, transfers, new DerivateDragListener(viewer));
+        viewer.addDropSupport(dndOperations, transfers, new DerivateDropListener(viewer));
     }
 
     /* (non-Javadoc)
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SingleReadTransfer.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SingleReadTransfer.java
new file mode 100644 (file)
index 0000000..72be32d
--- /dev/null
@@ -0,0 +1,61 @@
+// $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 java.util.UUID;
+
+import eu.etaxonomy.cdm.api.service.IAnnotatableService;
+import eu.etaxonomy.cdm.model.molecular.SingleRead;
+import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @date 18.03.2014
+ *
+ */
+public class SingleReadTransfer extends CdmObjectTransfer<SingleRead> {
+
+    private static SingleReadTransfer instance = new SingleReadTransfer();
+    private static final String TYPE_NAME = "singleRead-transfer-format";
+    private static final int TYPEID = registerType(TYPE_NAME);
+
+    public static synchronized SingleReadTransfer getInstance(){
+        return instance;
+    }
+
+    private SingleReadTransfer(){}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
+     */
+    @Override
+    protected int[] getTypeIds() {
+        return new int[] { TYPEID };
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
+     */
+    @Override
+    protected String[] getTypeNames() {
+        return new String[] { TYPE_NAME };
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
+     */
+    @Override
+    public SingleRead loadElement(UUID uuid) {
+        IAnnotatableService service = CdmStore.getService(IAnnotatableService.class);
+        System.out.println(service);
+        return (SingleRead) service.load(uuid);
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SpecimenOrObservationTransfer.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/SpecimenOrObservationTransfer.java
new file mode 100644 (file)
index 0000000..aa09238
--- /dev/null
@@ -0,0 +1,59 @@
+// $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 java.util.UUID;
+
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.taxeditor.model.CdmObjectTransfer;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @date 18.03.2014
+ *
+ */
+public class SpecimenOrObservationTransfer extends CdmObjectTransfer<SpecimenOrObservationBase<?>> {
+
+    private static SpecimenOrObservationTransfer instance = new SpecimenOrObservationTransfer();
+    private static final String TYPE_NAME = "derivate-transfer-format";
+    private static final int TYPEID = registerType(TYPE_NAME);
+
+    public static synchronized SpecimenOrObservationTransfer getInstance(){
+        return instance;
+    }
+
+    private SpecimenOrObservationTransfer(){}
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
+     */
+    @Override
+    protected int[] getTypeIds() {
+        return new int[] { TYPEID };
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
+     */
+    @Override
+    protected String[] getTypeNames() {
+        return new String[] { TYPE_NAME };
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.CdmObjectTransfer#loadElement(java.util.UUID)
+     */
+    @Override
+    public SpecimenOrObservationBase<?> loadElement(UUID uuid) {
+        return CdmStore.getService(IOccurrenceService.class).load(uuid);
+    }
+}