ref #6908 Migrate polytomous key list and graph editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / e4 / AbstractGraphKeyEditorE4.java
index 4431626e4b39194573e98a8397f4343574acee76..0746e37c1558db5e7833b96a4bdbf13b45c236d3 100644 (file)
@@ -3,30 +3,23 @@
  */
 package eu.etaxonomy.taxeditor.editor.key.e4;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.GroupMarker;
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.di.Persist;
+import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
 import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.IBaseLabelProvider;
 import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.EditorPart;
 import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
 import org.eclipse.zest.core.viewers.GraphViewer;
 import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
 import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
-import org.eclipse.zest.core.widgets.ZestStyles;
 import org.eclipse.zest.layouts.LayoutAlgorithm;
 import org.eclipse.zest.layouts.LayoutStyles;
 import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
@@ -36,151 +29,68 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 
 /**
- * @author n.hoffmann
  *
+ * @author pplitzner
+ * @since Sep 28, 2017
+ *
+ * @param <T>
  */
 public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
-               extends EditorPart implements IConversationEnabled,
+implements IConversationEnabled,
                IZoomableWorkbenchPart, IPostOperationEnabled,
                IDirtyMarkable {
 
-       private CdmFormFactory formFactory;
-       private Composite container;
+       protected CdmFormFactory formFactory;
+       protected Composite container;
        protected GraphViewer viewer;
 
        private LayoutAlgorithm layoutAlgoritm;
        private ZoomContributionViewItem zoomContributionViewItem;
 
-       private boolean dirty = false;
        private IToolBarManager toolBarManager;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
-        * IProgressMonitor)
-        */
-       @Override
-       public void doSave(IProgressMonitor monitor) {
-               getConversationHolder().commit(true);
-               setDirty(false);
-               viewer.refresh();
-       }
+    private PolytomousKeyEditorInput input;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.EditorPart#doSaveAs()
-        */
-       @Override
-       public void doSaveAs() {
-               doSave(null);
-       }
+    @Inject
+    protected ESelectionService selService;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
-        * org.eclipse.ui.IEditorInput)
-        */
-       @Override
-       public void init(IEditorSite site, IEditorInput input)
-                       throws PartInitException {
-               setSite(site);
-               setInput(input);
-               formFactory = new CdmFormFactory(site.getShell().getDisplay());
-       }
+    @Inject
+    private MDirtyable dirty;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.EditorPart#isDirty()
-        */
-       @Override
-       public boolean isDirty() {
-               return dirty;
-       }
+    protected ISelectionChangedListener selectionChangedListener;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
-        */
-       @Override
-       public boolean isSaveAsAllowed() {
-               return false;
-       }
+    @Inject
+    private MPart thisPart;
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
-        * .Composite)
-        */
-       @Override
-       public void createPartControl(Composite parent) {
-               container = formFactory.createComposite(parent);
-
-               container.setLayout(new FillLayout());
-               viewer = new GraphViewer(container, SWT.NONE);
-               getSite().setSelectionProvider(viewer);
-
-               viewer.setContentProvider(getContentProvider());
-               viewer.setLabelProvider(getLabelProvider());
-
-               viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
-
-               viewer.setLayoutAlgorithm(getLayoutAlgoritm(), false);
-
-               createMenu();
-
-               createToolbar();
-
-               viewer.setInput(getKey());
-
-               container.addControlListener(new ControlListener() {
-
-                       @Override
-                       public void controlResized(ControlEvent e) {
-                               // applyLayout();
-                       }
-
-                       @Override
-                       public void controlMoved(ControlEvent e) {
-                               // TODO Auto-generated method stub
-
-                       }
-               });
+       @Persist
+       public void doSave() {
+               getConversationHolder().commit(true);
+               setDirty(false);
+               viewer.refresh();
        }
 
-       private void createToolbar() {
-               getToolBarManager().add(getZoomContributionViewItem());
+       public void init(PolytomousKeyEditorInput input) {
+               this.input = input;
        }
 
-       private void createMenu() {
-               // Add context menu to tree
-               MenuManager menuMgr = new MenuManager();
-               menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-
-               // MenuManager zoomMenu = new MenuManager("Zoom");
-               // zoomMenu.add(getZoomContributionViewItem());
-
-               ZoomContributionViewItem zoomItem = getZoomContributionViewItem();
-               menuMgr.add(zoomItem);
-               getSite().registerContextMenu(menuMgr, viewer);
-
-               Control control = viewer.getGraphControl();
-               Menu menu = menuMgr.createContextMenu(control);
+       public boolean isDirty() {
+               return dirty.isDirty();
+       }
 
-               control.setMenu(menu);
+    public PolytomousKeyEditorInput getEditorInput() {
+        return input;
+    }
 
-       }
+       //FIXME E4 migrate
+//     private void createToolbar() {
+//             getToolBarManager().add(getZoomContributionViewItem());
+//     }
 
        protected abstract IBaseLabelProvider getLabelProvider();
 
@@ -193,14 +103,15 @@ public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
         */
        public abstract T getKey();
 
-       @Override
+       @Focus
        public void setFocus() {
-               viewer.getControl().setFocus();
+           if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()) {
+            viewer.getControl().setFocus();
+        }
        }
 
        public void refresh() {
                viewer.refresh();
-               // graphViewer.applyLayout();
        }
 
        @Override
@@ -213,7 +124,7 @@ public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
                return viewer;
        }
 
-       private LayoutAlgorithm getLayoutAlgoritm() {
+       protected LayoutAlgorithm getLayoutAlgoritm() {
                if (layoutAlgoritm == null) {
                        // layoutAlgoritm = new CompositeLayoutAlgorithm(
                        // LayoutStyles.NO_LAYOUT_NODE_RESIZING,
@@ -250,13 +161,14 @@ public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
                return true;
        }
 
-       private IToolBarManager getToolBarManager() {
-               if (toolBarManager == null) {
-                       toolBarManager = getEditorSite().getActionBars()
-                                       .getToolBarManager();
-               }
-               return toolBarManager;
-       }
+       //FIXME E4 migrate
+//     private IToolBarManager getToolBarManager() {
+//             if (toolBarManager == null) {
+//                     toolBarManager = getEditorSite().getActionBars()
+//                                     .getToolBarManager();
+//             }
+//             return toolBarManager;
+//     }
 
        public void applyLayout() {
                viewer.applyLayout();
@@ -268,26 +180,15 @@ public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
        }
 
        public void setDirty(boolean dirty) {
-               this.dirty = dirty;
-               firePropertyChange(PROP_DIRTY);
+               this.dirty.setDirty(dirty);
        }
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
-        * java.lang.Object)
-        */
        @Override
        public void changed(Object element) {
                setDirty(true);
                viewer.update(element, null);
        }
 
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
-        */
        @Override
        public void forceDirty() {
            changed(null);