From: Patric Plitzner
Date: Tue, 11 Nov 2014 08:34:23 +0000 (+0000)
Subject: - refactored DerivateViewEditorInput to use UUIDs instead of CDM entities
X-Git-Tag: 3.6.0~370
X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/d0ba58fc90d74d82605d97df839ef881942d3088
- refactored DerivateViewEditorInput to use UUIDs instead of CDM entities
- added delete operation to DerivateView (currently only deleting leafs of the derivate tree is allowed)
---
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
index ec7432542..0bb16deea 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
@@ -31,6 +31,7 @@ import eu.etaxonomy.cdm.api.service.DeleteResult;
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
+import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
import eu.etaxonomy.cdm.api.service.dto.DerivateHierarchyDTO;
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.api.service.search.SearchResult;
@@ -946,8 +947,16 @@ public class TransientOccurenceService implements IOccurrenceService {
* @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteDerivateHierarchy(eu.etaxonomy.cdm.model.common.ICdmBase)
*/
@Override
- public DeleteResult deleteDerivateHierarchy(ICdmBase arg0) {
- return defaultService.deleteDerivateHierarchy(arg0);
+ public DeleteResult deleteDerivateHierarchy(ICdmBase from, SpecimenDeleteConfigurator config) {
+ return defaultService.deleteDerivateHierarchy(from, config);
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#delete(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator)
+ */
+ @Override
+ public DeleteResult delete(SpecimenOrObservationBase> specimen, SpecimenDeleteConfigurator config) {
+ return defaultService.delete(specimen, config);
}
}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java
index 263d12a24..1e1da7b5b 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateContentProvider.java
@@ -10,6 +10,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.Viewer;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.model.molecular.DnaSample;
import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.molecular.SingleRead;
@@ -17,7 +18,7 @@ import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
public class DerivateContentProvider implements ITreeContentProvider {
@@ -33,16 +34,14 @@ public class DerivateContentProvider implements ITreeContentProvider {
@Override
public Object[] getElements(Object inputElement) {
- SpecimenOrObservationBase specimen = null;
+ SpecimenOrObservationBase> rootElement = null;
if(inputElement instanceof DerivateViewEditorInput){
- specimen = ((DerivateViewEditorInput) inputElement).getDerivate();
+ rootElement = CdmStore.getService(IOccurrenceService.class).load(((DerivateViewEditorInput) inputElement).getRootElementUUID());
}
- specimen = EditorUtil.getTopMostDerivate(specimen);
-
- if(specimen!=null){
+ if(rootElement!=null){
//show topmost element in the derivate hierarchy if no field unit was found
- TreeNode node = new TreeNode(specimen);
+ TreeNode node = new TreeNode(rootElement);
return Collections.singleton(node).toArray();
}
return null;
@@ -112,8 +111,8 @@ public class DerivateContentProvider implements ITreeContentProvider {
return !((Sequence)element).getSingleReads().isEmpty();
}
else if(element instanceof SpecimenOrObservationBase){
- SpecimenOrObservationBase specimenOrObservation = (SpecimenOrObservationBase)element;
- for(DerivationEvent event:(Set)specimenOrObservation.getDerivationEvents()){
+ SpecimenOrObservationBase> specimenOrObservation = (SpecimenOrObservationBase>)element;
+ for(DerivationEvent event:specimenOrObservation.getDerivationEvents()){
if(!event.getDerivatives().isEmpty()){
return true;
}
@@ -122,9 +121,9 @@ public class DerivateContentProvider implements ITreeContentProvider {
return false;
}
- private List getDerivates(SpecimenOrObservationBase specimenOrObservation){
+ private List getDerivates(SpecimenOrObservationBase> specimenOrObservation){
List derivates = new ArrayList();
- for(DerivationEvent derivationEvent:(Set)specimenOrObservation.getDerivationEvents()){
+ for(DerivationEvent derivationEvent:specimenOrObservation.getDerivationEvents()){
derivates.addAll(derivationEvent.getDerivatives());
}
return derivates;
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 a971784de..963cd911f 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
@@ -31,7 +31,9 @@ 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.SpecimenOrObservationBase;
@@ -41,6 +43,7 @@ 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.store.CdmStore;
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
@@ -50,17 +53,7 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
*/
public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable,
IConversationEnabled, IPartContentHasDetails, IPartContentHasMedia, IPartContentHasSupplementalData,
- ISelectionChangedListener {
-
- /**
- * Key used for storing a single DerivateView in a memento
- */
- private static final String DERIVATE_VIEW_MEMENTO_KEY = "derivateView";
-
- /**
- * Key to to group mementos for every single DerivateView
- */
- private static final String DERIVATE_VIEWS_MEMENTO_KEY = "derivateViews";
+ ISelectionChangedListener, IPostOperationEnabled {
public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
@@ -112,8 +105,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
IEditorInput editorInput = getEditorInput();
viewer.setInput(editorInput);
if(editorInput instanceof DerivateViewEditorInput){
- SpecimenOrObservationBase> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
- SpecimenOrObservationBase> rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
+ SpecimenOrObservationBase> specimen = CdmStore.getService(IOccurrenceService.class).load(((DerivateViewEditorInput) editorInput).getDerivateUUID());
+ SpecimenOrObservationBase> rootElement = CdmStore.getService(IOccurrenceService.class).load(((DerivateViewEditorInput) editorInput).getRootElementUUID());
setPartName(labelProvider.getDerivateText(rootElement));
viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
}
@@ -304,4 +297,34 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa
return selection;
}
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
+ */
+ @Override
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ refreshTree();
+ if(objectAffectedByOperation!=null){
+ DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput();
+ if(objectAffectedByOperation.getUuid().equals(derivateViewEditorInput.getRootElementUUID())){
+ // TODO close derivate view if root element is deleted
+// this.getViewer().setEditorSite().getPage().close();
+ return true;
+ }
+ else if(objectAffectedByOperation.getUuid().equals(derivateViewEditorInput.getDerivateUUID())){
+ derivateViewEditorInput.setRootAsDerivate();
+ }
+ changed(objectAffectedByOperation);
+ return true;
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
+ */
+ @Override
+ public boolean onComplete() {
+ return true;
+ }
+
}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java
index 18f89f0f0..c323cb3f0 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java
@@ -13,11 +13,10 @@ import java.util.UUID;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.IPersistable;
import org.eclipse.ui.IPersistableElement;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
@@ -33,20 +32,16 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
* @date 25.11.2013
*
*/
-public class DerivateViewEditorInput implements IEditorInput, IPersistable {
+public class DerivateViewEditorInput implements IEditorInput{
/**
- * Key used for saving the {@link UUID} to a memento
+ * The selected derivate {@link UUID}
*/
- public static final String UUID_MEMENTO_KEY = "UUID";
+ private UUID derivateUUID;
/**
- * The selected derivate
+ * The {@link UUID} of the root of the hierarchy (may be the same object as the derivate)
*/
- private final SpecimenOrObservationBase> derivate;
- /**
- * The root of the hierarchy (may be the same object as the derivate)
- */
- private SpecimenOrObservationBase> root;
+ private UUID rootUUID;
private final ConversationHolder conversationHolder;
@@ -54,22 +49,24 @@ public class DerivateViewEditorInput implements IEditorInput, IPersistable {
* Creates an editor input for the {@link DerivateView} with the currently selected derivate and the
* corresponding {@link FieldUnit} (both may be the same object).
* @param derivateUuid the {@link UUID} of the derivate for which the derivate hierarchy should be shown
- * @param root the root of the hierarchy
+ * @param rootUUID the root of the hierarchy
*/
public DerivateViewEditorInput(UUID derivateUuid) {
super();
this.conversationHolder = CdmStore.createConversation();
- this.derivate = CdmStore.getCurrentApplicationConfiguration().getOccurrenceService().load(derivateUuid);
+ this.derivateUUID = derivateUuid;
+ SpecimenOrObservationBase> derivate = CdmStore.getService(IOccurrenceService.class).load(derivateUuid);
if(derivate instanceof FieldUnit){
- this.root = derivate;
+ this.rootUUID = derivateUUID;
}
else if(derivate instanceof DerivedUnit){
- root = EditorUtil.getTopMostDerivate(derivate);
- if(root==null){
- root = derivate;
+ SpecimenOrObservationBase> topMostDerivate = EditorUtil.getTopMostDerivate(derivate);
+ rootUUID = topMostDerivate==null?null:topMostDerivate.getUuid();
+ if(rootUUID==null){
+ rootUUID = derivateUUID;
}
}
- if(root==null){
+ if(rootUUID==null){
MessagingUtils.messageDialog("Failed initializing editor", DerivateViewEditorInput.class, "No root element found!");
}
}
@@ -105,7 +102,7 @@ public class DerivateViewEditorInput implements IEditorInput, IPersistable {
*/
@Override
public String getName() {
- return derivate.toString();
+ return derivateUUID.toString();
}
/* (non-Javadoc)
@@ -121,27 +118,21 @@ public class DerivateViewEditorInput implements IEditorInput, IPersistable {
*/
@Override
public String getToolTipText() {
- return derivate.toString();
+ return derivateUUID.toString();
}
+ public UUID getDerivateUUID() {
+ return derivateUUID;
+ }
- /**
- * @return the specimen
- */
- public SpecimenOrObservationBase> getDerivate() {
- return derivate;
+ public UUID getRootElementUUID() {
+ return rootUUID;
}
- /**
- * @return the fieldUnit
- */
- public SpecimenOrObservationBase> getRootElement() {
- return root;
+ public void setRootAsDerivate(){
+ this.derivateUUID = this.rootUUID;
}
- /**
- * @return the conversationHolder
- */
public ConversationHolder getConversationHolder() {
return conversationHolder;
}
@@ -153,7 +144,7 @@ public class DerivateViewEditorInput implements IEditorInput, IPersistable {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((root == null) ? 0 : root.hashCode());
+ result = prime * result + ((rootUUID == null) ? 0 : rootUUID.hashCode());
return result;
}
@@ -172,23 +163,14 @@ public class DerivateViewEditorInput implements IEditorInput, IPersistable {
return false;
}
DerivateViewEditorInput other = (DerivateViewEditorInput) obj;
- if (root == null) {
- if (other.root != null) {
+ if (rootUUID == null) {
+ if (other.rootUUID != null) {
return false;
}
- } else if (!root.equals(other.root)) {
+ } else if (!rootUUID.equals(other.rootUUID)) {
return false;
}
return true;
}
- /* (non-Javadoc)
- * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
- */
- @Override
- public void saveState(IMemento memento) {
- UUID uuid = derivate.getUuid();
- memento.putString(UUID_MEMENTO_KEY, uuid.toString());
- }
-
}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/DeleteDerivateHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/DeleteDerivateHandler.java
index 7f8cc9be4..7a38d5936 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/DeleteDerivateHandler.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/DeleteDerivateHandler.java
@@ -20,6 +20,7 @@ import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
+import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.molecular.Sequence;
import eu.etaxonomy.cdm.model.molecular.SingleRead;
@@ -61,7 +62,10 @@ public class DeleteDerivateHandler extends AbstractHandler {
TreeNode treeNode = (TreeNode)object;
Object value = ((TreeNode) object).getValue();
if(value instanceof SpecimenOrObservationBase> || value instanceof Sequence || value instanceof SingleRead){
- DeleteDerivateOperation deleteDerivateOperation = new DeleteDerivateOperation(label, undoContext, (CdmBase) value, postOperationEnabled);
+ SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
+ config.setDeleteChildren(false);
+ config.setShiftHierarchyUp(false);
+ DeleteDerivateOperation deleteDerivateOperation = new DeleteDerivateOperation(label, undoContext, (CdmBase) value, postOperationEnabled, config);
AbstractUtility.executeOperation(deleteDerivateOperation);
}
}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
index 9ef94508c..5032dde41 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java
@@ -15,9 +15,14 @@ import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import eu.etaxonomy.cdm.api.service.DeleteResult;
+import eu.etaxonomy.cdm.api.service.IOccurrenceService;
+import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
/**
*
@@ -27,11 +32,20 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
*/
public class DeleteDerivateOperation extends AbstractPostOperation {
+ private final SpecimenDeleteConfigurator deleteConfigurator;
+
public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element,
IPostOperationEnabled postOperationEnabled) {
+ this(label, undoContext, element, postOperationEnabled, new SpecimenDeleteConfigurator());
+ }
+
+ public DeleteDerivateOperation(String label, IUndoContext undoContext, CdmBase element,
+ IPostOperationEnabled postOperationEnabled, SpecimenDeleteConfigurator config) {
super(label, undoContext, element, postOperationEnabled);
+ this.deleteConfigurator = config;
}
+
/*
* (non-Javadoc)
*
@@ -42,7 +56,17 @@ public class DeleteDerivateOperation extends AbstractPostOperation {
/** {@inheritDoc} */
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return postExecute(null);
+ DeleteResult deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
+ if(!deleteResult.isOk()){
+ String exceptionMessage = "";
+ for(Exception exception:deleteResult.getExceptions()){
+ exceptionMessage += exception.getLocalizedMessage();
+ }
+ //TODO: add method to DeleteResult to sum up exceptions
+ MessagingUtils.warningDialog("Deletion failed", this, exceptionMessage);
+ return postExecute(null);
+ }
+ return postExecute(element);
}
/*