Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / TaxonNavigator.java
index d41b1489f4711b19ad724d8b9c9b7322dd383043..bd3bc0375113dd620191cae0e3c749ab72638bfa 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
  * Copyright (C) 2007 EDIT
  * European Distributed Institute of Taxonomy
@@ -25,6 +24,8 @@ import java.util.UUID;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IViewSite;
@@ -39,9 +40,11 @@ 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.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;
@@ -98,7 +101,9 @@ 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);
@@ -150,7 +155,7 @@ 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);
                }
@@ -168,13 +173,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);
         }
@@ -449,8 +456,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);
+                       }
+               }
                // If the double click is passed up to the super-class it will
                // expand/collapse trees.
                // We do not want that