taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/RecentNamesContributionItem.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/WorkbenchUndoContextAdapterFactory.java -text
-taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTreeNodeHandler.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/EditTaxonHandler.java -text
+taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/NewTaxonNodeHandler.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/NewTaxonomicTreeHandler.java -text
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/NewTaxonomicTreeWizardPage.java -text
label="Quick Add Child "
style="push">
</command-->
- <separator
- name="taxeditor-navigation.separator3"
- visible="true">
- </separator>
<command
commandId="org.eclipse.ui.file.import"
label="Import..."
commandId="org.eclipse.ui.edit.delete"
label="Delete"
style="push">
+ <visibleWhen>
+ <not>
+ <reference
+ definitionId="isSynonymNode">
+ </reference>
+ </not>
+ </visibleWhen>
</command>
<separator
name="taxeditor-navigation.separator5"
</command>
</menuContribution>
</extension>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.NewTaxonNodeHandler"
+ id="eu.etaxonomy.taxeditor.navigation.newTaxonNode"
+ name="New Taxon Node">
+ </command>
+ <command
+ defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.NewTaxonomicTreeHandler"
+ id="eu.etaxonomy.taxeditor.navigation.newTaxonomicTree"
+ name="New Taxonomic Tree">
+ </command>
+ </extension>
<extension
point="org.eclipse.ui.commands">
<command
id="eu.etaxonomy.taxeditor.navigation.command.moveTaxon"
name="Move Taxon">
</command>
- <command
- defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.CreateChildTaxonHandler"
- id="eu.etaxonomy.taxeditor.navigation.command.createChildTaxon"
- name="Create Child Taxon">
- </command>
- <command
- id="org.eclipse.ui.edit.delete"
- name="Delete Taxon ">
- </command>
- <command
- defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.QuickCreateChildTaxonHandler"
- id="eu.etaxonomy.taxeditor.navigation.command.quickCreateChildTaxon"
- name="Quick Create Child Taxon">
- </command>
<command
defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.RefreshTreeHandler"
id="org.eclipse.ui.file.refresh"
<extension
point="org.eclipse.ui.handlers">
<handler
- class="eu.etaxonomy.taxeditor.navigation.handler.DeleteTaxonNodeHandler"
+ class="eu.etaxonomy.taxeditor.navigation.handler.DeleteTreeNodeHandler"
commandId="org.eclipse.ui.edit.delete">
<enabledWhen>
<with
name="Show Taxonomic Tree View">
</command>
</extension>
- <extension
- point="org.eclipse.ui.commands">
- <command
- defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.NewTaxonNodeHandler"
- id="eu.etaxonomy.taxeditor.navigation.newTaxonNode"
- name="New Taxon Node">
- </command>
- <command
- defaultHandler="eu.etaxonomy.taxeditor.navigation.handler.NewTaxonomicTreeHandler"
- id="eu.etaxonomy.taxeditor.navigation.newTaxonomicTree"
- name="New Taxonomic Tree">
- </command>
- </extension>
<extension
point="org.eclipse.ui.themes">
* @created 06.04.2009
* @version 1.0
*/
-public class DeleteTaxonNodeHandler extends AbstractHandler implements IHandler{
+public class DeleteTreeNodeHandler extends AbstractHandler implements IHandler{
private static final Logger logger = Logger
- .getLogger(DeleteTaxonNodeHandler.class);
+ .getLogger(DeleteTreeNodeHandler.class);
private IWorkbenchPage activePage;
private TaxonNavigator taxonNavigator;
--- /dev/null
+/**
+* Copyright (C) 2007 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.navigation.handler;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoableOperation;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonNodeSelectionDialog;
+import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;
+
+/**
+ * @author n.hoffmann
+ * @created 01.04.2009
+ * @version 1.0
+ */
+public class MoveTaxonHandler extends AbstractHandler implements IPostOperationEnabled {
+ private static final Logger logger = Logger
+ .getLogger(MoveTaxonHandler.class);
+ private TaxonNode parentTaxonNode;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ TaxonNavigator taxonNavigator;
+ try {
+ taxonNavigator = (TaxonNavigator) NavigationUtil.getView(TaxonNavigator.ID);
+ } catch (PartInitException e) {
+ logger.error(e);
+ throw new RuntimeException(e);
+ }
+
+ TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
+
+ Iterator selectionIterator = selection.iterator();
+ Set<TaxonNode> taxonNodes = new HashSet<TaxonNode>();
+ // do not show the current selection
+ List<UUID> excludeTaxa = new ArrayList<UUID>();
+
+
+ while (selectionIterator.hasNext()){
+ Object object = selectionIterator.next();
+ if(object instanceof TaxonNode){
+ TaxonNode taxonNode = (TaxonNode) object;
+ taxonNodes.add(taxonNode);
+ excludeTaxa.add(taxonNode.getTaxon().getUuid());
+ }
+ }
+
+// TaxonNode taxonNode = (TaxonNode) selection.getFirstElement();
+
+ parentTaxonNode = FilteredTaxonNodeSelectionDialog.selectTaxonNode(HandlerUtil.getActiveShell(event), "Choose new parent", excludeTaxa, null);
+
+ if(parentTaxonNode != null){
+ if(NavigationUtil.isDirty(parentTaxonNode)){
+ MessageDialog.openWarning(HandlerUtil.getActiveShell(event), "Unsaved Parent Taxon", "There are unsaved " +
+ "changes in the parent taxon. Please save first.");
+ return null;
+ }
+
+ IUndoableOperation operation = new MoveTaxonOperation
+ ("Move taxon to new parent", NavigationUtil.getUndoContext(),
+ taxonNodes, parentTaxonNode, this, taxonNavigator); //$NON-NLS-1$
+ NavigationUtil.executeOperation(operation);
+
+ }
+
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
+ */
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ return true;
+ }
+}
\r
package eu.etaxonomy.taxeditor.navigation.navigator;\r
\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.commands.operations.IUndoContext;\r
import org.eclipse.core.commands.operations.IUndoableOperation;\r
.getLogger(TaxonDropAdapterAssistant.class);\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator.dropassistant"; //$NON-NLS-1$\r
-\r
- private ITreeNode target;\r
\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)\r
@Override\r
public IStatus handleDrop(CommonDropAdapter dropAdapter,\r
DropTargetEvent dropTargetEvent, Object target) {\r
+ \r
+ if (target instanceof ITreeNode) {\r
+ Set<TaxonNode> taxonNodes = getSelectedTaxa();\r
+ ITreeNode targetTreeNode = (ITreeNode) target;\r
+ if(taxonNodes != null)\r
+ return moveTaxon(taxonNodes, targetTreeNode);\r
+ }\r
+ \r
+ return Status.CANCEL_STATUS;\r
+ }\r
+ \r
+ private Set<TaxonNode> getSelectedTaxa(){\r
+ HashSet<TaxonNode> taxonNodes = new HashSet<TaxonNode>(); \r
\r
ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();\r
if (selection instanceof TreeSelection) {\r
- Object element = ((TreeSelection) selection).getFirstElement();\r
- if (element instanceof TaxonNode) {\r
- TaxonNode childTaxonNode = (TaxonNode) element;\r
- if (target instanceof ITreeNode) {\r
- ITreeNode targetTreeNode = (ITreeNode) target;\r
- \r
- return moveTaxon(childTaxonNode, targetTreeNode);\r
+ \r
+ Iterator selectionIterator = ((TreeSelection) selection).iterator();\r
+ \r
+ while (selectionIterator.hasNext()){\r
+ Object object = selectionIterator.next();\r
+ if(object instanceof TaxonNode){\r
+ TaxonNode taxonNode = (TaxonNode) object;\r
+ taxonNodes.add(taxonNode);\r
}\r
}\r
}\r
- \r
- return Status.CANCEL_STATUS;\r
+ return taxonNodes.size() > 0 ? taxonNodes : null;\r
}\r
\r
/* (non-Javadoc)\r
*/\r
@Override\r
public IStatus validateDrop(Object target, int operation,\r
- TransferData transferType) {\r
+ TransferData transferType) { \r
if (target instanceof ITreeNode) {\r
+ // do not allow to drop onto itself\r
+ for(TaxonNode taxonNode : getSelectedTaxa()){\r
+ if (taxonNode.equals(target)) {\r
+ return Status.CANCEL_STATUS;\r
+ }\r
+ }\r
return Status.OK_STATUS;\r
- }\r
+ } \r
return Status.CANCEL_STATUS;\r
}\r
\r
* @param parentTaxon\r
* @return\r
*/\r
- private IStatus moveTaxon(TaxonNode childTaxonNode, ITreeNode targetTreeNode) {\r
+ private IStatus moveTaxon(Set<TaxonNode> taxonNodes, ITreeNode targetITreeNode) {\r
\r
TaxonNavigator taxonNavigator;\r
try {\r
throw new RuntimeException(e);\r
}\r
\r
- this.target = targetTreeNode;\r
+ if(targetITreeNode instanceof TaxonNode){\r
\r
- if(targetTreeNode instanceof TaxonNode){\r
- \r
- TaxonNode targetTaxonNode = (TaxonNode) targetTreeNode;\r
+ TaxonNode targetTaxonNode = (TaxonNode) targetITreeNode;\r
\r
- // Make sure parentTaxon is not the drop target\r
- if (!childTaxonNode.isTopmostNode() && childTaxonNode.getParent().equals(targetTaxonNode)){\r
- return Status.CANCEL_STATUS;\r
- }\r
- \r
- // Make sure taxon is not being dropped onto itself\r
- if (childTaxonNode.equals(targetTaxonNode)) {\r
- return Status.CANCEL_STATUS;\r
- }\r
+// for(TaxonNode taxonNode : taxonNodes){\r
+// if (taxonNode.equals(targetTaxonNode)) {\r
+// return Status.CANCEL_STATUS;\r
+// }\r
+// }\r
\r
// Make sure parent taxon does not have unsaved changes\r
if (NavigationUtil.isDirty(targetTaxonNode)){\r
"changes in the parent taxon. Pleas save first.");\r
return Status.CANCEL_STATUS;\r
}\r
+ \r
+ \r
+ // Make sure parentTaxon is not the drop target\r
+// if (!childTaxonNode.isTopmostNode() && childTaxonNode.getParent().equals(targetTaxonNode)){\r
+// return Status.CANCEL_STATUS;\r
+// }\r
+ \r
+ // Make sure taxon is not being dropped onto itself\r
+// if (childTaxonNode.equals(targetTaxonNode)) {\r
+// return Status.CANCEL_STATUS;\r
+// }\r
+ \r
+ \r
+\r
} \r
\r
IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();\r
logger.error("Workspace undo context is null. DND operation cancelled");\r
return Status.CANCEL_STATUS;\r
}\r
- \r
-\r
\r
IUndoableOperation operation = new MoveTaxonOperation\r
- ("Move Taxon", workspaceUndoContext, childTaxonNode, targetTreeNode, this, taxonNavigator);\r
+ ("Move Taxon", workspaceUndoContext, taxonNodes, targetITreeNode, this, taxonNavigator);\r
NavigationUtil.executeOperation(operation); \r
-\r
- \r
- \r
- logger.info("Moved taxon " + childTaxonNode + " to new parent " + targetTreeNode);\r
- \r
- NavigationUtil.selectInNavigator(childTaxonNode, targetTreeNode);\r
\r
+ logger.info("Moved taxa to new parent " + targetITreeNode);\r
return Status.OK_STATUS;\r
}\r
\r
* @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
*/\r
public boolean postOperation(CdmBase objectAffectedByOperation) {\r
- NavigationUtil.selectInNavigator(objectAffectedByOperation, target);\r
return true;\r
}\r
}\r
\r
package eu.etaxonomy.taxeditor.operations;\r
\r
-import java.util.UUID;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.Set;\r
\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.commands.ExecutionException;\r
import org.eclipse.core.runtime.IStatus;\r
import org.eclipse.core.runtime.Status;\r
\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
import eu.etaxonomy.cdm.model.taxon.ITreeNode;\r
import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException;\r
import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
import eu.etaxonomy.taxeditor.store.StoreUtil;\r
\r
/**\r
*/\r
private ITreeNode newParentTreeNode;\r
/**\r
- * A reference to the former taxonomical parent\r
+ * A reference to the former taxonomical parents\r
*/\r
- private ITreeNode oldParentTreeNode;\r
+ private Map<TaxonNode, ITreeNode> oldParentTreeNodes;\r
+ \r
+ private Set<TaxonNode> taxonNodes;\r
\r
public MoveTaxonOperation(String label, IUndoContext undoContext,\r
- TaxonNode taxonNode, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
- super(label, undoContext, taxonNode, postOperationEnabled, conversationEnabled);\r
+ Set<TaxonNode> taxonNodes, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
+ super(label, undoContext, postOperationEnabled, conversationEnabled);\r
\r
+ this.taxonNodes = taxonNodes;\r
+ \r
this.newParentTreeNode = newParentTreeNode;\r
\r
- // Save old parent ITreeNode for undo\r
- this.oldParentTreeNode = taxonNode.getParent(); \r
+ // Save old parent ITreeNodes for undo\r
+ oldParentTreeNodes = new HashMap<TaxonNode, ITreeNode>();\r
+ for(TaxonNode taxonNode : taxonNodes){\r
+ this.oldParentTreeNodes.put(taxonNode, taxonNode.getParent());\r
+ }\r
}\r
\r
/* (non-Javadoc)\r
monitor.worked(20);\r
\r
try {\r
- TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, \r
+ for (TaxonNode taxonNode : taxonNodes){\r
+ TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, \r
newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), \r
taxonNode.getSynonymToBeUsed());\r
- return postExecute(newTaxonNode);\r
+ taxonNodes.add(newTaxonNode);\r
+ monitor.worked(2);\r
+ }\r
} catch(IllegalAncestryException e) {\r
StoreUtil.warningDialog("Illegal ancestry", e.getMessage());\r
}\r
monitor.worked(40);\r
\r
- return null;\r
+ return postExecute(null);\r
}\r
\r
/* (non-Javadoc)\r
@Override\r
public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
- bind();\r
- moveTaxonBaseIsolated(taxonNode.getUuid(), oldParentTreeNode.getUuid());\r
+ logger.warn("Not implemented yet.");\r
\r
- return Status.OK_STATUS;\r
- }\r
- \r
- /**\r
- * \r
- * @param taxonNodeUuid\r
- * @param newParentTaxonNodeUuid\r
- * @return\r
- */\r
- private TaxonNode moveTaxonBaseIsolated(UUID taxonNodeUuid, UUID newParentTreeNodeUuid){\r
+ // iterate over oldParentTreeNodes, delete each TaxonNode from its actual parent and add to its former parent \r
\r
- // get a new conversation\r
- ConversationHolder conversation = CdmStore.NewTransactionalConversation();\r
- try{\r
- // find the node\r
- TaxonNode taxonNode = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNodeUuid);\r
- \r
- // find the new parent node\r
- ITreeNode newParentTreeNode = CdmStore.getTaxonTreeService().getTreeNodeByUuid(newParentTreeNodeUuid);\r
- // add node to new parent\r
- try{\r
- TaxonNode newChild = newParentTreeNode.addChildNode(taxonNode, newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), taxonNode.getSynonymToBeUsed());\r
- // commit the conversation\r
- conversation.commit(true); \r
- return newChild;\r
- }catch(IllegalAncestryException e){\r
- StoreUtil.warningDialog("Illegal ancestry", e.getMessage());\r
- }\r
- return null;\r
- }finally{\r
- // FIXME closing this conversation also closes the conversation of the \r
- // taxonomic tree. Removing the close call for sage of a smooth presentation\r
-// conversation.close();\r
- }\r
+ return Status.OK_STATUS;\r
}\r
}\r