refactoring actions in the treeviewer
authorn.hoffmann <n.hoffmann@localhost>
Mon, 19 Jan 2009 12:33:39 +0000 (12:33 +0000)
committern.hoffmann <n.hoffmann@localhost>
Mon, 19 Jan 2009 12:33:39 +0000 (12:33 +0000)
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/UiUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/DeleteTaxonOperation.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/MoveTaxonOperation.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java

index 993e531d20d721e3462ef9d5b83ec56e75a32dd3..e818822d6ecddd5df0f8fb7312baeda72dd6c2d4 100644 (file)
@@ -20,6 +20,7 @@ import org.eclipse.core.commands.operations.IOperationHistory;
 import org.eclipse.core.commands.operations.IUndoContext;\r
 import org.eclipse.core.commands.operations.OperationHistoryFactory;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.Status;\r
 import org.eclipse.jface.action.IStatusLineManager;\r
 import org.eclipse.swt.graphics.Color;\r
 import org.eclipse.swt.widgets.Shell;\r
@@ -265,6 +266,26 @@ public class UiUtil {
                return openEditor(input, MultiPageTaxonEditor.ID);\r
        }\r
 \r
+       /**\r
+        * Redraws an open editor if it exists for the given taxon\r
+        * \r
+        * @param taxon\r
+        * @return\r
+        */\r
+       public static boolean redrawEditor(Taxon taxon){\r
+               \r
+               TaxonNameEditor editor = UiUtil.getTaxonNameEditor(taxon);\r
+               \r
+               if(editor == null || editor.redraw()){\r
+                       \r
+                       // Mark editor as changed and unsaved\r
+                       editor.setDirty();\r
+                       \r
+                       return true;    \r
+               }       \r
+               return false;\r
+       }\r
+       \r
        /**\r
         * @param taxon\r
         * @param save\r
index 4c1c3f36b70c600f3da99fd97eff8d0b64d60cfe..b3092d5d291076afe697ae47f03e34c259962d2d 100644 (file)
@@ -12,7 +12,12 @@ package eu.etaxonomy.taxeditor.navigation;
 import java.util.Set;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
 import org.eclipse.core.databinding.observable.set.IObservableSet;\r
+import org.eclipse.core.runtime.IStatus;\r
 import org.eclipse.jface.action.Action;\r
 import org.eclipse.jface.action.IMenuListener;\r
 import org.eclipse.jface.action.IMenuManager;\r
@@ -56,12 +61,14 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.swt.widgets.Tree;\r
 import org.eclipse.swt.widgets.TreeItem;\r
+import org.eclipse.ui.PartInitException;\r
 \r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.actions.cdm.DeleteTaxonAction;\r
@@ -77,6 +84,8 @@ import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.model.ICdmTaxonSetListener;\r
 import eu.etaxonomy.taxeditor.model.TaxonomicTreeContentProvider;\r
+import eu.etaxonomy.taxeditor.operations.MoveTaxonOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.RemoveSynonymOperation;\r
 \r
 /**\r
  * Taxon tree viewer which responds to events within individual taxa.\r
@@ -96,6 +105,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
        private ContextMenu contextMenu;\r
 \r
        private boolean quickAddMode;\r
+       \r
+       private IOperationHistory operationHistory;\r
+       private IUndoContext undoContext;\r
 \r
        private boolean initialized = false;\r
 \r
@@ -110,6 +122,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
                // SW.VIRTUAL causes nodes to be loaded on-demand, improving performance\r
                super(parent, SWT.VIRTUAL);\r
 \r
+               operationHistory = UiUtil.getOperationHistory();\r
+               undoContext = UiUtil.getWorkbenchUndoContext();\r
+               \r
                tree = this.getTree();\r
                tree.setLinesVisible(false);\r
                tree.setHeaderVisible(false);\r
@@ -199,7 +214,15 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                        }\r
                                }\r
 \r
-                               new MoveTaxonAction(taxon, parentTaxon).run();\r
+                               String text = "Move taxon"; //$NON-NLS-1$\r
+                               \r
+                               IUndoableOperation operation = new MoveTaxonOperation\r
+                                               (text, undoContext, taxon, parentTaxon);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       logger.error("Error moving taxon", e);\r
+                               }                               \r
                        }\r
                });\r
        }\r
@@ -208,6 +231,7 @@ public class TaxonomicTreeViewer extends TreeViewer {
 \r
        private void removeQuicklyAddedTaxon() {\r
                if (quickAddTaxon != null) {\r
+                       // TODO move the whole delete code to another place\r
                        new DeleteTaxonAction(quickAddTaxon).run();\r
                        // if above doesn't work, do remove session taxon but also w remove children\r
 //                     TaxEditorPlugin.getDefault().removeSessionTaxon(quickAddTaxon);\r
@@ -236,7 +260,9 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                                NonViralName name = (NonViralName) quickAddTaxon.getName();\r
                                                CdmParserController.parseFullReference(name, trimmedValue);\r
                                                \r
-                                               new SaveTaxonAction(quickAddTaxon).run();\r
+//                                             new SaveTaxonAction(quickAddTaxon).run();\r
+                                               CdmSessionDataRepository.getDefault().saveTaxon(quickAddTaxon);\r
+                                               \r
                                                quickAddTaxon = null;\r
                                        }\r
                                }\r
@@ -301,7 +327,12 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                        Object element = ((StructuredSelection) event\r
                                                        .getSelection()).getFirstElement();\r
                                        if (element instanceof Taxon) {\r
-                                               new OpenTaxonEditorAction((Taxon) element).run();\r
+//                                             new OpenTaxonEditorAction((Taxon) element).run();\r
+                                               try {\r
+                                                       UiUtil.openTaxonEditor((Taxon) element);\r
+                                               } catch (PartInitException e) {\r
+                                                       logger.error("Error opening taxon editor", e);\r
+                                               }\r
                                        }\r
                                }\r
                        }\r
@@ -503,15 +534,18 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                if (!(selection instanceof Taxon)) {\r
                                        return;\r
                                }\r
-                               Taxon taxon = (Taxon) selection;\r
-\r
+                               final Taxon taxon = (Taxon) selection;\r
+                               \r
+                               // Open new taxon editor window \r
                                Action openEditorAction = new OpenTaxonEditorAction(taxon);\r
                                manager.add(openEditorAction);\r
 \r
+                               // Open new editor with new child taxon. The taxon will not appear in the tree until saved\r
                                Action openNewChildEditorAction = new OpenNewChildNameEditorAction(\r
                                                taxon);\r
                                manager.add(openNewChildEditorAction);\r
 \r
+                               // Create a new node in the tree to enter taxon name directly in the tree.\r
                                Action openQuickNameAction = new AddQuickNameAction(taxon);\r
                                manager.add(openQuickNameAction);\r
                                openQuickNameAction\r
@@ -526,7 +560,8 @@ public class TaxonomicTreeViewer extends TreeViewer {
                                                });\r
 \r
                                manager.add(new Separator());\r
-\r
+                               \r
+                               // Remove taxon from tree\r
                                Action deleteTaxonAction = new DeleteTaxonAction(taxon);\r
                                manager.add(deleteTaxonAction);\r
                        }\r
index 575c25e78b47d03fd91eb091f61dd74fd5eb9f53..f577a6d667531f958f38e781214f08277acdb951 100644 (file)
@@ -17,7 +17,6 @@ import org.eclipse.core.runtime.Status;
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -25,9 +24,14 @@ import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
  * @version 1.0\r
  */\r
 public abstract class AbstractEditorOperation extends AbstractOperation {\r
+       \r
+       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger\r
                        .getLogger(AbstractEditorOperation.class);\r
        \r
+       /** \r
+        * A reference to the taxon the concrete operation is working on \r
+        */\r
        protected Taxon taxon;\r
 \r
        public AbstractEditorOperation(String label, IUndoContext undoContext,\r
@@ -38,17 +42,11 @@ public abstract class AbstractEditorOperation extends AbstractOperation {
                this.taxon = taxon;\r
        }\r
        \r
-       protected IStatus redrawOpenEditor() {\r
-               \r
-               // Redraw editor if exists\r
-               TaxonNameEditor editor = UiUtil.getTaxonNameEditor(taxon);\r
-               if(editor == null || editor.redraw()){\r
-                       \r
-                       // Mark editor as changed and unsaved\r
-                       editor.setDirty();\r
-                       \r
-                       return Status.OK_STATUS;        \r
-               }       \r
-               return Status.CANCEL_STATUS;\r
+       /**\r
+        * \r
+        * @return\r
+        */\r
+       protected IStatus redrawOpenEditor() {  \r
+               return UiUtil.redrawEditor(taxon) ? Status.OK_STATUS : Status.CANCEL_STATUS;\r
        }\r
 }\r
index e815ad14b3aa0afd2f69e464be3cc6832062ee57..8cd2daf90f5b65cc1ae595dffc82bebc9c8fec9b 100644 (file)
@@ -11,7 +11,6 @@ package eu.etaxonomy.taxeditor.operations;
 \r
 import org.apache.log4j.Logger;\r
 import org.eclipse.core.commands.ExecutionException;\r
-import org.eclipse.core.commands.operations.AbstractOperation;\r
 import org.eclipse.core.commands.operations.IUndoContext;\r
 import org.eclipse.core.runtime.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
@@ -25,14 +24,28 @@ import eu.etaxonomy.taxeditor.UiUtil;
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
 \r
 /**\r
+ * Delete a taxon from the model.\r
+ * \r
+ * TODO: Currently all data in session data repository has to be saved before deleting \r
+ * a taxon and the whole logic is happening here. This way we would have to implement \r
+ * the same logic in another place if we want to delete outside of an operation context\r
+ * (NOT undoable). Therefore it is desirable to have the logic implemented in another \r
+ * place and merely call a method here.\r
+ * \r
  * @author n.hoffmann\r
  * @created 16.01.2009\r
  * @version 1.0\r
  */\r
 public class DeleteTaxonOperation extends AbstractEditorOperation {\r
+       \r
+       @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(DeleteTaxonOperation.class);\r
 \r
+       /**\r
+        * The taxonomical parent of the taxon to be deleted.\r
+        */\r
        private Taxon parentTaxon;\r
+       \r
        public DeleteTaxonOperation(String text, IUndoContext undoContext,\r
                        Taxon taxon) {\r
                super(text, undoContext, taxon);\r
index 9117a8a098c482bf784558532d898c6f2c09b7b8..5dff9ed2c662423fd2325bf7d22a6b4558dc4c69 100644 (file)
@@ -21,15 +21,23 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
 \r
 /**\r
+ * Change the taxonomic parent of a given taxon.\r
+ * \r
  * @author n.hoffmann\r
  * @created 16.01.2009\r
  * @version 1.0\r
  */\r
 public class MoveTaxonOperation extends AbstractEditorOperation {\r
        \r
-\r
-       private static Logger logger = Logger.getLogger(MoveTaxonOperation.class);\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(MoveTaxonOperation.class);\r
+       /**\r
+        * A reference to the new taxonomical parent.\r
+        */\r
        private Taxon newParentTaxon;\r
+       /**\r
+        * A reference to the former taxonomical parent\r
+        */\r
        private Taxon oldParentTaxon;\r
 \r
        public MoveTaxonOperation(String label, IUndoContext undoContext,\r
index b59079a3d59435a08d742f8408ffd52d0400e159..39bcaf7bd49995314b714e7b84e74f564ebf5a25 100644 (file)
@@ -15,23 +15,37 @@ import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
 \r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
 \r
+/**\r
+ * Change a the homotypical group for a given synonym.\r
+ * \r
+ * @author n.hoffmann\r
+ * @created 19.01.2009\r
+ * @version 1.0\r
+ */\r
 public class ChangeHomotypicGroupOperation extends AbstractEditorOperation {\r
        \r
+       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger\r
                        .getLogger(ChangeHomotypicGroupOperation.class);\r
 \r
+       /**\r
+        * The synonym to be moved.\r
+        */\r
        private Synonym synonym; \r
+       /**\r
+        * The former homotypical group the synonym belonged to\r
+        */\r
        private HomotypicalGroup oldHomotypicalGroup;\r
+       /**\r
+        * The homotypical group the synonym is to be moved to\r
+        */\r
        private HomotypicalGroup newHomotypicalGroup;\r
        \r
        public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext, \r
@@ -48,7 +62,9 @@ public class ChangeHomotypicGroupOperation extends AbstractEditorOperation {
                this.newHomotypicalGroup = newHomotypicalGroup;\r
        }\r
 \r
-\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
        @Override\r
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
@@ -66,12 +82,18 @@ public class ChangeHomotypicGroupOperation extends AbstractEditorOperation {
                return redrawOpenEditor();\r
        }\r
 \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
        @Override\r
        public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
                return execute(monitor, info);\r
        }\r
 \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
        @Override\r
        public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
index dafdc845927184c5255ee00ec9a742d6a0f358fb..a870e3d9ba97d14d512b3590d99a6e8e0beed3fa 100644 (file)
@@ -90,9 +90,12 @@ public class MakeSynonymAcceptedOperation extends AbstractEditorOperation {
                // Add new taxon to tree\r
                CdmSessionDataRepository.getDefault().addTaxon(newAcceptedTaxon);\r
 \r
-               // Open editor for new taxon\r
-               new OpenTaxonEditorAction(newAcceptedTaxon).run();\r
-\r
+               // Open editor for new accepted taxon\r
+               try {\r
+                       UiUtil.openTaxonEditor(newAcceptedTaxon);\r
+               } catch (PartInitException e) {\r
+                       e.printStackTrace();\r
+               }\r
                // Remove old taxon from recent names list\r
                RecentNamesView.addRecentName(taxon);\r
                \r