From f22ca8aa42255788e7f81557a145404f70bf0ad1 Mon Sep 17 00:00:00 2001
From: Patric Plitzner
Date: Thu, 20 Nov 2014 09:42:51 +0000
Subject: [PATCH] - added static method to DerivateLabelProvider to get the
derivate text - refactored moving of derivates to use the operation
framework. - immplemented undo/redo
---
.gitattributes | 1 +
.../view/derivate/DerivateDropListener.java | 88 +----------
.../derivate/DerivateViewEditorInput.java | 9 +-
.../handler/DeleteDerivateHandler.java | 8 +-
.../operation/DeleteDerivateOperation.java | 32 +++-
.../operation/MoveDerivateOperation.java | 147 ++++++++++++++++++
.../derivateSearch/DerivateLabelProvider.java | 10 +-
7 files changed, 197 insertions(+), 98 deletions(-)
create mode 100644 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java
diff --git a/.gitattributes b/.gitattributes
index a3206c38d..280eb1c92 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -538,6 +538,7 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/d
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/DeleteDerivateHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementTransfer.java -text
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
index d9a10fe89..e5148ff67 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateDropListener.java
@@ -9,23 +9,16 @@
*/
package eu.etaxonomy.taxeditor.editor.view.derivate;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.swt.dnd.TransferData;
-import eu.etaxonomy.cdm.api.service.IOccurrenceService;
-import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
-import eu.etaxonomy.cdm.model.molecular.DnaSample;
-import eu.etaxonomy.cdm.model.molecular.Sequence;
-import eu.etaxonomy.cdm.model.molecular.SingleRead;
-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.editor.view.derivate.operation.MoveDerivateOperation;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
/**
* @author pplitzner
@@ -36,9 +29,6 @@ public class DerivateDropListener extends ViewerDropAdapter {
private final DerivateView derivateView;
- /**
- * @param derivateView
- */
protected DerivateDropListener(DerivateView derivateView) {
super(derivateView.getViewer());
this.derivateView = derivateView;
@@ -57,30 +47,10 @@ public class DerivateDropListener extends ViewerDropAdapter {
if(target instanceof TreeNode && data instanceof DerivateViewSelection){
DerivateViewSelection derivateViewSelection = (DerivateViewSelection)data;
TreeNode targetNode = (TreeNode) target;
- TreeNode draggednode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
- if(draggednode!=null){
- if(moveTreeNode(draggednode, targetNode)){
- //update DerivateView
- derivateView.getConversationHolder().commit();
- derivateView.refreshTree();
-
- // update source DerivateView if dragging between different views occurred
- DerivateView sourceDerivateView = derivateViewSelection.getDerivateView();
- if(sourceDerivateView!=derivateView){
- sourceDerivateView.getConversationHolder().commit();
- sourceDerivateView.refreshTree();
- }
-
- //FIXME: way too much overhead for just refreshing the other DerivateView
-// CdmStore.getContextManager().notifyContextRefresh();
- LocalSelectionTransfer.getTransfer().setSelection(null);
- return true;
- }
- else{
- DerivateLabelProvider derivateLabelProvider = new DerivateLabelProvider();
- derivateLabelProvider.setConversation(derivateView.getConversationHolder());
- MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+derivateLabelProvider.getDerivateText(draggednode)+"\" to \""+derivateLabelProvider.getDerivateText(targetNode)+"\" is not possible!");
- }
+ TreeNode draggedNode = EditorUtil.getTreeNodeOfSelection(derivateViewSelection.getSelection());
+ if(draggedNode!=null){
+ MoveDerivateOperation moveDerivateOperation = new MoveDerivateOperation("Moving \""+derivateView.getLabelProvider().getDerivateText(draggedNode)+"\" to \""+derivateView.getLabelProvider().getDerivateText(targetNode)+"\"", EditorUtil.getUndoContext(), derivateView, draggedNode, targetNode);
+ return AbstractUtility.executeOperation(moveDerivateOperation).equals(Status.OK_STATUS)?true:false;
}
}
return false;
@@ -94,48 +64,4 @@ public class DerivateDropListener extends ViewerDropAdapter {
return LocalSelectionTransfer.getTransfer().isSupportedType(transferType) && target instanceof TreeNode;
}
- /**
- * @param value
- * @return
- */
- private boolean moveTreeNode(TreeNode draggedNode, TreeNode targetNode) {
- Object draggedNodeValue = draggedNode.getValue();
- Object targetNodeValue = targetNode.getValue();
- TreeNode fromParentNode = draggedNode.getParent();
- Object fromParentSpecimen = null;
- if(fromParentNode!=null){
- fromParentSpecimen = fromParentNode.getValue();
- }
-
- // drag'n'drop for SpecimenOrObservationBase
- IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
- if(draggedNodeValue instanceof DerivedUnit && targetNodeValue instanceof SpecimenOrObservationBase>){
- DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
- SpecimenOrObservationBase> targetSpecimen = (SpecimenOrObservationBase>) targetNodeValue;
- //check if type is a sub derivate type
- if(fromParentSpecimen instanceof SpecimenOrObservationBase>
- && fromParentNode!=null
- && !fromParentNode.equals(targetNode)){//don't drag on direct parent node)
- return occurrenceService.moveDerivate((SpecimenOrObservationBase>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
- }
- }
-
- // drag'n'drop for SingleRead
- else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){
- SingleRead singleRead = (SingleRead) draggedNodeValue;
- if(fromParentSpecimen instanceof Sequence){
- return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead);
- }
- }
-
- // drag'n'drop for Sequence
- else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
- Sequence sequence = (Sequence)draggedNodeValue;
- if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
- return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
- }
- }
- return false;
- }
-
}
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 141299b61..0d677cd09 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
@@ -131,17 +131,14 @@ public class DerivateViewEditorInput implements IEditorInput{
private String getEditorName() {
String name = null;
- //FIXME consider giving label provider a static method to get the derivate text. Pass the conversation as a method parameter.
- DerivateLabelProvider labelProvider = new DerivateLabelProvider();
- labelProvider.setConversation(conversationHolder);
for(UUID uuid:rootUUIDs){
- SpecimenOrObservationBase specimen = CdmStore.getService(IOccurrenceService.class).load(uuid);
+ SpecimenOrObservationBase> specimen = CdmStore.getService(IOccurrenceService.class).load(uuid);
if(specimen!=null){
if(name==null){
- name = labelProvider.getDerivateText(specimen);
+ name = DerivateLabelProvider.getDerivateText(specimen, conversationHolder);
}
else{
- name += ", "+labelProvider.getDerivateText(specimen);
+ name += " + "+DerivateLabelProvider.getDerivateText(specimen, conversationHolder);
}
}
}
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 7a38d5936..1e8e5e87d 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,8 @@ import org.eclipse.jface.viewers.TreeNode;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.molecular.Sequence;
@@ -30,6 +32,7 @@ import eu.etaxonomy.taxeditor.editor.view.derivate.operation.DeleteDerivateOpera
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
/**
*
@@ -59,9 +62,12 @@ public class DeleteDerivateHandler extends AbstractHandler {
Object object = selection.iterator().next();
if(object instanceof TreeNode){
- TreeNode treeNode = (TreeNode)object;
Object value = ((TreeNode) object).getValue();
if(value instanceof SpecimenOrObservationBase> || value instanceof Sequence || value instanceof SingleRead){
+ if(postOperationEnabled instanceof IConversationEnabled){
+ ConversationHolder conversationHolder = ((IConversationEnabled) postOperationEnabled).getConversationHolder();
+ label += " "+DerivateLabelProvider.getDerivateText(value, conversationHolder);
+ }
SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
config.setDeleteChildren(false);
config.setShiftHierarchyUp(false);
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 5032dde41..b480a0f83 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
@@ -14,11 +14,14 @@ import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.ISaveablePart;
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.editor.view.derivate.DerivateView;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -56,17 +59,34 @@ public class DeleteDerivateOperation extends AbstractPostOperation {
/** {@inheritDoc} */
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ if(getPostOperationEnabled() instanceof ISaveablePart){
+ if(!MessagingUtils.confirmDialog("Confirm deletion", "Do you really want to delete the selected element?")){
+ return Status.CANCEL_STATUS;
+ }
+ if(((ISaveablePart) getPostOperationEnabled()).isDirty()){
+ MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+ return Status.CANCEL_STATUS;
+ }
+ }
DeleteResult deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator);
- if(!deleteResult.isOk()){
+ if(deleteResult.isOk()){
+ if(getPostOperationEnabled() instanceof DerivateView){
+ DerivateView derivateView = (DerivateView) getPostOperationEnabled();
+ //update DerivateView
+ derivateView.getConversationHolder().commit();
+ return postExecute(null);
+ }
+ }
+ else{
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 Status.CANCEL_STATUS;
}
- return postExecute(element);
+ return Status.OK_STATUS;
}
/*
@@ -79,7 +99,8 @@ public class DeleteDerivateOperation extends AbstractPostOperation {
/** {@inheritDoc} */
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return execute(monitor, info);
+ //no redo possible
+ return Status.CANCEL_STATUS ;
}
/*
@@ -92,6 +113,7 @@ public class DeleteDerivateOperation extends AbstractPostOperation {
/** {@inheritDoc} */
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- return postExecute(element);
+ //no undo possible
+ return Status.CANCEL_STATUS;
}
}
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java
new file mode 100644
index 000000000..960548975
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java
@@ -0,0 +1,147 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.view.derivate.operation;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.TreeNode;
+
+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.DnaSample;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
+import eu.etaxonomy.cdm.model.molecular.SingleRead;
+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.internal.TaxeditorEditorPlugin;
+import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author pplitzner
+ * @date Nov 18, 2014
+ *
+ */
+public class MoveDerivateOperation extends AbstractPostOperation {
+
+ private final TreeNode draggedNode;
+ private TreeNode fromNode;
+ private TreeNode targetNode;
+
+ public MoveDerivateOperation(String label, IUndoContext undoContext,
+ IPostOperationEnabled postOperationEnabled, TreeNode draggedNode, TreeNode targetNode) {
+ super(label, undoContext, null, postOperationEnabled);
+ this.draggedNode = draggedNode;
+ this.targetNode = targetNode;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ DerivateView derivateView = null;
+ if(getPostOperationEnabled() instanceof DerivateView){
+ derivateView = (DerivateView) getPostOperationEnabled();
+ }
+ if(derivateView==null){
+ MessagingUtils.operationDialog(this, new NullPointerException("DerivateView was null"), TaxeditorEditorPlugin.PLUGIN_ID, this.getLabel(), getLabel());
+ return Status.CANCEL_STATUS;
+ }
+ if(derivateView.isDirty()){
+ MessagingUtils.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
+ return Status.CANCEL_STATUS;
+ }
+
+ fromNode = draggedNode.getParent();
+ if(moveTreeNode(draggedNode, fromNode, targetNode)){
+ //update DerivateView
+ derivateView.getConversationHolder().commit();
+ LocalSelectionTransfer.getTransfer().setSelection(null);
+ return postExecute(null);
+ }
+ else{
+ MessagingUtils.warningDialog("Moving derivate not possible!", derivateView, "Moving \""+derivateView.getLabelProvider().getDerivateText(draggedNode)+"\" to \""+derivateView.getLabelProvider().getDerivateText(targetNode)+"\" is not possible!");
+ }
+ return Status.CANCEL_STATUS;
+ }
+
+ private boolean moveTreeNode(TreeNode draggedNode, TreeNode fromNode, TreeNode targetNode) {
+ Object draggedNodeValue = draggedNode.getValue();
+ Object targetNodeValue = targetNode.getValue();
+ Object fromParentSpecimen = null;
+ if(fromNode!=null){
+ fromParentSpecimen = fromNode.getValue();
+ }
+
+ // drag'n'drop for SpecimenOrObservationBase
+ IOccurrenceService occurrenceService = CdmStore.getService(IOccurrenceService.class);
+ if(draggedNodeValue instanceof DerivedUnit && targetNodeValue instanceof SpecimenOrObservationBase>){
+ DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue;
+ SpecimenOrObservationBase> targetSpecimen = (SpecimenOrObservationBase>) targetNodeValue;
+ //check if type is a sub derivate type
+ if(fromParentSpecimen instanceof SpecimenOrObservationBase>
+ && fromNode!=null
+ && !fromNode.equals(targetNode)){//don't drag on direct parent node)
+ return occurrenceService.moveDerivate((SpecimenOrObservationBase>)fromParentSpecimen, targetSpecimen, draggedSpecimen);
+ }
+ }
+
+ // drag'n'drop for SingleRead
+ else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){
+ SingleRead singleRead = (SingleRead) draggedNodeValue;
+ if(fromParentSpecimen instanceof Sequence){
+ return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead);
+ }
+ }
+
+ // drag'n'drop for Sequence
+ else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
+ Sequence sequence = (Sequence)draggedNodeValue;
+ if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase>) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){
+ return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence);
+ }
+ }
+ return false;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ //swap fromNode and targetNode
+ this.targetNode = this.fromNode;
+ return execute(new NullProgressMonitor(), null);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ //swap fromNode and targetNode
+ this.targetNode = this.fromNode;
+ return execute(new NullProgressMonitor(), null);
+ }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
index 2d06fd316..b304ca851 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateLabelProvider.java
@@ -58,6 +58,7 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
private static DefinedTerm detailImageTerm = null;
private static DefinedTerm sampleDesignationTerm = null;
+ //FIXME: move static term getters to new singleton utility class
private static void initializeTerms() {
List preferredTerms = CdmStore.getTermManager().getPreferredTerms(DefinedTerm.class);
for (DefinedTerm definedTerm : preferredTerms) {
@@ -134,12 +135,11 @@ public class DerivateLabelProvider extends ColumnLabelProvider {
this.conversation = conversation;
}
- /**
- *
- * @param derivate
- * @return
- */
public String getDerivateText(Object element){
+ return getDerivateText(element, conversation);
+ }
+
+ public static String getDerivateText(Object element, ConversationHolder conversation){
//TODO: use list of strings to assemble labels to avoid adding the separator every time and to allow null values
TreeNode parentNode = null;
TreeNode node = null;
--
2.34.1