Convert DerivateView to an EditorPart
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateView.java
index 178c3f7f598010b1214797bbf3a6fbbe254c1991..ba2b3168117fa00724603b78ea2823dda7670a34 100644 (file)
@@ -29,12 +29,18 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IMemento;
-import org.eclipse.ui.ISaveablePart2;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
 import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -42,18 +48,21 @@ import eu.etaxonomy.cdm.model.molecular.SingleRead;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.Messages;
 import eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter.DerivateSearchCompositeController;
 import eu.etaxonomy.taxeditor.model.IContextListener;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider;
 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
 
@@ -61,8 +70,9 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
  * Displays the derivate hierarchy of the specimen specified in the editor input.
  *
  */
-public class DerivateView extends AbstractCdmViewPart implements IPartContentHasFactualData, ISaveablePart2,
-        IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia, IContextListener {
+public class DerivateView extends EditorPart implements IPartContentHasFactualData, IConversationEnabled,
+        ICdmEntitySessionEnabled, IDirtyMarkable, IPostOperationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
+        IContextListener, ISelectionListener {
     public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"; //$NON-NLS-1$
 
     public static final String YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION = Messages.DerivateView_YOU_NEED_TO_SAVE;
@@ -118,17 +128,22 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
 
     private Taxon selectedTaxon;
 
+    private ISelectionService selectionService;
+
     /**
      * Default constructor
      */
     public DerivateView() {
-        init();
     }
 
+
     /**
-     *
+     * {@inheritDoc}
      */
-    private void init() {
+    @Override
+    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+        this.setSite(site);
+        this.setInput(input);
         this.derivateToRootEntityMap = new HashMap<SpecimenOrObservationBase<?>, SpecimenOrObservationBase<?>>();
         this.rootElements = new HashSet<SpecimenOrObservationBase<?>>();
 
@@ -314,14 +329,6 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
         return conversation;
     }
 
-    /**
-     * @return the viewer
-     */
-    @Override
-    public TreeViewer getViewer() {
-        return viewer;
-    }
-
     @Override
     public void changed(Object element) {
         setDirty(true);
@@ -452,10 +459,18 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
 
     @Override
     public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+        if(viewer.getTree().isDisposed()){
+            return;
+        }
         if(listenToSelectionChange && selection instanceof IStructuredSelection){
             Object selectedElement = ((IStructuredSelection) selection).getFirstElement();
-            if(selectedElement instanceof CdmBase && ((CdmBase) selectedElement).isInstanceOf(Taxon.class)){
-                selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, Taxon.class);
+            if(selectedElement instanceof CdmBase){
+                if(((CdmBase) selectedElement).isInstanceOf(TaxonNode.class)){
+                    selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, TaxonNode.class).getTaxon();
+                }
+                else if(((CdmBase) selectedElement).isInstanceOf(Taxon.class)){
+                    selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, Taxon.class);
+                }
                 Collection<SpecimenOrObservationBase> fieldUnits = CdmStore.getService(IOccurrenceService.class).listFieldUnitsByAssociatedTaxon(selectedTaxon, null, null);
                 Collection<UUID> uuids = new HashSet<UUID>();
                 for (SpecimenOrObservationBase specimenOrObservationBase : fieldUnits) {
@@ -467,6 +482,10 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
         }
     }
 
+    public TreeViewer getViewer() {
+        return viewer;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -475,22 +494,6 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
         return new ArrayList<SpecimenOrObservationBase<?>>(rootElements);
     }
 
-    @Override
-    public void createViewer(Composite parent) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public boolean isSaveOnCloseNeeded() {
-        return isDirty();
-    }
-
-    @Override
-    public int promptToSaveOnClose() {
-        return ISaveablePart2.DEFAULT;
-    }
-
     public void toggleListenToSelectionChange() {
         listenToSelectionChange = !listenToSelectionChange;
         derivateSearchCompositeController.setEnabled(!listenToSelectionChange);
@@ -529,7 +532,6 @@ public class DerivateView extends AbstractCdmViewPart implements IPartContentHas
      */
     @Override
     public void contextStart(IMemento memento, IProgressMonitor monitor) {
-        init();
         derivateSearchCompositeController.setEnabled(!listenToSelectionChange);
         viewer.getTree().setEnabled(true);
         refreshTree();