package eu.etaxonomy.taxeditor.navigation.navigator.operation;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.Status;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
+import eu.etaxonomy.taxeditor.navigation.navigator.e4.TreeNodeDropAdapterE4.MovingType;
import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
/**
* Change the taxonomic parent of a given taxon.
/**
* A reference to the new taxonomical parent.
*/
- private ITaxonTreeNode newParentTreeNode;
+ private final ITaxonTreeNode newParentTreeNode;
/**
* A reference to the former taxonomical parents
*/
- private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
+ //private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
- private Set<TaxonNode> taxonNodes;
-
- /**
- * <p>Constructor for MoveTaxonOperation.</p>
- *
- * @param label a {@link java.lang.String} object.
- * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
- * @param taxonNodes a {@link java.util.Set} object.
- * @param newParentTreeNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object.
- * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
- * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
- */
+ private final Set<UUID> taxonNodesUuid;
+ private final MovingType moveToParentNode;
public MoveTaxonOperation(String label, IUndoContext undoContext,
- Set<TaxonNode> taxonNodes, ITaxonTreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
+ Set<UUID> taxonNodesUUIDToMove, ITaxonTreeNode newParentTreeNode,
+ IPostOperationEnabled postOperationEnabled,
+ IConversationEnabled conversationEnabled, MovingType moveToParentNode) {
super(label, undoContext, postOperationEnabled, conversationEnabled);
- this.taxonNodes = taxonNodes;
+ this.taxonNodesUuid = taxonNodesUUIDToMove;
+ /*for (TaxonNode node:taxonNodes){
+ this.taxonNodes.add(service.load(node.getUuid()));
+ }*/
this.newParentTreeNode = newParentTreeNode;
-
+ this.moveToParentNode = moveToParentNode;
// Save old parent ITaxonTreeNodes for undo
- oldParentTreeNodes = new HashMap<TaxonNode, ITaxonTreeNode>();
- for(TaxonNode taxonNode : taxonNodes){
- this.oldParentTreeNodes.put(taxonNode, taxonNode.getParent());
- }
+
+ //this.parentNode = taxonNode.getParent();
}
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
bind();
monitor.worked(20);
-
- try {
- for (TaxonNode taxonNode : taxonNodes){
- TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
- newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
- taxonNodes.add(newTaxonNode);
- monitor.worked(2);
- }
- } catch(IllegalAncestryException e) {
- MessagingUtils.warningDialog("Illegal ancestry", this, e.getMessage());
+ switch(this.moveToParentNode){
+ case CHILD:
+ CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 0);
+ break;
+ case PREVIOUS:
+ CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 1);
+ break;
+ case BEHIND:
+ CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), 2);
+ break;
}
+
+// try {
+// for (TaxonNode taxonNode : taxonNodes){
+// TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
+// newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
+// //taxonNodes.add(newTaxonNode);
+//
+// monitor.worked(2);
+// }
+// } catch(IllegalAncestryException e) {
+// MessagingUtils.warningDialog("Illegal ancestry", this, e.getMessage());
+// }
monitor.worked(40);
return postExecute(null);
}
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info)
return execute(monitor, info);
}
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
- */
/** {@inheritDoc} */
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
- MessagingUtils.warn(this.getClass(), "Not implemented yet.");
+ MessagingUtils.warn(this.getClass(), Messages.MoveTaxonOperation_NOT_IMPLEMENTED);
// iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent