From: Patrick Plitzner
Date: Wed, 21 Oct 2015 06:36:44 +0000 (+0200)
Subject: Implement taxon assignment filter and refactor DerivativeEditor
X-Git-Tag: 3.12.0^2~62^2~7^2~38
X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/dd35c5fd3d7527995d9282dd0b0c38c3a62a1092
Implement taxon assignment filter and refactor DerivativeEditor
- Input no longer needs session
- editor itself keeps track of its root elements
- taxon assignment filter allows filtering specimens with/without taxon
assignment or both
---
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
index 1b82c9f8d..a457b2f91 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java
@@ -1,7 +1,11 @@
package eu.etaxonomy.taxeditor.editor.view.derivate;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
@@ -34,12 +38,15 @@ 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.api.service.molecular.ISequenceService;
import eu.etaxonomy.cdm.model.common.CdmBase;
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.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;
@@ -58,13 +65,29 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
*/
public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia,
- ISelectionChangedListener, IPostOperationEnabled{
+ ISelectionChangedListener, IPostOperationEnabled/*, ICdmEntitySessionEnabled*/{
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;
public static final String VIEW_HAS_UNSAVED_CHANGES = Messages.DerivateView_UNSAVED_CHANGES;
+ private static final List SPECIMEN_INIT_STRATEGY = Arrays.asList(new String[] {
+ "descriptions",
+ "annotations",
+ "markers",
+ "credits",
+ "extensions",
+ "rights",
+ "sources",
+ "derivationEvents.derivatives.annotations",
+ "derivationEvents.derivatives.markers",
+ "derivationEvents.derivatives.credits",
+ "derivationEvents.derivatives.extensions",
+ "derivationEvents.derivatives.rights",
+ "derivationEvents.derivatives.sources"
+ });
+
private ConversationHolder conversation;
private TreeViewer viewer;
@@ -84,10 +107,22 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
private DerivateSearchCompositeController derivateSearchCompositeController;
+ /**
+ * A map with keys being the derivative entities belonging to the {@link UUID}s passed to the constructor
+ * and values being the root elements of the hierarchy (may be the same objects as the derivative entities)
+ */
+ private Map, SpecimenOrObservationBase>> derivateToRootEntityMap;
+
+ /**
+ * The set of root elements
+ */
+ private Set> rootElements;
+
/**
* Default constructor
*/
public DerivateView() {
+ conversation = CdmStore.createConversation();
}
@Override
@@ -129,19 +164,17 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
Menu menu = menuManager.createContextMenu(control);
control.setMenu(menu);
+ //single read multi links
generateMultiLinkSingleReads();
labelProvider.setMultiLinkSingleReads(multiLinkSingleReads);
- IEditorInput editorInput = getEditorInput();
- viewer.setInput(((DerivateViewEditorInput) editorInput).getRootEntities());
- //set selection to selected derivate if only one was selected
- if(editorInput instanceof DerivateViewEditorInput){
- Set> derivateEntities = ((DerivateViewEditorInput) editorInput).getDerivateEntities();
- if(derivateEntities.size()==1){
- SpecimenOrObservationBase> specimen = derivateEntities.iterator().next();
- if(specimen != null){
- viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
- }
- }
+
+ //init tree
+ DerivateViewEditorInput editorInput = (DerivateViewEditorInput) getEditorInput();
+ if(editorInput.getDerivativeUUIDs()!=null){
+ updateRootEntities(editorInput.getDerivativeUUIDs());
+ }
+ else{
+ updateRootEntities();
}
//add drag'n'drop support
@@ -150,6 +183,37 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
viewer.addDropSupport(dndOperations, transfers, new DerivateDropListener(this));
}
+ public void updateRootEntities() {
+ updateRootEntities(null);
+ }
+
+ public void updateRootEntities(Collection derivativeUuids) {
+ if(derivativeUuids!=null){
+ this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>>();
+ this.rootElements = new HashSet>();
+ for (UUID uuid : derivativeUuids) {
+ SpecimenOrObservationBase> derivate = CdmStore.getService(IOccurrenceService.class).load(uuid, SPECIMEN_INIT_STRATEGY);
+ if(derivate instanceof FieldUnit){
+ derivateToRootEntityMap.put(derivate, derivate);
+ }
+ else {
+ SpecimenOrObservationBase> topMostDerivate = EditorUtil.getTopMostDerivate(derivate);
+ if(topMostDerivate!=null){
+ derivateToRootEntityMap.put(derivate, topMostDerivate);
+ }
+ else{
+ derivateToRootEntityMap.put(derivate, derivate);
+ }
+ }
+ }
+ for (SpecimenOrObservationBase> specimen : derivateToRootEntityMap.values()) {
+ rootElements.add(specimen);
+ }
+ }
+ viewer.setInput(rootElements);
+ refreshTree();
+ }
+
@Override
public void doSave(IProgressMonitor monitor) {
String taskName = Messages.DerivateView_SAVING_HIERARCHY;
@@ -165,7 +229,7 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
// commit the conversation and start a new transaction immediately
conversation.commit(true);
- ((DerivateViewEditorInput) getEditorInput()).merge();
+// TODO: what does this do? merge();
monitor.worked(1);
this.setDirty(false);
@@ -179,6 +243,10 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
public void doSaveAs() {
}
+ public Set> getRootElements() {
+ return rootElements;
+ }
+
@Override
public String getTitleToolTip() {
if(getEditorInput() instanceof DerivateViewEditorInput){
@@ -192,11 +260,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
- if(input instanceof DerivateViewEditorInput){
- DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) input;
- conversation = derivateViewEditorInput.getConversationHolder();
- setPartName(derivateViewEditorInput.getName());
- }
+ this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>>();
+ this.rootElements = new HashSet>();
}
@Override
@@ -223,7 +288,6 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
if(!conversation.isBound()){
conversation.bind();
}
- ((DerivateViewEditorInput) getEditorInput()).bind();
}
@Override
@@ -254,9 +318,35 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
changed(null);
}
- protected void setRootEntities(Collection rootEntityUuids){
- ((DerivateViewEditorInput)getEditorInput()).updateRootEntities(rootEntityUuids);
- }
+// @Override
+// public Set> getRootEntities() {
+// return rootElements;
+// }
+//
+// @Override
+// public void merge() {
+// if(CdmStore.getCurrentSessionManager().isRemoting()) {
+// CdmApplicationState.getCurrentAppConfig().getOccurrenceService().merge(new ArrayList(getRootEntities()), true);
+// }
+// }
+//
+// @Override
+// public Map