ref #6909 Add "Link with editor" icon to navigator toolbar
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / TaxonNavigator.java
index ccf26252a58f1ab68c1288b765f1a6b617823ed5..f71f2796f856c1de52e4f49b15d4dbe3ca92289c 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
  * Copyright (C) 2007 EDIT
  * European Distributed Institute of Taxonomy
@@ -38,15 +37,18 @@ 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.ITreeNode;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
 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.DataChangeBridge;
 import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
@@ -60,21 +62,23 @@ import eu.etaxonomy.taxeditor.store.LoginManager;
  * @author p.ciardelli
  * @author n.hoffmann
  * @created 02.06.2009
- * @version 1.0
+ * @version 1.0+-
  */
 public class TaxonNavigator extends CommonNavigator implements
                IPostOperationEnabled, IConversationEnabled, Observer,
                ICdmEntitySessionEnabled, ICdmChangeListener {
 
-       /**
+    private static final String RESTORING_TAXON_NAVIGATOR = Messages.TaxonNavigator_RESTORE;
+
+    /**
         * Constant
         * <code>ID="eu.etaxonomy.taxeditor.navigation.navig"{trunked}</code>
         */
        public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator"; //$NON-NLS-1$
 
-       private static final String TREE_PATH = "treepath";
+       private static final String TREE_PATH = "treepath"; //$NON-NLS-1$
 
-       private static final String TREE_PATHS = "treepaths";
+       private static final String TREE_PATHS = "treepaths"; //$NON-NLS-1$
 
        private ConversationHolder conversation;
 
@@ -97,11 +101,14 @@ public class TaxonNavigator extends CommonNavigator implements
                Comparator<TaxonNode> comparator;
                if (PreferencesUtil.getSortNodesNaturally()){
                        comparator = new TaxonNaturalComparator();
-               } else{
+               } else if (PreferencesUtil.getSortNodesStrictlyAlphabetically()){
+                       comparator = new TaxonNodeByNameComparator();
+               }else {
                        comparator = new TaxonNodeByRankAndNameComparator();
                }
                TaxonNodeNavigatorComparator viewerComparator = new TaxonNodeNavigatorComparator(comparator);
                this.getCommonViewer().setComparator(viewerComparator);
+               //this.getCommonViewer().setAutoExpandLevel(2);
         setLinkingEnabled(true);
 //             this.getCommonViewer().addSelectionChangedListener(new ISelectionChangedListener() {
 //
@@ -126,6 +133,7 @@ public class TaxonNavigator extends CommonNavigator implements
                        // closing the whole application
                        // should be handled by the state manager too
                    root = new Root(conversation);
+
                        return root;
                }
                return new EmptyRoot();
@@ -149,11 +157,13 @@ public class TaxonNavigator extends CommonNavigator implements
                        conversation = CdmStore.createConversation();
                        conversation.registerForDataStoreChanges(TaxonNavigator.this);
                }
-               if (CdmStore.isActive() && cdmEntitySession == null) {
+               if (CdmStore.isActive()) {
                    cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
                    CdmApplicationState.getCurrentDataChangeService().register(this);
                }
                CdmStore.getLoginManager().addObserver(this);
+
+
        }
 
        /**
@@ -167,13 +177,15 @@ public class TaxonNavigator extends CommonNavigator implements
                            getConversationHolder().commit();
                        }
                }
-               getCommonViewer().refresh();
+               if(!getCommonViewer().getTree().isDisposed()){
+                   getCommonViewer().refresh();
+               }
        }
 
           /**
      * Refresh this navigators viewer
      */
-    public void refresh(Set objects) {
+    public void refresh(Set<?> objects) {
         for(Object obj : objects) {
             getCommonViewer().refresh(obj);
         }
@@ -218,9 +230,9 @@ public class TaxonNavigator extends CommonNavigator implements
                IProgressMonitor subProgressMonitor = NavigationUtil
                                .getSubProgressMonitor(monitor, 1);
 
-               subProgressMonitor.beginTask("Restoring Taxon Navigator",
+               subProgressMonitor.beginTask(RESTORING_TAXON_NAVIGATOR,
                                1 + mementoWork + 5);
-               subProgressMonitor.subTask("Restoring Taxon Navigator");
+               subProgressMonitor.subTask(RESTORING_TAXON_NAVIGATOR);
                subProgressMonitor.worked(1);
 
                conversation = CdmStore.createConversation();
@@ -262,7 +274,7 @@ public class TaxonNavigator extends CommonNavigator implements
             return null;
         }
 
-               for (String uuid : string.split(" ")) {
+               for (String uuid : string.split(" ")) { //$NON-NLS-1$
                        CdmBase cdmBaseObject = CdmStore.getService(
                                        IClassificationService.class).getTaxonNodeByUuid(
                                        UUID.fromString(uuid));
@@ -309,19 +321,19 @@ public class TaxonNavigator extends CommonNavigator implements
                memento = memento.createChild(TREE_PATHS);
                TreePath[] treePaths = this.getCommonViewer().getExpandedTreePaths();
 
-               monitor.beginTask("Saving Taxon Navigator State", treePaths.length);
+               monitor.beginTask(Messages.TaxonNavigator_SAVE_TASK, treePaths.length);
 
                for (TreePath treePath : treePaths) {
                        int pathLength = treePath.getSegmentCount();
-                       String path = "";
+                       String path = ""; //$NON-NLS-1$
                        for (int i = 0; i < pathLength; i++) {
                                Object segment = treePath.getSegment(i);
                                if (segment instanceof CdmBase) {
-                                       path += ((CdmBase) segment).getUuid().toString() + " ";
+                                       path += ((CdmBase) segment).getUuid().toString() + " "; //$NON-NLS-1$
                                        monitor.worked(1);
                                } else {
                                        MessagingUtils.warn(getClass(),
-                                                       "Non-taxon tree path segment " + segment);
+                                                       "Non-taxon tree path segment " + segment); //$NON-NLS-1$
                                }
                        }
                        memento.createChild(TREE_PATH, path.trim());
@@ -370,7 +382,7 @@ public class TaxonNavigator extends CommonNavigator implements
        @Override
        public String getFrameToolTipText(Object element) {
                if (element instanceof Root) {
-                       return "Taxonomic Tree";
+                       return Messages.TaxonNavigator_TAXON_TREE;
                }
                return super.getFrameToolTipText(element);
        }
@@ -448,8 +460,14 @@ public class TaxonNavigator extends CommonNavigator implements
 
        /** {@inheritDoc} */
        @Override
-       protected void handleDoubleClick(DoubleClickEvent anEvent) {
-               NavigationUtil.executeEditHandler();
+       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, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
+//                     }
+//             }
                // If the double click is passed up to the super-class it will
                // expand/collapse trees.
                // We do not want that
@@ -480,7 +498,7 @@ public class TaxonNavigator extends CommonNavigator implements
                getCommonViewer().getControl().setEnabled(!busy);
                if (busy) {
                        partNameCache = getPartName();
-                       setPartName("Loading datasources");
+                       setPartName(Messages.TaxonNavigator_LOAD_DATASOURCE);
                } else {
                        if (partNameCache != null) {
                                setPartName(partNameCache);
@@ -512,7 +530,7 @@ public class TaxonNavigator extends CommonNavigator implements
      * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
      */
     @Override
-    public List<Classification> getRootEntities() {
+    public List<ITreeNode> getRootEntities() {
         if(root != null) {
             return root.getParentBeans();
         }
@@ -524,8 +542,13 @@ public class TaxonNavigator extends CommonNavigator implements
      */
     @Override
     public void onChange(CdmChangeEvent event) {
+//        if(event.getAction() == Action.Delete && Classification.class.equals(event.getEntityType())) {
+//            refresh();
+//            return;
+//        }
+        refresh();
         for(CdmBase cb : event.getChangedObjects()) {
-            if(cb instanceof TaxonNode) {
+               if(cb instanceof TaxonNode) {
                 TaxonNode tn = (TaxonNode)cb;
                 if(tn.getTaxon() == null) {
                     getCommonViewer().refresh(tn.getClassification());
@@ -546,9 +569,9 @@ public class TaxonNavigator extends CommonNavigator implements
     public Map<Object, List<String>> getPropertyPathsMap() {
         Map<Object, List<String>> propertyPathsMap = new HashMap<Object, List<String>>();
         List<String> taxonNodePropertyPaths = Arrays.asList(new String[] {
-                "taxon.name"
+                "taxon.name" //$NON-NLS-1$
         });
-         propertyPathsMap.put("childNodes", taxonNodePropertyPaths);
+         propertyPathsMap.put("childNodes", taxonNodePropertyPaths); //$NON-NLS-1$
         return propertyPathsMap;
     }
 }