taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonDescriptionOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTreeNodeOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteUserOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/IPostOperationEnabled.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveImageInListOperation.java -text
package eu.etaxonomy.taxeditor.navigation.handler;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
+import eu.etaxonomy.cdm.model.taxon.ITreeNode;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
-import eu.etaxonomy.taxeditor.operations.DeleteTaxonNodeOperation;
-import eu.etaxonomy.taxeditor.operations.DeleteTaxonomicTreeOperation;
+import eu.etaxonomy.taxeditor.operations.DeleteTreeNodeOperation;
/**
* @author n.hoffmann
public class DeleteTaxonNodeHandler extends AbstractHandler implements IHandler{
private static final Logger logger = Logger
.getLogger(DeleteTaxonNodeHandler.class);
+ private IWorkbenchPage activePage;
+ private TaxonNavigator taxonNavigator;
public Object execute(ExecutionEvent event) throws ExecutionException {
- TaxonNavigator taxonNavigator;
+ // Prompt user for confirmation
+ if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Are you sure you want to delete the selected taxa?")){
+ return null;
+ }
+
+ activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
+
try {
taxonNavigator = (TaxonNavigator) NavigationUtil.getView(TaxonNavigator.ID);
} catch (PartInitException e) {
throw new RuntimeException(e);
}
- // TODO handle delete on multiple nodes
-
TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
- Object treeOrNode = selection.getFirstElement();
+ Iterator selectionIterator = selection.iterator();
+ Set<ITreeNode> treeNodes = new HashSet<ITreeNode>();
+
+ while (selectionIterator.hasNext()){
+ Object object = selectionIterator.next();
+ if(object instanceof ITreeNode)
+ treeNodes.add((ITreeNode) object);
+ }
+
IUndoableOperation operation = null;
try {
- if(treeOrNode instanceof TaxonomicTree){
- operation = new DeleteTaxonomicTreeOperation(event.getCommand().getName(),
- NavigationUtil.getUndoContext(), (TaxonomicTree) treeOrNode, taxonNavigator, taxonNavigator);
- }else if(treeOrNode instanceof TaxonNode){
-
- operation = new DeleteTaxonNodeOperation(event.getCommand().getName(),
- NavigationUtil.getUndoContext(), (TaxonNode) treeOrNode, taxonNavigator, taxonNavigator);
-
- }
+ operation = new DeleteTreeNodeOperation(event.getCommand().getName(), NavigationUtil.getUndoContext(), treeNodes, taxonNavigator, taxonNavigator);
+
IStatus status = NavigationUtil.executeOperation(operation);
- // Close any open taxon node editors
- if (status == Status.OK_STATUS && treeOrNode instanceof TaxonNode) {
- IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
- for (IEditorReference ref : activePage.getEditorReferences()) {
- try {
- IEditorInput input = ref.getEditorInput();
- if (input instanceof TaxonEditorInput) {
- TaxonNode node = ((TaxonEditorInput) input).getTaxonNode();
- if (treeOrNode.equals(node)) {
- activePage.closeEditor(ref.getEditor(false), false);
- }
- }
- } catch (PartInitException e) {
- continue;
+
+ // FIXME is there a better place for this code?
+ if (status == Status.OK_STATUS){
+ for (ITreeNode treeNode : treeNodes){
+ if(treeNode instanceof TaxonNode) {
+ closeObsoleteEditor((TaxonNode) treeNode);
}
}
}
+
} catch (NotDefinedException e) {
logger.warn("Command name not set");
}
return null;
}
+
+ private void closeObsoleteEditor(TaxonNode taxonNode){
+ for (IEditorReference ref : activePage.getEditorReferences()) {
+ try {
+ IEditorInput input = ref.getEditorInput();
+ if (input instanceof TaxonEditorInput) {
+ TaxonNode node = ((TaxonEditorInput) input).getTaxonNode();
+ if (taxonNode.equals(node)) {
+ activePage.closeEditor(ref.getEditor(false), false);
+ }
+ }
+ } catch (PartInitException e) {
+ continue;
+ }
+ }
+ }
}
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PartInitException;
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;
* @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);
+ }
+
Shell shell = NavigationUtil.getShell();
TaxonNode taxonNode = (TaxonNode) NavigationUtil.getCurrentSelection(event);
IUndoableOperation operation = new MoveTaxonOperation
("Move taxon to new parent", NavigationUtil.getUndoContext(),
- taxonNode, parentTaxonNode, this); //$NON-NLS-1$
+ taxonNode, parentTaxonNode, this, taxonNavigator); //$NON-NLS-1$
NavigationUtil.executeOperation(operation);
}
import org.eclipse.jface.viewers.TreeSelection;\r
import org.eclipse.swt.dnd.DropTargetEvent;\r
import org.eclipse.swt.dnd.TransferData;\r
+import org.eclipse.ui.PartInitException;\r
import org.eclipse.ui.navigator.CommonDropAdapter;\r
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;\r
\r
import eu.etaxonomy.cdm.model.common.CdmBase;\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.navigation.NavigationUtil;\r
import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
*/\r
private IStatus moveTaxon(TaxonNode childTaxonNode, ITreeNode targetTreeNode) {\r
\r
+ TaxonNavigator taxonNavigator;\r
+ try {\r
+ taxonNavigator = (TaxonNavigator) NavigationUtil.getView(TaxonNavigator.ID);\r
+ } catch (PartInitException e) {\r
+ logger.error(e);\r
+ throw new RuntimeException(e);\r
+ }\r
+ \r
this.target = targetTreeNode;\r
\r
if(targetTreeNode instanceof TaxonNode){\r
\r
\r
IUndoableOperation operation = new MoveTaxonOperation\r
- ("Move Taxon", workspaceUndoContext, childTaxonNode, targetTreeNode, this);\r
+ ("Move Taxon", workspaceUndoContext, childTaxonNode, targetTreeNode, this, taxonNavigator);\r
NavigationUtil.executeOperation(operation); \r
\r
\r
org.eclipse.swt.graphics,
org.eclipse.swt.widgets,
org.eclipse.ui.editors.text,
+ org.eclipse.ui.ide.undo,
org.junit,
org.osgi.framework
Bundle-ActivationPolicy: lazy
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;
+import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
try {
IStatus status = getOperationHistory().execute(operation, getMonitor(),
- // this is from a package we do not want to include
- //WorkspaceUndoUtil.getUIInfoAdapter(getShell())
- null);
+ WorkspaceUndoUtil.getUIInfoAdapter(getShell()));
String statusString = status.equals(Status.OK_STATUS) ? "completed" : "cancelled";
setStatusLine(operation.getLabel() + " " + statusString + ".");
return status;
* @created 16.01.2009\r
* @version 1.0\r
*/\r
+@Deprecated\r
public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{\r
\r
@SuppressWarnings("unused")\r
taxonName = taxon.getName().getTitleCache();\r
}\r
\r
+ String childWarning = taxonNode.getChildNodes().size() > 0 ? "and all included taxa" : "";\r
+ \r
// Prompt user for confirmation\r
- if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "' from this taxonomic view?")){\r
+ if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "' " + childWarning + " from this taxonomic view?")){\r
monitor.done();\r
return Status.CANCEL_STATUS;\r
}\r
\r
// If the taxon node has child nodes, cancel operation\r
// TODO add option to continue, and delete children\r
- if (taxonNode.getChildNodes().size() > 0) {\r
- MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon", \r
- "'" + taxonName + "' has taxonomic children. " +\r
- "These must be manually deleted before their parent.");\r
- monitor.done();\r
- return Status.CANCEL_STATUS;\r
- }\r
+// if (taxonNode.getChildNodes().size() > 0) {\r
+// MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon", \r
+// "'" + taxonName + "' has taxonomic children. " +\r
+// "These must be manually deleted before their parent.");\r
+// monitor.done();\r
+// return Status.CANCEL_STATUS;\r
+// }\r
\r
taxonNode.delete();\r
\r
* @created 23.06.2009
* @version 1.0
*/
+@Deprecated
public class DeleteTaxonomicTreeOperation extends AbstractPersistentPostOperation {
private static final Logger logger = Logger
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
+ String childWarning = taxonomicTree.getRootNodes().size() > 0 ? "and all included nodes" : "";
+
// Prompt user for confirmation
- if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete the taxonomic view '" + taxonomicTree.getTitleCache() + "'?")){
+ if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete the taxonomic view '" + taxonomicTree.getTitleCache() + "' " + childWarning + "?")){
monitor.done();
return Status.CANCEL_STATUS;
}
// If the taxonomic tree has child nodes, cancel operation
// TODO add option to continue, and delete children
- if (taxonomicTree.getRootNodes().size() > 0) {
- MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon",
- "'" + taxonomicTree.getTitleCache() + "' has taxonomic children. " +
- "These must be manually deleted before their parent.");
- monitor.done();
- return Status.CANCEL_STATUS;
- }
+// if (taxonomicTree.getRootNodes().size() > 0) {
+// MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon",
+// "'" + taxonomicTree.getTitleCache() + "' has taxonomic children. " +
+// "These must be manually deleted before their parent.");
+// monitor.done();
+// return Status.CANCEL_STATUS;
+// }
CdmStore.getTaxonTreeService().delete(taxonomicTree);
--- /dev/null
+// $Id$
+/**
+* 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.operations;
+
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+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 eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.model.taxon.ITreeNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 20, 2010
+ * @version 1.0
+ */
+public class DeleteTreeNodeOperation extends AbstractPersistentPostOperation{
+
+ private static final Logger logger = Logger
+ .getLogger(DeleteTreeNodeOperation.class);
+ private Set<ITreeNode> treeNodes;
+
+
+ /**
+ * @param label
+ * @param undoContext
+ * @param postOperationEnabled
+ * @param conversationEnabled
+ */
+ public DeleteTreeNodeOperation(String label, IUndoContext undoContext,
+ Set<ITreeNode> treeNodes,
+ IPostOperationEnabled postOperationEnabled,
+ IConversationEnabled conversationEnabled) {
+ super(label, undoContext, postOperationEnabled, conversationEnabled);
+ this.treeNodes = treeNodes;
+ }
+
+
+ /* (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 {
+
+ for (ITreeNode treeNode : treeNodes){
+ if(treeNode instanceof TaxonNode){
+ ((TaxonNode) treeNode).delete();
+ }else if(treeNode instanceof TaxonomicTree){
+ TaxonomicTree taxonomicTree = (TaxonomicTree) treeNode;
+ if(taxonomicTree.hasChildNodes()){
+ StoreUtil.warningDialog("Tree is not empty", "It is not possible to delete a Taxonomic Tree that " +
+ "is not empty. Please delete included taxa first");
+ }else{
+ CdmStore.getTaxonTreeService().delete(taxonomicTree);
+ }
+ }
+ }
+
+ return postExecute(null);
+ }
+
+ /* (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 {
+ // TODO Auto-generated method stub
+ return 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 {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
\r
package eu.etaxonomy.taxeditor.operations;\r
\r
-import java.util.UUID;\r
-\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.commands.ExecutionException;\r
import org.eclipse.core.commands.operations.IUndoContext;\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
* @created 16.01.2009\r
* @version 1.0\r
*/\r
-public class MoveTaxonOperation extends AbstractPostOperation {\r
+public class MoveTaxonOperation extends AbstractPersistentPostOperation {\r
\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(MoveTaxonOperation.class);\r
private ITreeNode oldParentTreeNode;\r
\r
public MoveTaxonOperation(String label, IUndoContext undoContext,\r
- TaxonNode taxonNode, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled) {\r
- super(label, undoContext, taxonNode, null);\r
+ TaxonNode taxonNode, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
+ super(label, undoContext, taxonNode, postOperationEnabled, conversationEnabled);\r
\r
this.newParentTreeNode = newParentTreeNode;\r
\r
public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
\r
- TaxonNode newTaxonNode = moveTaxonBaseIsolated(taxonNode.getUuid(), newParentTreeNode.getUuid());\r
+ try{\r
+ TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, \r
+ newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), \r
+ taxonNode.getSynonymToBeUsed());\r
+ return postExecute(newTaxonNode);\r
+ }catch(IllegalAncestryException e){\r
+ StoreUtil.warningDialog("Illegal ancestry", e.getMessage());\r
+ }\r
\r
- return postExecute(newTaxonNode);\r
+ return null;\r
}\r
\r
/* (non-Javadoc)\r
public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
\r
- moveTaxonBaseIsolated(taxonNode.getUuid(), oldParentTreeNode.getUuid());\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
- \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
+ TaxonNode newTaxonNode = oldParentTreeNode.addChildNode(taxonNode, \r
+ oldParentTreeNode.getReference(), oldParentTreeNode.getMicroReference(), \r
+ taxonNode.getSynonymToBeUsed());\r
+ return postExecute(newTaxonNode);\r
+ }catch(IllegalAncestryException e){\r
+ StoreUtil.warningDialog("Illegal ancestry", e.getMessage());\r
}\r
+ \r
+ return Status.OK_STATUS;\r
}\r
}\r
taxonNode = oldParentTaxonNode.addChild(taxon);
- operation = new MoveTaxonOperation("Move Taxon To Different Parent", undoContext, taxonNode, newParentTaxonNode, postOperation);
+ operation = null;//new MoveTaxonOperation("Move Taxon To Different Parent", undoContext, taxonNode, newParentTaxonNode, postOperation);
}
/**