ref #6925 Inject context into operations to allow sync/async execution
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / e4 / TaxonNavigatorE4.java
index 5d563134ea7e042172b50576d5e7362ee9233ad5..0a6149e952e7031cb504b2ce790cf0b141790862 100644 (file)
@@ -30,7 +30,9 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.e4.ui.di.Focus;
 import org.eclipse.e4.ui.services.EMenuService;
 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
@@ -45,6 +47,7 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.ITreeNode;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
@@ -52,8 +55,8 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeByRankAndNameComparator;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
+import eu.etaxonomy.taxeditor.model.IContextListener;
 import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
@@ -69,16 +72,14 @@ import eu.etaxonomy.taxeditor.store.LoginManager;
 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
 
 /**
- * Taxonomic tree implementation using Common Navigator Framework.
  *
- * @author p.ciardelli
- * @author n.hoffmann
- * @created 02.06.2009
- * @version 1.0+-
+ * @author pplitzner
+ * @since Sep 7, 2017
+ *
  */
 public class TaxonNavigatorE4 implements
                IPostOperationEnabled, IConversationEnabled, Observer,
-               ICdmEntitySessionEnabled, ICdmChangeListener {
+               ICdmEntitySessionEnabled, ICdmChangeListener, IContextListener {
 
     private static final String RESTORING_TAXON_NAVIGATOR = Messages.TaxonNavigator_RESTORE;
 
@@ -90,8 +91,6 @@ public class TaxonNavigatorE4 implements
 
        private ICdmEntitySession cdmEntitySession;
 
-       private String partNameCache;
-
        private IDataChangeBehavior dataChangeBehavior;
 
        private Root root;
@@ -105,6 +104,7 @@ public class TaxonNavigatorE4 implements
 
        @Inject
     public TaxonNavigatorE4() {
+           CdmStore.getContextManager().addContextListener(this);
     }
 
        @PostConstruct
@@ -120,14 +120,23 @@ public class TaxonNavigatorE4 implements
 
            viewer.setContentProvider(new TaxonNavigatorContentProviderE4());
         viewer.setLabelProvider(new TaxonNavigatorLabelProviderE4());
-        viewer.setInput(getInitialInput());
+        viewer.addDoubleClickListener(event->{
+            ISelection selection = event.getSelection();
+            if(selection instanceof IStructuredSelection){
+                Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+                if(firstElement instanceof ICdmBase){
+                    NavigationUtil.openEditor((ICdmBase) firstElement, viewer.getControl().getShell());
+                }
+            }
+        });
 
         //propagate selection
-        selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
+        selectionChangedListener = (event -> selService.setSelection(event.getSelection()));
         viewer.addSelectionChangedListener(selectionChangedListener);
 
         //create context menu
         menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.navigator.popupmenu.taxonnavigator");
+        menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.store.menu.import");
 
            init();
        }
@@ -170,6 +179,7 @@ public class TaxonNavigatorE4 implements
                    CdmApplicationState.getCurrentDataChangeService().register(this);
                }
                CdmStore.getLoginManager().addObserver(this);
+        viewer.setInput(getInitialInput());
        }
 
        /**
@@ -323,23 +333,6 @@ public class TaxonNavigatorE4 implements
                return true;
        }
 
-       //FIXME E4 migrate double click
-//     /** {@inheritDoc} */
-//     @Override
-//     protected void handleDoubleClick(DoubleClickEvent event) {
-//             ISelection selection = event.getSelection();
-//             if(selection instanceof IStructuredSelection){
-//                     Object firstElement = ((IStructuredSelection) selection).getFirstElement();
-//                     if(firstElement instanceof ICdmBase){
-//                             NavigationUtil.openEditor((ICdmBase) firstElement);
-//                     }
-//             }
-//             // If the double click is passed up to the super-class it will
-//             // expand/collapse trees.
-//             // We do not want that
-//             // super.handleDoubleClick(anEvent);
-//     }
-
        @Override
        public boolean onComplete() {
                return true;
@@ -400,4 +393,44 @@ public class TaxonNavigatorE4 implements
          propertyPathsMap.put("childNodes", taxonNodePropertyPaths); //$NON-NLS-1$
         return propertyPathsMap;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void contextStop(IMemento memento, IProgressMonitor monitor) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void contextStart(IMemento memento, IProgressMonitor monitor) {
+        if(viewer!=null){
+            init();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void contextRefresh(IProgressMonitor monitor) {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
+    }
 }