Listen to selection changes in DerivativeEditor
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 09:23:43 +0000 (10:23 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 09:23:43 +0000 (10:23 +0100)
 - Convert to ViewPart
 - Add toolbar button to toggle listening to selection changes

eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java

index baa84a8dda58dc87d4511de9fd73d53aa97c0e36..d1d818b56a18c809bb31a5614d1ba253e0980524 100644 (file)
             </visibleWhen>
          </command>
       </menuContribution>
-      <menuContribution
-            allPopups="false"
-            locationURI="popup:eu.etaxonomy.taxeditor.navigation.navigatorpopup?after=taxeditor-navigation.separator2">
-         <command
-               commandId="eu.etaxonomy.taxeditor.editor.handler.openDerivateView"
-               label="%command.label.55"
-               style="push">
-            <visibleWhen
-                  checkEnabled="false">
-               <and>
-                  <reference
-                        definitionId="isCdmStoreConnected">
-                  </reference>
-                  <reference
-                        definitionId="isTaxonNode">
-                  </reference>
-               </and>
-            </visibleWhen>
-         </command>
-         <separator
-               name="eu.etaxonomy.taxeditor.editor.separator1"
-               visible="true">
-         </separator>
-      </menuContribution>
       <menuContribution
             allPopups="false"
             locationURI="toolbar:eu.etaxonomy.taxeditor.editor.view.descriptive">
                tooltip="%command.tooltip">
          </command>
       </menuContribution>
+      <menuContribution
+            allPopups="false"
+            locationURI="toolbar:eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView">
+         <command
+               commandId="eu.etaxonomy.taxeditor.editor.derivative.listenToSelectionChange"
+               label="Link with Editor"
+               style="push">
+         </command>
+      </menuContribution>
    </extension>
    <extension
          point="org.eclipse.ui.handlers">
                typeId="eu.etaxonomy.taxeditor.specimenUuidParameterType">
          </commandParameter>
       </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.editor.view.derivate.handler.ListenToSelectionChangeHandler"
+            id="eu.etaxonomy.taxeditor.editor.derivative.listenToSelectionChange"
+            name="Link with editor">
+      </command>
         
    </extension>
    <extension
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;
+    }
 }
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java
new file mode 100644 (file)
index 0000000..413c377
--- /dev/null
@@ -0,0 +1,23 @@
+package eu.etaxonomy.taxeditor.editor.view.derivate.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
+
+public class ListenToSelectionChangeHandler extends AbstractHandler {
+
+    @Override
+    public Object execute(ExecutionEvent event) throws ExecutionException {
+        IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
+        if(activePart instanceof DerivateView){
+            DerivateView derivativeEditor = (DerivateView)activePart;
+            derivativeEditor.toggleListenToSelectionChange();
+        }
+        return null;
+    }
+
+}
index a095409820eceac0619944df587cb2a934934863..409416da2eb438d3da8ce2adb54417dfbac93e0d 100644 (file)
@@ -27,7 +27,6 @@ import eu.etaxonomy.cdm.model.molecular.Sequence;
 import eu.etaxonomy.cdm.model.molecular.SingleRead;
 import eu.etaxonomy.taxeditor.editor.Messages;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -94,10 +93,6 @@ public class DeleteDerivateOperation extends AbstractPostOperation<CdmBase> {
                 //update DerivateView
                 derivateView.getConversationHolder().commit();
                 IStatus returnStatus = postExecute(null);
-                //close if no more items left
-                if(derivateView.getViewer().getTree().getItemCount()<1){
-                    AbstractUtility.close(derivateView);
-                }
                 return returnStatus;
             }
         }
index af08275f3eaabba33ac82a045d9a3820e454c7c7..d42f08d8d06b6829917ff5afebcc85ff6be40c31 100644 (file)
@@ -28,7 +28,6 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.SearchManager;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
@@ -101,7 +100,6 @@ public class DerivateSearchCompositeController implements Listener{
         }
 
         //filter out (un-)assigned specimens
-        DerivateViewEditorInput editorInput = (DerivateViewEditorInput)derivativeEditor.getEditorInput();
         int selectionIndex = derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex();
         List<SpecimenOrObservationBase<?>> specimenWithAssociations = new ArrayList<SpecimenOrObservationBase<?>>();
         if(selectionIndex!=DerivateSearchComposite.ALL_SPECIMENS){