performed javacscript:fix and worked on documentation
[taxeditor.git] / taxeditor-navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / TaxonNavigator.java
index 7043332e404f9a80f96eccbc02eecd4231ec585d..5cf1a06bf0274195502cea6ab74948571b29ff53 100644 (file)
-// $Id$\r
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\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
-\r
-package eu.etaxonomy.taxeditor.navigation.navigator;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-import java.util.UUID;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.Command;\r
-import org.eclipse.core.commands.common.NotDefinedException;\r
-import org.eclipse.core.runtime.IAdaptable;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.TreePath;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.IMemento;\r
-import org.eclipse.ui.IViewSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.commands.ICommandService;\r
-import org.eclipse.ui.handlers.IHandlerService;\r
-import org.eclipse.ui.navigator.CommonNavigator;\r
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;\r
-\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.model.DataChangeBridge;\r
-import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;\r
-import eu.etaxonomy.taxeditor.navigation.NavigationUtil;\r
-import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
-\r
-/** \r
- * Taxonomic tree implementation using Common Navigator Framework.\r
- * \r
- * @author p.ciardelli\r
- * @created 02.06.2009\r
- * @version 1.0\r
- */\r
-public class TaxonNavigator extends CommonNavigator implements IPostOperationEnabled, IConversationEnabled{\r
-       private static final Logger logger = Logger\r
-                       .getLogger(TaxonNavigator.class);\r
-\r
-       public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator"; //$NON-NLS-1$\r
-\r
-       public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.navigation.command.editSelection";\r
-       \r
-       private static final String TREE_PATH = "treepath";\r
-\r
-       private static final String TREE_PATHS = "treepaths";\r
-\r
-       private ConversationHolder conversation;\r
-       \r
-       private String partNameCache;\r
-       \r
-       private IWorkbenchSiteProgressService service;\r
-\r
-       private IDataChangeBehavior dataChangeBehavior;\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.navigator.CommonNavigator#getInitialInput()\r
-        */\r
-       @Override\r
-       protected IAdaptable getInitialInput() {\r
-               if(CdmStore.isActive()){\r
-                       // TODO when closing and reopening the taxon navigator \r
-                       // we do not preserve state. Closing the view, in contrary to closing the whole application\r
-                       // should be handled by the state manager too\r
-                                               \r
-                       return new Root(conversation);\r
-               }\r
-               return new EmptyRoot();\r
-       }\r
-       \r
-       /**\r
-        * \r
-        */\r
-       public void init(IViewSite site)\r
-                       throws PartInitException {\r
-               super.init(site);\r
-               service = (IWorkbenchSiteProgressService) getSite().getAdapter(IWorkbenchSiteProgressService.class);\r
-               init();\r
-       }\r
-       \r
-       public void init(){\r
-               if(CdmStore.isActive() && conversation == null){\r
-                       conversation = CdmStore.createConversation();\r
-                       conversation.registerForDataStoreChanges(TaxonNavigator.this);\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Refresh this navigators viewer\r
-        */\r
-       public void refresh(){\r
-               logger.warn("Refreshing navigator");\r
-               getConversationHolder().bind();\r
-               this.getCommonViewer().refresh();\r
-       }\r
-\r
-       /**\r
-        * Removes all content \r
-        */\r
-       public void clear(){\r
-               getCommonViewer().setInput(new EmptyRoot());\r
-       }\r
-       \r
-       /**\r
-        * \r
-        * @param memento\r
-        */\r
-       public void restore(IMemento memento, IProgressMonitor monitor) {\r
-               if (memento == null) {\r
-                       getCommonViewer().setInput(new Root(conversation));\r
-                       return;\r
-               }\r
-               int mementoWork = 0;\r
-               Set<TreePath> treePaths = new HashSet<TreePath>();\r
-               IMemento[] treePathMementos = null;\r
-               \r
-               IMemento treePathsMemento = memento.getChild(TREE_PATHS);\r
-               \r
-               if (treePathsMemento != null) {\r
-                       treePathMementos = treePathsMemento.getChildren(TREE_PATH);\r
-                       mementoWork = treePathMementos.length;\r
-               }\r
-               // begin the monitor with steps for all tree paths and steps for creating \r
-               // conversation s.o., refreshing the tree and setting the paths \r
-               IProgressMonitor subProgressMonitor = NavigationUtil.getSubProgressMonitor(monitor, 1); \r
-               \r
-               subProgressMonitor.beginTask("Restoring Taxon Navigator", 1 + mementoWork + 5);\r
-               subProgressMonitor.subTask("");\r
-               subProgressMonitor.worked(1);\r
-               \r
-               conversation = CdmStore.createConversation();\r
-               subProgressMonitor.worked(1);\r
-               conversation.registerForDataStoreChanges(TaxonNavigator.this);\r
-               subProgressMonitor.worked(1);\r
-               getCommonViewer().setInput(new Root(conversation));\r
-               subProgressMonitor.worked(1);\r
-               getCommonViewer().refresh();\r
-               subProgressMonitor.worked(1);\r
-               \r
-               \r
-               \r
-               if (treePathMementos != null && treePathMementos.length > 0) {\r
-                       for (IMemento treePathMemento : treePathMementos) {\r
-                               TreePath treePath = createTreePathFromString(treePathMemento.getID());\r
-                               if (!subProgressMonitor.isCanceled() && treePath != null) {\r
-                                       treePaths.add(treePath);\r
-                                       subProgressMonitor.worked(1);\r
-                               }\r
-                       }\r
-               }\r
-               if (treePaths.size() > 0) {\r
-                       TaxonNavigator.this.getCommonViewer().setExpandedTreePaths(treePaths.toArray(new TreePath[0]));\r
-                       subProgressMonitor.worked(1);\r
-               }\r
-               subProgressMonitor.done();\r
-       }\r
-\r
-       /**\r
-        * @param string\r
-        * @return\r
-        */\r
-       private TreePath createTreePathFromString(String string) {\r
-\r
-               List<CdmBase> pathList = new ArrayList<CdmBase>();\r
-               \r
-               if(string.length() == 0) return null; \r
-               \r
-               for (String uuid : string.split(" ")) {\r
-                       CdmBase cdmBaseObject = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(UUID.fromString(uuid));\r
-                       if (cdmBaseObject == null) {\r
-                               // is this a tree uuid?\r
-                               cdmBaseObject = CdmStore.getTaxonTreeService().getTaxonomicTreeByUuid(UUID.fromString(uuid));\r
-                               \r
-                               if(cdmBaseObject == null) return null;\r
-                       }\r
-                       pathList.add(cdmBaseObject);\r
-               }\r
-               return new TreePath(pathList.toArray());\r
-       }\r
-\r
-\r
-       @Override\r
-       public void saveState(IMemento aMemento) {\r
-               //\r
-       }\r
-       \r
-       public void saveTreeState(IMemento memento, IProgressMonitor progressMonitor) {\r
-               if (memento == null) {\r
-                       return;\r
-               }\r
-               IProgressMonitor monitor = NavigationUtil.getSubProgressMonitor(progressMonitor, 1);    \r
-               \r
-               super.saveState(memento);\r
-               \r
-               memento = memento.createChild(TREE_PATHS);\r
-               TreePath[] treePaths = this.getCommonViewer().getExpandedTreePaths();\r
-               \r
-               monitor.beginTask("Saving Taxon Navigator State", treePaths.length);\r
-               \r
-               for (TreePath treePath : treePaths) {\r
-                       int pathLength = treePath.getSegmentCount();\r
-                       String path = "";\r
-                       for (int i = 0; i < pathLength; i++) {\r
-                               Object segment = treePath.getSegment(i);\r
-                               if (segment instanceof CdmBase) {\r
-                                       path += ((CdmBase) segment).getUuid().toString() + " ";\r
-                                       monitor.worked(1);                              \r
-                               } else {\r
-                                       logger.warn("Non-taxon tree path segment " + segment);\r
-                               }\r
-                       }\r
-                       logger.info("Creating memento child for path " + path.trim());\r
-                       memento.createChild(TREE_PATH, path.trim());\r
-               }\r
-               monitor.done();\r
-       }\r
-       \r
-       /**\r
-        * Activates the current view.\r
-        */\r
-       private void activateView() {\r
-                  getSite().getPage().activate(this);\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.navigator.CommonNavigator#createPartControl(org.eclipse.swt.widgets.Composite)\r
-        */\r
-       public void createPartControl(Composite aParent) {\r
-               super.createPartControl(aParent);\r
-               \r
-               // It seems the workbench does not set the focus at the right time. This should fix this.\r
-//             getCommonViewer().addSelectionChangedListener(new ISelectionChangedListener() {\r
-//                public void selectionChanged(SelectionChangedEvent event) {\r
-//                          activateView();\r
-//                }\r
-//             });\r
-       }\r
-       \r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
-        */\r
-       public ConversationHolder getConversationHolder() {\r
-               return conversation;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)\r
-        */\r
-       public void update(CdmDataChangeMap changeEvents) {\r
-               if(dataChangeBehavior == null){\r
-                       dataChangeBehavior = new TaxonNavigatorDataChangeBehavior(this);\r
-               }\r
-               \r
-               DataChangeBridge.handleDataChange(changeEvents, dataChangeBehavior);\r
-       }\r
-       \r
-       public String getFrameToolTipText(Object element) {\r
-               if (element instanceof Root) {\r
-                       return "Taxonomic Tree";\r
-               }\r
-               return super.getFrameToolTipText(element);\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.part.WorkbenchPart#dispose()\r
-        */\r
-       @Override\r
-       public void dispose() {\r
-               super.dispose();\r
-               dataChangeBehavior = null;\r
-               if(conversation != null){\r
-                       conversation.unregisterForDataStoreChanges(this);\r
-               }\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.navigator.CommonNavigator#setFocus()\r
-        */\r
-       @Override\r
-       public void setFocus() {\r
-               //logger.warn("Setting focus to navigator");\r
-               super.setFocus();\r
-               if(getConversationHolder() != null){\r
-                       getConversationHolder().bind();\r
-               }\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
-        */\r
-       public boolean postOperation(CdmBase objectAffectedByOperation) {\r
-               // nothing to do here\r
-               return true;\r
-       }\r
-\r
-       public void save(IMemento memento, IProgressMonitor monitor) {\r
-               saveTreeState(memento, monitor);\r
-               if(conversation != null){\r
-                       conversation.unregisterForDataStoreChanges(this);\r
-                       conversation = null;\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * @see http://www.eclipse.org/forums/index.php?t=msg&goto=512094&\r
-        */\r
-       @Override\r
-       protected void handleDoubleClick(DoubleClickEvent anEvent) {\r
-               \r
-               ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);\r
-               \r
-               Command command = commandService.getCommand(OPEN_COMMAND_ID); \r
-               if(command.isEnabled()) {\r
-                       IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);\r
-                       try {\r
-                               handlerService.executeCommand(OPEN_COMMAND_ID, null);\r
-                       } catch (NotDefinedException e) {\r
-                               throw new RuntimeException("Could not find open command: " + OPEN_COMMAND_ID);\r
-                       } catch (Exception e) {\r
-                               logger.error("An exception occured while trying to open a selection", e);\r
-                       }\r
-               }\r
-               // If the double click is passed up to the super-class it will expand/collapse trees.\r
-               // We do not want that\r
-               //super.handleDoubleClick(anEvent);\r
-       }\r
-\r
-       public boolean onComplete() {\r
-               // TODO Auto-generated method stub\r
-               return false;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)\r
-        */\r
-       @Override\r
-       public void showBusy(boolean busy) {\r
-               super.showBusy(busy);\r
-               getCommonViewer().getControl().setEnabled(!busy);\r
-               if(busy){\r
-                       partNameCache = getPartName();\r
-                       setPartName("Loading datasources");\r
-               }else{\r
-                       if(partNameCache != null){\r
-                               setPartName(partNameCache);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.navigation.navigator;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.DataChangeBridge;
+import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
+import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * Taxonomic tree implementation using Common Navigator Framework.
+ *
+ * @author p.ciardelli
+ * @created 02.06.2009
+ * @version 1.0
+ */
+public class TaxonNavigator extends CommonNavigator implements IPostOperationEnabled, IConversationEnabled{
+       private static final Logger logger = Logger
+                       .getLogger(TaxonNavigator.class);
+
+       /** Constant <code>ID="eu.etaxonomy.taxeditor.navigation.navig"{trunked}</code> */
+       public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator"; //$NON-NLS-1$
+
+       /** Constant <code>OPEN_COMMAND_ID="eu.etaxonomy.taxeditor.navigation.comma"{trunked}</code> */
+       public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.navigation.command.editSelection";
+       
+       private static final String TREE_PATH = "treepath";
+
+       private static final String TREE_PATHS = "treepaths";
+
+       private ConversationHolder conversation;
+       
+       private String partNameCache;
+       
+       private IWorkbenchSiteProgressService service;
+
+       private IDataChangeBehavior dataChangeBehavior;
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.navigator.CommonNavigator#getInitialInput()
+        */
+       /** {@inheritDoc} */
+       @Override
+       protected IAdaptable getInitialInput() {
+               if(CdmStore.isActive()){
+                       // TODO when closing and reopening the taxon navigator 
+                       // we do not preserve state. Closing the view, in contrary to closing the whole application
+                       // should be handled by the state manager too
+                                               
+                       return new Root(conversation);
+               }
+               return new EmptyRoot();
+       }
+       
+       /** {@inheritDoc} */
+       public void init(IViewSite site)
+                       throws PartInitException {
+               super.init(site);
+               service = (IWorkbenchSiteProgressService) getSite().getAdapter(IWorkbenchSiteProgressService.class);
+               init();
+       }
+       
+       /**
+        * <p>init</p>
+        */
+       public void init(){
+               if(CdmStore.isActive() && conversation == null){
+                       conversation = CdmStore.createConversation();
+                       conversation.registerForDataStoreChanges(TaxonNavigator.this);
+               }
+       }
+       
+       /**
+        * Refresh this navigators viewer
+        */
+       public void refresh(){
+               logger.warn("Refreshing navigator");
+               getConversationHolder().bind();
+               this.getCommonViewer().refresh();
+       }
+
+       /**
+        * Removes all content
+        */
+       public void clear(){
+               getCommonViewer().setInput(new EmptyRoot());
+       }
+       
+       /**
+        * <p>restore</p>
+        *
+        * @param memento a {@link org.eclipse.ui.IMemento} object.
+        * @param monitor a {@link org.eclipse.core.runtime.IProgressMonitor} object.
+        */
+       public void restore(IMemento memento, IProgressMonitor monitor) {
+               if (memento == null) {
+                       getCommonViewer().setInput(new Root(conversation));
+                       return;
+               }
+               int mementoWork = 0;
+               Set<TreePath> treePaths = new HashSet<TreePath>();
+               IMemento[] treePathMementos = null;
+               
+               IMemento treePathsMemento = memento.getChild(TREE_PATHS);
+               
+               if (treePathsMemento != null) {
+                       treePathMementos = treePathsMemento.getChildren(TREE_PATH);
+                       mementoWork = treePathMementos.length;
+               }
+               // begin the monitor with steps for all tree paths and steps for creating 
+               // conversation s.o., refreshing the tree and setting the paths 
+               IProgressMonitor subProgressMonitor = NavigationUtil.getSubProgressMonitor(monitor, 1); 
+               
+               subProgressMonitor.beginTask("Restoring Taxon Navigator", 1 + mementoWork + 5);
+               subProgressMonitor.subTask("");
+               subProgressMonitor.worked(1);
+               
+               conversation = CdmStore.createConversation();
+               subProgressMonitor.worked(1);
+               conversation.registerForDataStoreChanges(TaxonNavigator.this);
+               subProgressMonitor.worked(1);
+               getCommonViewer().setInput(new Root(conversation));
+               subProgressMonitor.worked(1);
+               getCommonViewer().refresh();
+               subProgressMonitor.worked(1);
+               
+               
+               
+               if (treePathMementos != null && treePathMementos.length > 0) {
+                       for (IMemento treePathMemento : treePathMementos) {
+                               TreePath treePath = createTreePathFromString(treePathMemento.getID());
+                               if (!subProgressMonitor.isCanceled() && treePath != null) {
+                                       treePaths.add(treePath);
+                                       subProgressMonitor.worked(1);
+                               }
+                       }
+               }
+               if (treePaths.size() > 0) {
+                       TaxonNavigator.this.getCommonViewer().setExpandedTreePaths(treePaths.toArray(new TreePath[0]));
+                       subProgressMonitor.worked(1);
+               }
+               subProgressMonitor.done();
+       }
+
+       /**
+        * @param string
+        * @return
+        */
+       private TreePath createTreePathFromString(String string) {
+
+               List<CdmBase> pathList = new ArrayList<CdmBase>();
+               
+               if(string.length() == 0) return null; 
+               
+               for (String uuid : string.split(" ")) {
+                       CdmBase cdmBaseObject = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(UUID.fromString(uuid));
+                       if (cdmBaseObject == null) {
+                               // is this a tree uuid?
+                               cdmBaseObject = CdmStore.getTaxonTreeService().getTaxonomicTreeByUuid(UUID.fromString(uuid));
+                               
+                               if(cdmBaseObject == null) return null;
+                       }
+                       pathList.add(cdmBaseObject);
+               }
+               return new TreePath(pathList.toArray());
+       }
+
+
+       /** {@inheritDoc} */
+       @Override
+       public void saveState(IMemento aMemento) {
+               //
+       }
+       
+       /**
+        * <p>saveTreeState</p>
+        *
+        * @param memento a {@link org.eclipse.ui.IMemento} object.
+        * @param progressMonitor a {@link org.eclipse.core.runtime.IProgressMonitor} object.
+        */
+       public void saveTreeState(IMemento memento, IProgressMonitor progressMonitor) {
+               if (memento == null) {
+                       return;
+               }
+               IProgressMonitor monitor = NavigationUtil.getSubProgressMonitor(progressMonitor, 1);    
+               
+               super.saveState(memento);
+               
+               memento = memento.createChild(TREE_PATHS);
+               TreePath[] treePaths = this.getCommonViewer().getExpandedTreePaths();
+               
+               monitor.beginTask("Saving Taxon Navigator State", treePaths.length);
+               
+               for (TreePath treePath : treePaths) {
+                       int pathLength = treePath.getSegmentCount();
+                       String path = "";
+                       for (int i = 0; i < pathLength; i++) {
+                               Object segment = treePath.getSegment(i);
+                               if (segment instanceof CdmBase) {
+                                       path += ((CdmBase) segment).getUuid().toString() + " ";
+                                       monitor.worked(1);                              
+                               } else {
+                                       logger.warn("Non-taxon tree path segment " + segment);
+                               }
+                       }
+                       logger.info("Creating memento child for path " + path.trim());
+                       memento.createChild(TREE_PATH, path.trim());
+               }
+               monitor.done();
+       }
+       
+       /**
+        * Activates the current view.
+        */
+       private void activateView() {
+                  getSite().getPage().activate(this);
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.navigator.CommonNavigator#createPartControl(org.eclipse.swt.widgets.Composite)
+        */
+       /** {@inheritDoc} */
+       public void createPartControl(Composite aParent) {
+               super.createPartControl(aParent);
+               
+               // It seems the workbench does not set the focus at the right time. This should fix this.
+//             getCommonViewer().addSelectionChangedListener(new ISelectionChangedListener() {
+//                public void selectionChanged(SelectionChangedEvent event) {
+//                          activateView();
+//                }
+//             });
+       }
+       
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
+        */
+       /**
+        * <p>getConversationHolder</p>
+        *
+        * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+        */
+       public ConversationHolder getConversationHolder() {
+               return conversation;
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+        */
+       /** {@inheritDoc} */
+       public void update(CdmDataChangeMap changeEvents) {
+               if(dataChangeBehavior == null){
+                       dataChangeBehavior = new TaxonNavigatorDataChangeBehavior(this);
+               }
+               
+               DataChangeBridge.handleDataChange(changeEvents, dataChangeBehavior);
+       }
+       
+       /** {@inheritDoc} */
+       public String getFrameToolTipText(Object element) {
+               if (element instanceof Root) {
+                       return "Taxonomic Tree";
+               }
+               return super.getFrameToolTipText(element);
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#dispose()
+        */
+       /** {@inheritDoc} */
+       @Override
+       public void dispose() {
+               super.dispose();
+               dataChangeBehavior = null;
+               if(conversation != null){
+                       conversation.unregisterForDataStoreChanges(this);
+               }
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.navigator.CommonNavigator#setFocus()
+        */
+       /** {@inheritDoc} */
+       @Override
+       public void setFocus() {
+               //logger.warn("Setting focus to navigator");
+               super.setFocus();
+               if(getConversationHolder() != null){
+                       getConversationHolder().bind();
+               }
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
+        */
+       /** {@inheritDoc} */
+       public boolean postOperation(CdmBase objectAffectedByOperation) {
+               // nothing to do here
+               return true;
+       }
+
+       /**
+        * <p>save</p>
+        *
+        * @param memento a {@link org.eclipse.ui.IMemento} object.
+        * @param monitor a {@link org.eclipse.core.runtime.IProgressMonitor} object.
+        */
+       public void save(IMemento memento, IProgressMonitor monitor) {
+               saveTreeState(memento, monitor);
+               if(conversation != null){
+                       conversation.unregisterForDataStoreChanges(this);
+                       conversation = null;
+               }
+       }
+       
+       /** {@inheritDoc} */
+       @Override
+       protected void handleDoubleClick(DoubleClickEvent anEvent) {
+               
+               ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);
+               
+               Command command = commandService.getCommand(OPEN_COMMAND_ID); 
+               if(command.isEnabled()) {
+                       IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);
+                       try {
+                               handlerService.executeCommand(OPEN_COMMAND_ID, null);
+                       } catch (NotDefinedException e) {
+                               throw new RuntimeException("Could not find open command: " + OPEN_COMMAND_ID);
+                       } catch (Exception e) {
+                               logger.error("An exception occured while trying to open a selection", e);
+                       }
+               }
+               // If the double click is passed up to the super-class it will expand/collapse trees.
+               // We do not want that
+               //super.handleDoubleClick(anEvent);
+       }
+
+       /**
+        * <p>onComplete</p>
+        *
+        * @return a boolean.
+        */
+       public boolean onComplete() {
+               // TODO Auto-generated method stub
+               return false;
+       }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
+        */
+       /** {@inheritDoc} */
+       @Override
+       public void showBusy(boolean busy) {
+               super.showBusy(busy);
+               getCommonViewer().getControl().setEnabled(!busy);
+               if(busy){
+                       partNameCache = getPartName();
+                       setPartName("Loading datasources");
+               }else{
+                       if(partNameCache != null){
+                               setPartName(partNameCache);
+                       }
+               }
+       }
+}