ref #7362 Implement term import from GfBio terminology service via DnD
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 15 May 2018 08:32:40 +0000 (10:32 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 15 May 2018 08:33:02 +0000 (10:33 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureNodeDropAdapter.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/e4/FeatureTreeEditor.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/Messages.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/l10n/messages_de.properties
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/webimport/termimport/GfBioTerminologyImportPresenter.java

index 1d4a72e6973a1f07003977c08c689c3c189ab32d..0ee6f8992533353c18e3acd8d681752134fad8c8 100644 (file)
@@ -8,7 +8,14 @@
 */
 package eu.etaxonomy.taxeditor.featuretree.e4;
 
+import java.net.URI;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
 import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
@@ -20,20 +27,34 @@ import eu.etaxonomy.cdm.model.description.FeatureNode;
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.taxeditor.editor.definedterm.TermTransfer;
 import eu.etaxonomy.taxeditor.featuretree.FeatureNodeTransfer;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.view.webimport.termimport.wrapper.OntologyTermWrapper;
 
 public class FeatureNodeDropAdapter extends ViewerDropAdapter {
 
-    private final MDirtyable dirtyable;
+    private MDirtyable dirtyable;
 
     public FeatureNodeDropAdapter(MDirtyable dirtyable, Viewer viewer) {
                super(viewer);
-        this.dirtyable = dirtyable;
+               this.dirtyable = dirtyable;
        }
 
        @Override
        public boolean performDrop(Object data) {
-               FeatureNode target = (FeatureNode) getCurrentTarget();
+               Object currentTarget = getCurrentTarget();
+               FeatureNode target = null;
+               if(currentTarget instanceof FeatureTree){
+                   target = ((FeatureTree) currentTarget).getRoot();
+               }
+               else if(currentTarget instanceof FeatureNode){
+                   target = (FeatureNode) currentTarget;
+               }
+               else{
+                   MessagingUtils.warningDialog(Messages.FeatureNodeDropAdapter_INVALID_TARGET, this, Messages.FeatureNodeDropAdapter_INVALID_TARGET_MESSAGE);
+                   return false;
+               }
                int position = 0;
 
                if (target != null) {
@@ -50,13 +71,13 @@ public class FeatureNodeDropAdapter extends ViewerDropAdapter {
                        }
                }
 
-               // set target to root node if there is no target specified
-               if (target == null) {
-                       FeatureTree featureTree = (FeatureTree) getViewer().getInput();
-                       target = featureTree.getRoot();
+               Collection<Object> droppedObjects = Collections.emptyList();
+               if(data instanceof Object[]){
+                   droppedObjects = Arrays.asList((Object[])data);
+               }
+               else if(data instanceof IStructuredSelection){
+                   droppedObjects = ((IStructuredSelection) data).toList();
                }
-
-               Object[] droppedObjects = (Object[]) data;
                TreeViewer viewer = (TreeViewer) getViewer();
 
                // cannot drop a feature node onto itself
@@ -74,9 +95,15 @@ public class FeatureNodeDropAdapter extends ViewerDropAdapter {
                    else if(droppedObject instanceof Feature){
                        Feature droppedFeature = (Feature) droppedObject;
                        CdmStore.getService(IFeatureNodeService.class).addChildFeatureNode(target.getUuid(), droppedFeature.getUuid());
-
+                   }
+                   else if(droppedObject instanceof OntologyTermWrapper){
+                       OntologyTermWrapper wrapper = (OntologyTermWrapper)droppedObject;
+                       Feature feature = Feature.NewInstance(wrapper.getLabel(), wrapper.getLabel(), wrapper.getLabel());
+                       feature.setUri(URI.create(wrapper.getUri()));
+                       CdmStore.getService(IFeatureNodeService.class).createChildFeatureNode(target, feature);
                    }
                }
+               dirtyable.setDirty(true);
                viewer.refresh();
                return true;
        }
@@ -85,6 +112,7 @@ public class FeatureNodeDropAdapter extends ViewerDropAdapter {
     public boolean validateDrop(Object target, int operation, TransferData transferData) {
         boolean isSupported = FeatureNodeTransfer.getInstance().isSupportedType(transferData);
         isSupported |= TermTransfer.getInstance().isSupportedType(transferData);
+        isSupported |= LocalSelectionTransfer.getTransfer().isSupportedType(transferData);
         isSupported &= getViewer().getInput()!=null;
         return isSupported;
     }
index 94d6992133f7670cc23c1d19e32a908ad09c2d07..b5c7ce86acbbffefcc2404f6971c59c62ed759f3 100644 (file)
@@ -28,6 +28,7 @@ import org.eclipse.e4.ui.model.application.ui.basic.MPart;
 import org.eclipse.e4.ui.services.EMenuService;
 import org.eclipse.e4.ui.workbench.modeling.EPartService;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
@@ -112,8 +113,10 @@ public class FeatureTreeEditor implements ICdmEntitySessionEnabled, ISelectionCh
         viewer.setLabelProvider(new FeatureTreeLabelProvider());
 
         int ops = DND.DROP_COPY | DND.DROP_MOVE;
-        Transfer[] transfers = new Transfer[] { FeatureNodeTransfer
-                .getInstance(), TermTransfer.getInstance() };
+        Transfer[] transfers = new Transfer[] {
+                FeatureNodeTransfer.getInstance(),
+                TermTransfer.getInstance(),
+                LocalSelectionTransfer.getTransfer()};
         viewer.addDragSupport(ops, transfers, new FeatureNodeDragListener(viewer));
         viewer.addDropSupport(ops, transfers, new FeatureNodeDropAdapter(dirty, viewer));
         viewer.addSelectionChangedListener(this);
index 29deed2f75391b74b9ab30b6aa31ae7c7c2d2872..4ff8ae5b282964072f819823d8960ac20f88865a 100644 (file)
@@ -256,6 +256,12 @@ public class Messages extends NLS {
 
 
 
+    public static String FeatureNodeDropAdapter_INVALID_TARGET;
+
+
+    public static String FeatureNodeDropAdapter_INVALID_TARGET_MESSAGE;
+
+
     public static String FeatureTreeEditorComposite_ADD_FEATURE;
 
 
index ee9339e5fee8a28cac4a091f50dd2ad4a4e76fa7..ff8f2a9edfd3e77023d83f9f687c9d787c03e858 100644 (file)
@@ -207,6 +207,8 @@ ImportFromFileAndChooseVocIdWizardOage_AreaVoc_toolTip=Please choose a vocabular
 ExcelDistributionUpdateWizard_ConfiguratorWizard_label=Configure Excel distribution update
 AbstractImportWizard_ConfigurationLabel=Configure the Import
 TCSImportWizard_ConfiguratorWizard_label=Configure the TCS import
+FeatureNodeDropAdapter_INVALID_TARGET=Invalid target
+FeatureNodeDropAdapter_INVALID_TARGET_MESSAGE=Chosen target is not valid
 FeatureTreeEditorComposite_ADD_FEATURE=Add a feature to this feature tree.
 FeatureTreeEditorComposite_FEATURE_TREE=Feature Tree
 FeatureTreeEditorComposite_OPEN_TREE=Open Tree
index bed1ee8fef4fd345cd826a5627f829f7fefcdfae..3a877a1053336f5551d30864281071905471ae69 100644 (file)
@@ -207,6 +207,8 @@ ImportFromFileAndChooseVocIdWizardOage_AreaVoc_toolTip=Bitte w
 ExcelDistributionUpdateWizard_ConfiguratorWizard_label=Konfiguration des Excel Distribution Updates
 AbstractImportWizard_ConfigurationLabel=Konfiguration des Imports
 TCSImportWizard_ConfiguratorWizard_label=Konfiguration des TCS Imports
+FeatureNodeDropAdapter_INVALID_TARGET=Ziel ungültig
+FeatureNodeDropAdapter_INVALID_TARGET_MESSAGE=Das ausgewählte Ziel ist ungütlig
 FeatureTreeEditorComposite_ADD_FEATURE=Merkmal zum Merkmalsbaum hinzufügen
 FeatureTreeEditorComposite_FEATURE_TREE=Merkmalsbaum
 FeatureTreeEditorComposite_OPEN_TREE=Merkmalsbaum öffnen
index 3b325aa5584f9b438bff1e7430dd3f235bac9ce8..a6bbe43f929e2ec31300eed1b59ad9d2687b8513 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
@@ -58,14 +59,19 @@ public class GfBioTerminologyImportPresenter {
         composite.getTreeTermHierarchy().setContentProvider(new OntologyTermContentProvider());
         composite.getTreeTermHierarchy().setLabelProvider(new OntologyTermLabelProvider());
         Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
-        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_COPY,
+        composite.getTreeTermHierarchy().addDragSupport(DND.DROP_MOVE,
                 transfers, new DragSourceAdapter() {
+
             @Override
-            public void dragSetData(org.eclipse.swt.dnd.DragSourceEvent event) {
+            public void dragSetData(DragSourceEvent event) {
                 if (LocalSelectionTransfer.getTransfer().isSupportedType(event.dataType)) {
                     LocalSelectionTransfer.getTransfer().setSelection(composite.getTreeTermHierarchy().getSelection());
                 }
             }
+            @Override
+            public void dragStart(DragSourceEvent event) {
+                event.doit = !composite.getTreeTermHierarchy().getSelection().isEmpty();
+            }
         });
     }