(no commit message)
authorn.hoffmann <n.hoffmann@localhost>
Thu, 21 Jan 2010 10:34:57 +0000 (10:34 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 21 Jan 2010 10:34:57 +0000 (10:34 +0000)
.gitattributes
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/DeleteTaxonNodeHandler.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/handler/MoveTaxonHandler.java
taxeditor-navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonDropAdapterAssistant.java
taxeditor-store/META-INF/MANIFEST.MF
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonNodeOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTaxonomicTreeOperation.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/DeleteTreeNodeOperation.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java
taxeditor-store/src/test/java/eu/etaxonomy/taxeditor/store/operations/MoveTaxonOperationTest.java

index f3e8de5ae1996fb909979faeadd751660113c78e..9c4842422de37184ac263c7cf248f56432da66b7 100644 (file)
@@ -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
index f0fd0dc4314f3c1451e1b30c257ff4408bfe25ef..f1387e3463842057fd4812eb80499e491a68a6f1 100644 (file)
 
 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<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;
+                       }
+               }
+       }
 }
index a9a4a4666da6d54e11119762f12af3ff860ca83b..3fa802a5c50c8fafa8aa7a21a785b539928fd588 100644 (file)
@@ -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);
                
                }
index 3fe7c615f293ae7585fc6994c66424f7167f4c81..1674eedda794f5d9e16748e9b6e67415b0e9a17e 100644 (file)
@@ -21,12 +21,12 @@ import org.eclipse.jface.viewers.ISelection;
 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
@@ -88,6 +88,14 @@ public class TaxonDropAdapterAssistant extends CommonDropAdapterAssistant implem
         */\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
@@ -121,7 +129,7 @@ public class TaxonDropAdapterAssistant extends CommonDropAdapterAssistant implem
 \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
index 523602d755e1d32dd74963c2ab1474b8591b5c78..4fc233bb2233cb37d23abd9b02c4bd89cc2a21c3 100644 (file)
@@ -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
index 23957a81d42321714ad7df10130b0c7a420d0433..c219b4c2ee46ca0b39164c73029fe1db8be208da 100644 (file)
@@ -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;
index 5d3e298bdc5d73959c47d20d523dd59af416e651..7415ebbbe580f60024079588395da2868cc71aba 100644 (file)
@@ -35,6 +35,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * @created 16.01.2009\r
  * @version 1.0\r
  */\r
+@Deprecated\r
 public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{\r
        \r
        @SuppressWarnings("unused")\r
@@ -66,8 +67,10 @@ public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{
                        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
@@ -75,13 +78,13 @@ public class DeleteTaxonNodeOperation extends AbstractPersistentPostOperation{
                \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
index c45db001b9353d7a60d4bc99a8eb1dafdd4a3b14..a3fbc81047b64feccaec4c4cecc1d7ab192db4cd 100644 (file)
@@ -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 (file)
index 0000000..3a1cd04
--- /dev/null
@@ -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<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;
+       }
+}
index 17c6d8850ad79e57429094cde5beb41a4c8f1dc0..bb66c73c45e3993f96e10e262c3d1dc84929bf12 100644 (file)
@@ -9,8 +9,6 @@
 \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
@@ -19,11 +17,10 @@ import org.eclipse.core.runtime.IProgressMonitor;
 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
@@ -33,7 +30,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @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
@@ -47,8 +44,8 @@ public class MoveTaxonOperation extends AbstractPostOperation {
        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
@@ -63,9 +60,16 @@ public class MoveTaxonOperation extends AbstractPostOperation {
        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
@@ -84,41 +88,15 @@ public class MoveTaxonOperation extends AbstractPostOperation {
        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
index 242fc650bb4051e06e6c3d36a275a563864adf60..0709172264f384d9ebe7a9087a05ec4158849dff 100644 (file)
@@ -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);
        }
 
        /**