DefinedTermDropAdapter : added selection of source objects after drop and disabled...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / DefinedTermEditor.java
index 059990f6bebca7972e9720a438545c7e14e8e9a6..8cae931e980bcd485a7b65b85932fae29afce75c 100644 (file)
@@ -1,24 +1,21 @@
 // $Id$\r
 /**\r
  * Copyright (C) 2009 EDIT\r
- * European Distributed Institute of Taxonomy \r
+ * European Distributed Institute of Taxonomy\r
  * http://www.e-taxonomy.eu\r
- * \r
+ *\r
  * The contents of this file are subject to the Mozilla Public License Version 1.1\r
  * See LICENSE.TXT at the top of this package for the full license terms.\r
  */\r
 package eu.etaxonomy.taxeditor.editor.definedterm;\r
 \r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.jface.action.GroupMarker;\r
 import org.eclipse.jface.action.MenuManager;\r
 import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
 import org.eclipse.jface.viewers.ViewerSorter;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.dnd.DND;\r
@@ -38,15 +35,11 @@ import org.eclipse.ui.part.EditorPart;
 \r
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
-import eu.etaxonomy.cdm.model.common.TermType;\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.OrderedTermBase;\r
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.editor.definedterm.input.AbstractDefinedTermEditorInput;\r
 import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;\r
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;\r
@@ -56,12 +49,12 @@ import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
  * @date 3 Jan 2012\r
  *\r
  */\r
-public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkableSelectionProvider, IPostOperationEnabled {\r
+public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled {\r
 \r
        public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";\r
 \r
        public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";\r
-       \r
+\r
        protected TreeViewer viewer;\r
        protected ConversationHolder conversation;\r
        private ISelectionService selectionService;\r
@@ -69,9 +62,9 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
 \r
 \r
 \r
-       private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
+       private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
        /**\r
-        * \r
+        *\r
         */\r
        public DefinedTermEditor() {\r
                super();\r
@@ -80,42 +73,42 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
 \r
        @Override\r
        public void createPartControl(Composite parent) {\r
-                       \r
+\r
        //              parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));\r
-                       \r
+\r
                        FillLayout layout = new FillLayout();\r
                        layout.marginHeight = 0;\r
                        layout.marginWidth = 0;\r
                        layout.type = SWT.VERTICAL;\r
-                       \r
+\r
                        parent.setLayout(layout);\r
                        viewer = new TreeViewer(parent);\r
                        viewer.getControl().setLayoutData(LayoutConstants.FILL());\r
                        viewer.setContentProvider(new TermContentProvider());\r
                        viewer.setLabelProvider(new TermLabelProvider());\r
-                       viewer.setSorter(new ViewerSorter());\r
-                       \r
+                       viewer.setSorter(new DefinedTermSorter());\r
+\r
                        Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };\r
                        viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));\r
                        viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));\r
-                                                                       \r
+\r
                        getDefinedTermEditorInput().initialiseVocabularies();\r
                        viewer.setInput(getDefinedTermEditorInput().getVocabularies());\r
-                                               \r
+\r
                        getSite().setSelectionProvider(viewer);\r
-                       \r
+\r
                        selectionService = getSite().getWorkbenchWindow().getSelectionService();\r
                        selectionService.addSelectionListener(this);\r
-       \r
+\r
                        setPartName(getEditorInput().getName());\r
                        createMenu();\r
                }\r
-       \r
-       \r
 \r
-       \r
+\r
+\r
+\r
        /**\r
-        * \r
+        *\r
         */\r
        public TermEditorInput getDefinedTermEditorInput() {\r
                return (TermEditorInput) getEditorInput();\r
@@ -126,17 +119,17 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
         */\r
        @Override\r
        public boolean postOperation(CdmBase objectAffectedByOperation) {\r
-                       \r
-               \r
-               viewer.refresh();               \r
-               \r
+\r
+\r
+               viewer.refresh();\r
+\r
                if(objectAffectedByOperation != null){\r
                        viewer.setSelection(new StructuredSelection(objectAffectedByOperation));\r
                }\r
                setDirty(true);\r
 \r
                return true;\r
-       } \r
+       }\r
 \r
        private void createMenu() {\r
                // register context menu\r
@@ -144,14 +137,14 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                menuManager\r
                                .add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));\r
                getSite().registerContextMenu(ID, menuManager, viewer);\r
-       \r
+\r
                Control control = viewer.getControl();\r
                Menu menu = menuManager.createContextMenu(control);\r
                control.setMenu(menu);\r
        }\r
-       \r
 \r
-               \r
+\r
+\r
 \r
        @Override\r
        public void doSave(IProgressMonitor monitor) {\r
@@ -159,7 +152,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                setDirty(false);\r
                getDefinedTermEditorInput().initialiseVocabularies();\r
        }\r
-       \r
+\r
 \r
        @Override\r
        public void doSaveAs() {}\r
@@ -168,7 +161,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
        public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
                setSite(site);\r
                setInput(input);\r
-               \r
+\r
        }\r
 \r
        @Override\r
@@ -183,13 +176,14 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
 \r
        @Override\r
        public void setFocus() {\r
+           viewer.getControl().setFocus();\r
                getConversationHolder().bind();\r
        }\r
 \r
        @Override\r
        public void update(CdmDataChangeMap changeEvents) {\r
                // TODO Auto-generated method stub\r
-               \r
+\r
        }\r
 \r
        @Override\r
@@ -200,7 +194,7 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
        @Override\r
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
                // TODO Auto-generated method stub\r
-               \r
+\r
        }\r
 \r
        @Override\r
@@ -210,6 +204,14 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
                viewer.update(element, null);\r
        }\r
 \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()\r
+        */\r
+       @Override\r
+       public void forceDirty() {\r
+           changed(null);\r
+       }\r
+\r
        /**\r
         * @param dirty the dirty to set\r
         */\r
@@ -225,12 +227,34 @@ public class DefinedTermEditor extends EditorPart implements IConversationEnable
        }\r
 \r
        /**\r
-        * \r
+        *\r
         */\r
        public TreeViewer getViewer() {\r
                return viewer;\r
        }\r
 \r
+       private class DefinedTermSorter extends ViewerSorter {\r
+\r
+           @Override\r
+           public int compare(Viewer viewer, Object e1, Object e2) {\r
+               // the comparison value in this method determines the\r
+               // location <-> add term method used in the MoveDefinedTermOperation\r
+               // execute call\r
+               if(e1 instanceof OrderedTermBase && e2 instanceof OrderedTermBase) {\r
+                   OrderedTermBase otbe1 = (OrderedTermBase)e1;\r
+                   OrderedTermBase otbe2 = (OrderedTermBase)e2;\r
+                   if(otbe1.getOrderIndex() == otbe2.getOrderIndex()) {\r
+                       return 0;\r
+                   } else if(otbe1.isHigher(otbe2)) {\r
+                       return 1;\r
+                   } else {\r
+                       return -1;\r
+                   }\r
+               } else {\r
+                   return super.compare(viewer, e1, e2);\r
+               }\r
+           }\r
+       }\r
 \r
 \r
 }
\ No newline at end of file