Listen to selection changes in DerivativeEditor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateView.java
index 88c336ff50bbec7acd87c69bd08f1305981f0578..db52330ee77a1afe6eebf328b051c634be78d00b 100644 (file)
@@ -17,6 +17,7 @@ import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeNode;
@@ -31,14 +32,11 @@ 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.PartInitException;
-import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.ISaveablePart2;
+import org.eclipse.ui.IWorkbenchPart;
 
 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.api.service.molecular.ISequenceService;
 import eu.etaxonomy.cdm.model.common.CdmBase;
@@ -46,11 +44,11 @@ import eu.etaxonomy.cdm.model.molecular.Sequence;
 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.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.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
@@ -59,6 +57,7 @@ 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;
 
@@ -66,8 +65,8 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
  * Displays the derivate hierarchy of the specimen specified in the editor input.
  *
  */
-public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
-        IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
+public class DerivateView extends AbstractCdmViewPart implements IPartContentHasFactualData, ISaveablePart2,
+        IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
 
         ISelectionChangedListener, IPostOperationEnabled, ICdmEntitySessionEnabled{
     public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"; //$NON-NLS-1$
@@ -123,10 +122,24 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
     private ICdmEntitySession cdmEntitySession;
 
+    /**
+     * <code>true</code> if this view is listening to selection  changes
+     */
+    private boolean listenToSelectionChange;
+
     /**
      * Default constructor
      */
     public DerivateView() {
+        this.derivateToRootEntityMap = new HashMap<SpecimenOrObservationBase<?>, SpecimenOrObservationBase<?>>();
+        this.rootElements = new HashSet<SpecimenOrObservationBase<?>>();
+
+        if (CdmStore.isActive() && conversation == null) {
+            conversation = CdmStore.createConversation();
+        }
+        if (CdmStore.isActive()) {
+            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+        }
     }
 
     @Override
@@ -173,13 +186,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         labelProvider.setMultiLinkSingleReads(multiLinkSingleReads);
 
         //init tree
-        DerivateViewEditorInput editorInput = (DerivateViewEditorInput) getEditorInput();
-        if(editorInput.getDerivativeUUIDs()!=null){
-            updateRootEntities(editorInput.getDerivativeUUIDs());
-        }
-        else{
-            updateRootEntities();
-        }
+        updateRootEntities();
 
         //add drag'n'drop support
         Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
@@ -221,10 +228,6 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
     @Override
     public void doSave(IProgressMonitor monitor) {
         String taskName = Messages.DerivateView_SAVING_HIERARCHY;
-        if(getEditorInput() instanceof DerivateViewEditorInput){
-            DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput();
-            taskName += " "+derivateViewEditorInput.getName(); //$NON-NLS-1$
-        }
         monitor.beginTask(taskName, 3);
         if (!conversation.isBound()) {
             conversation.bind();
@@ -256,28 +259,9 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
 
     @Override
     public String getTitleToolTip() {
-        if(getEditorInput() instanceof DerivateViewEditorInput){
-            DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput();
-            return derivateViewEditorInput.getName();
-        }
         return Messages.DerivateView_DERIVATIVE_EDITOR;
     }
 
-    @Override
-    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
-        setSite(site);
-        setInput(input);
-        this.derivateToRootEntityMap = new HashMap<SpecimenOrObservationBase<?>, SpecimenOrObservationBase<?>>();
-        this.rootElements = new HashSet<SpecimenOrObservationBase<?>>();
-
-        if (CdmStore.isActive() && conversation == null) {
-            conversation = CdmStore.createConversation();
-        }
-        if (CdmStore.isActive()) {
-            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
-        }
-    }
-
     @Override
     public boolean isDirty() {
         return isDirty;
@@ -319,6 +303,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
     /**
      * @return the viewer
      */
+    @Override
     public TreeViewer getViewer() {
         return viewer;
     }
@@ -335,11 +320,6 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
         changed(null);
     }
 
-    @Override
-    public Set<SpecimenOrObservationBase<?>> getRootEntities() {
-        return rootElements;
-    }
-
     @Override
     public Map<Object, List<String>> getPropertyPathsMap() {
         List<String> specimenPropertyPaths = Arrays.asList(new String[] {
@@ -462,4 +442,35 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
             cdmEntitySession.dispose();
         }
     }
+
+    @Override
+    public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+        if(listenToSelectionChange && selection instanceof IStructuredSelection){
+            Object selectedElement = ((IStructuredSelection) selection).getFirstElement();
+            if(selectedElement instanceof Taxon){
+                Collection<SpecimenOrObservationBase> fieldUnits = CdmStore.getService(IOccurrenceService.class).listFieldUnitsByAssociatedTaxon((Taxon) selectedElement, null, null);
+                viewer.setInput(fieldUnits);
+            }
+        }
+    }
+
+    @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;
+    }
 }