-// $Id$
/**
* Copyright (C) 2007 EDIT
* European Distributed Institute of Taxonomy
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.UUID;
import org.apache.log4j.Logger;
+import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.commands.operations.IUndoContext;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.navigation.navigator.TreeNodeDropAdapter.MovingType;
import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation;
+import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
targetTreeNode = ((Classification)targetTreeNode).getRootNode();
targetTreeNode = HibernateProxyHelper.deproxy(targetTreeNode, TaxonNode.class);
}
- if(taxonNodes != null) {
- if (taxonNodes.size() == 1){
- return moveTaxon(taxonNodes.iterator().next(), targetTreeNode);
- } else{
+ //if(taxonNodes != null) {
+ if (taxonNodes.size() >= 1){
+ return moveTaxon(taxonNodes, targetTreeNode);
+ /*} else{
if( MessageDialog.openConfirm(null, "Moving taxon", "The operation move accepted taxon to other parent is available only for a single taxon.")){
return null;
}
- }
+ }*/
}
}
* @param parentTaxon
* @return
*/
- private IStatus moveTaxon(TaxonNode taxonNode, ITaxonTreeNode targetITaxonTreeNode) {
+ private IStatus moveTaxon(Set<TaxonNode> taxonNodes, ITaxonTreeNode targetITaxonTreeNode) {
TaxonNavigator taxonNavigator;
taxonNavigator = (TaxonNavigator) NavigationUtil.showView(TaxonNavigator.ID);
}
}
+ Iterator<TaxonNode> taxIterator = taxonNodes.iterator();
+ Set<UUID> uuids = new HashSet<UUID>();
+ TaxonNode node = null;
+ while(taxIterator.hasNext()){
+ node = taxIterator.next();
+ uuids.add(node.getUuid());
+ }
if (!PreferencesUtil.getSortNodesNaturally()){
IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();
if (workspaceUndoContext == null) {
return Status.CANCEL_STATUS;
}
- AbstractPostOperation operation = new MoveTaxonOperation
- ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
- NavigationUtil.executeOperation(operation);
+ AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, (TaxonNode)targetITaxonTreeNode, MovingType.CHILD);
+ NavigationUtil.executeOperation(operation, null);
+
logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
return Status.OK_STATUS;
}else{
- String[] buttonLables = {"Parent", "Predecessor", "Cancel"};
- MessageDialog dialog = new MessageDialog(null, "Target node", null, "Do you want to use the target node as parent or do you want to move the taxon below the target.", MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
+ String[] buttonLables = {"Child", "Behind", "Cancel"};
+ MessageDialog dialog = new MessageDialog(null, "Target node", null, "Do you want to move the taxon as child, before or behind the target.", MessageDialog.QUESTION_WITH_CANCEL, buttonLables, 0);
dialog.open();
int returnCode = dialog.getReturnCode();
if (returnCode == 0){
return Status.CANCEL_STATUS;
}
- AbstractPostOperation operation = new MoveTaxonOperation
- ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
- NavigationUtil.executeOperation(operation);
+ AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, (TaxonNode)targetITaxonTreeNode, MovingType.CHILD);
+ NavigationUtil.executeOperation(operation, null);
+
logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
return Status.OK_STATUS;
logger.error("Workspace undo context is null. DND operation cancelled");
return Status.CANCEL_STATUS;
}
+ TaxonNode targetNode = (TaxonNode) targetITaxonTreeNode;
- AbstractPostOperation operation = new MoveTaxonOperation
- ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, false);
- NavigationUtil.executeOperation(operation);
-
+ AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, targetNode, MovingType.BEHIND);
+ NavigationUtil.executeOperation(operation, null);
+
logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
return Status.OK_STATUS;
- } else{
+// }else if (returnCode == 2){
+// IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();
+// if (workspaceUndoContext == null) {
+// logger.error("Workspace undo context is null. DND operation cancelled");
+// return Status.CANCEL_STATUS;
+// }
+// TaxonNode targetNode = (TaxonNode) targetITaxonTreeNode;
+//
+// if(CdmStore.getCurrentSessionManager().isRemoting()) {
+// AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, targetNode, MovingType.PREVIOUS);
+// NavigationUtil.executeOperation(operation, null);
+// } else {
+// AbstractPostOperation operation = new MoveTaxonOperation
+// ("Move Taxon", workspaceUndoContext, uuids, targetNode, this, taxonNavigator, MovingType.PREVIOUS);
+// NavigationUtil.executeOperation(operation);
+// }
+// logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
+// return Status.OK_STATUS;
+ } else{
return Status.CANCEL_STATUS;
}
}
-
}
/* (non-Javadoc)