From: n.hoffmann Date: Thu, 21 Jan 2010 10:34:57 +0000 (+0000) Subject: (no commit message) X-Git-Tag: rcp.ss-first-working-version~410 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/17d259ea28ef8f15582392cd62a26dd645619a53 --- diff --git a/.gitattributes b/.gitattributes index f3e8de5ae..9c4842422 100644 --- a/.gitattributes +++ b/.gitattributes @@ -608,6 +608,7 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteSynonymOpe 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 diff --git a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java index f0fd0dc43..f1387e346 100644 --- a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java +++ b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java @@ -10,6 +10,10 @@ 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; @@ -19,20 +23,21 @@ import org.eclipse.core.commands.common.NotDefinedException; 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 @@ -42,10 +47,18 @@ import eu.etaxonomy.taxeditor.operations.DeleteTaxonomicTreeOperation; 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) { @@ -53,44 +66,52 @@ public class DeleteTaxonNodeHandler extends AbstractHandler implements IHandler{ 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 treeNodes = new HashSet(); + + 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; + } + } + } } diff --git a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java index a9a4a4666..3fa802a5c 100644 --- a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java +++ b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java @@ -20,11 +20,13 @@ import org.eclipse.core.commands.ExecutionException; 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; @@ -42,6 +44,14 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE * @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); @@ -63,7 +73,7 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE 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); } diff --git a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java index 3fe7c615f..1674eedda 100644 --- a/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java +++ b/taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java @@ -21,12 +21,12 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.TransferData; +import org.eclipse.ui.PartInitException; import org.eclipse.ui.navigator.CommonDropAdapter; import org.eclipse.ui.navigator.CommonDropAdapterAssistant; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.taxon.ITreeNode; -import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled; @@ -88,6 +88,14 @@ public class TaxonDropAdapterAssistant extends CommonDropAdapterAssistant implem */ private IStatus moveTaxon(TaxonNode childTaxonNode, ITreeNode targetTreeNode) { + TaxonNavigator taxonNavigator; + try { + taxonNavigator = (TaxonNavigator) NavigationUtil.getView(TaxonNavigator.ID); + } catch (PartInitException e) { + logger.error(e); + throw new RuntimeException(e); + } + this.target = targetTreeNode; if(targetTreeNode instanceof TaxonNode){ @@ -121,7 +129,7 @@ public class TaxonDropAdapterAssistant extends CommonDropAdapterAssistant implem IUndoableOperation operation = new MoveTaxonOperation - ("Move Taxon", workspaceUndoContext, childTaxonNode, targetTreeNode, this); + ("Move Taxon", workspaceUndoContext, childTaxonNode, targetTreeNode, this, taxonNavigator); NavigationUtil.executeOperation(operation); diff --git a/taxeditor-store/META-INF/MANIFEST.MF b/taxeditor-store/META-INF/MANIFEST.MF index 523602d75..4fc233bb2 100644 --- a/taxeditor-store/META-INF/MANIFEST.MF +++ b/taxeditor-store/META-INF/MANIFEST.MF @@ -48,6 +48,7 @@ Import-Package: junit.framework, 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 diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java index 23957a81d..c219b4c2e 100644 --- a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java +++ b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java @@ -28,6 +28,7 @@ import org.eclipse.ui.PartInitException; 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; @@ -123,9 +124,7 @@ public abstract class AbstractUtility { 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; diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java index 5d3e298bd..7415ebbbe 100644 --- a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java +++ b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java @@ -35,6 +35,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @created 16.01.2009 * @version 1.0 */ +@Deprecated public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{ @SuppressWarnings("unused") @@ -66,8 +67,10 @@ public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{ taxonName = taxon.getName().getTitleCache(); } + String childWarning = taxonNode.getChildNodes().size() > 0 ? "and all included taxa" : ""; + // Prompt user for confirmation - if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "' from this taxonomic view?")){ + if(! MessageDialog.openConfirm((Shell) info.getAdapter(Shell.class), "Confirm Deletion", "Are you sure you want to delete taxon '" + taxonName + "' " + childWarning + " from this taxonomic view?")){ monitor.done(); return Status.CANCEL_STATUS; } @@ -75,13 +78,13 @@ public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{ // If the taxon node has child nodes, cancel operation // TODO add option to continue, and delete children - if (taxonNode.getChildNodes().size() > 0) { - MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon", - "'" + taxonName + "' has taxonomic children. " + - "These must be manually deleted before their parent."); - monitor.done(); - return Status.CANCEL_STATUS; - } +// if (taxonNode.getChildNodes().size() > 0) { +// MessageDialog.openInformation((Shell) info.getAdapter(Shell.class), "Cannot delete taxon", +// "'" + taxonName + "' has taxonomic children. " + +// "These must be manually deleted before their parent."); +// monitor.done(); +// return Status.CANCEL_STATUS; +// } taxonNode.delete(); diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java index c45db001b..a3fbc8104 100644 --- a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java +++ b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java @@ -32,6 +32,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @created 23.06.2009 * @version 1.0 */ +@Deprecated public class DeleteTaxonomicTreeOperation extends AbstractPersistentPostOperation { private static final Logger logger = Logger @@ -60,21 +61,23 @@ public class DeleteTaxonomicTreeOperation extends AbstractPersistentPostOperatio 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); diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTreeNodeOperation.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTreeNodeOperation.java new file mode 100644 index 000000000..3a1cd045c --- /dev/null +++ b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTreeNodeOperation.java @@ -0,0 +1,99 @@ +// $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 treeNodes; + + + /** + * @param label + * @param undoContext + * @param postOperationEnabled + * @param conversationEnabled + */ + public DeleteTreeNodeOperation(String label, IUndoContext undoContext, + Set 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; + } +} diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java index 17c6d8850..bb66c73c4 100644 --- a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java +++ b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java @@ -9,8 +9,6 @@ package eu.etaxonomy.taxeditor.operations; -import java.util.UUID; - import org.apache.log4j.Logger; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.IUndoContext; @@ -19,11 +17,10 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import eu.etaxonomy.cdm.api.conversation.ConversationHolder; +import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.model.taxon.ITreeNode; import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException; import eu.etaxonomy.cdm.model.taxon.TaxonNode; -import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.StoreUtil; /** @@ -33,7 +30,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil; * @created 16.01.2009 * @version 1.0 */ -public class MoveTaxonOperation extends AbstractPostOperation { +public class MoveTaxonOperation extends AbstractPersistentPostOperation { @SuppressWarnings("unused") private static final Logger logger = Logger.getLogger(MoveTaxonOperation.class); @@ -47,8 +44,8 @@ public class MoveTaxonOperation extends AbstractPostOperation { private ITreeNode oldParentTreeNode; public MoveTaxonOperation(String label, IUndoContext undoContext, - TaxonNode taxonNode, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled) { - super(label, undoContext, taxonNode, null); + TaxonNode taxonNode, ITreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { + super(label, undoContext, taxonNode, postOperationEnabled, conversationEnabled); this.newParentTreeNode = newParentTreeNode; @@ -63,9 +60,16 @@ public class MoveTaxonOperation extends AbstractPostOperation { public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - TaxonNode newTaxonNode = moveTaxonBaseIsolated(taxonNode.getUuid(), newParentTreeNode.getUuid()); + try{ + TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, + newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), + taxonNode.getSynonymToBeUsed()); + return postExecute(newTaxonNode); + }catch(IllegalAncestryException e){ + StoreUtil.warningDialog("Illegal ancestry", e.getMessage()); + } - return postExecute(newTaxonNode); + return null; } /* (non-Javadoc) @@ -84,41 +88,15 @@ public class MoveTaxonOperation extends AbstractPostOperation { public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - moveTaxonBaseIsolated(taxonNode.getUuid(), oldParentTreeNode.getUuid()); - - return Status.OK_STATUS; - } - - /** - * - * @param taxonNodeUuid - * @param newParentTaxonNodeUuid - * @return - */ - private TaxonNode moveTaxonBaseIsolated(UUID taxonNodeUuid, UUID newParentTreeNodeUuid){ - - // get a new conversation - ConversationHolder conversation = CdmStore.NewTransactionalConversation(); try{ - // find the node - TaxonNode taxonNode = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNodeUuid); - - // find the new parent node - ITreeNode newParentTreeNode = CdmStore.getTaxonTreeService().getTreeNodeByUuid(newParentTreeNodeUuid); - // add node to new parent - try{ - TaxonNode newChild = newParentTreeNode.addChildNode(taxonNode, newParentTreeNode.getReference(), newParentTreeNode.getMicroReference(), taxonNode.getSynonymToBeUsed()); - // commit the conversation - conversation.commit(true); - return newChild; - }catch(IllegalAncestryException e){ - StoreUtil.warningDialog("Illegal ancestry", e.getMessage()); - } - return null; - }finally{ - // FIXME closing this conversation also closes the conversation of the - // taxonomic tree. Removing the close call for sage of a smooth presentation -// conversation.close(); + TaxonNode newTaxonNode = oldParentTreeNode.addChildNode(taxonNode, + oldParentTreeNode.getReference(), oldParentTreeNode.getMicroReference(), + taxonNode.getSynonymToBeUsed()); + return postExecute(newTaxonNode); + }catch(IllegalAncestryException e){ + StoreUtil.warningDialog("Illegal ancestry", e.getMessage()); } + + return Status.OK_STATUS; } } diff --git a/taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java b/taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java index 242fc650b..070917226 100644 --- a/taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java +++ b/taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java @@ -54,7 +54,7 @@ public class MoveTaxonOperationTest extends AbstractTaxeditorOperationTest { 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); } /**