refactoring actions in the treeviewer
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / UiUtil.java
index 7025581041030c421a18c52ca002c5880ec4cf88..993e531d20d721e3462ef9d5b83ec56e75a32dd3 100644 (file)
@@ -42,11 +42,16 @@ import org.eclipse.ui.views.properties.PropertySheetPage;
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
+import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
 import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
 import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
 import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
 import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;\r
@@ -103,6 +108,45 @@ public class UiUtil {
 //             ps.addPropertyListener(l)\r
        }\r
        \r
+       public static void saveAll(){\r
+               setIsSaving(true);\r
+               \r
+               // Get all open windows\r
+               for (IEditorPart taxonEditor : getOpenTaxonEditors()) {\r
+\r
+                       // Save the dirty ones\r
+                       if (taxonEditor.isDirty()) {\r
+                               \r
+                               \r
+                               IEditorInput input = taxonEditor.getEditorInput();\r
+                               if (input.getAdapter(Taxon.class) != null) {\r
+                                       Taxon taxon = (Taxon) input.getAdapter(Taxon.class);\r
+                                       CdmSessionDataRepository.getDefault().saveTaxon(taxon);\r
+                                       if (taxonEditor instanceof MultiPageTaxonEditor) {\r
+                                               ((MultiPageTaxonEditor) taxonEditor).setDirtyExtern(false);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               // Commit the transaction       \r
+               CdmTransactionController.commitTransaction();\r
+       \r
+               // Force library objects to be associated with new transaction\r
+               CdmSessionDataRepository.getDefault().clearNonTaxonData();\r
+               \r
+               // Start a new transaction\r
+               CdmTransactionController.startTransaction();\r
+               \r
+               // Put all open taxa in the new transaction\r
+               CdmTransactionController.addSessionTaxaToTransaction();\r
+               \r
+               setIsSaving(false);\r
+               // TODO: delete undoHistory\r
+       }\r
+       \r
+       //public void deleteTaxon()\r
+       \r
        /**\r
         * @param input\r
         * @return\r
@@ -180,8 +224,43 @@ public class UiUtil {
                return getActivePage().openEditor(input, editorId);\r
        }\r
        \r
+       /**\r
+        * Open an emtpy taxon editor\r
+        * \r
+        * @return\r
+        * @throws PartInitException\r
+        */\r
+       public static IEditorPart openTaxonEditor() \r
+                       throws PartInitException{\r
+               return openTaxonEditor(null);\r
+       }\r
+       \r
+       /** \r
+        * Open a taxon editor for the given taxon\r
+        * \r
+        * @param taxon\r
+        * @return\r
+        * @throws PartInitException\r
+        */\r
        public static IEditorPart openTaxonEditor(Taxon taxon)\r
                        throws PartInitException{\r
+               if(taxon == null){\r
+                       TaxonNameBase name = CdmParserController.parseFullReference("", null, null);\r
+                       name.setFullTitleCache("", false);\r
+                       name.setTitleCache("", false);\r
+                       taxon = Taxon.NewInstance(name, \r
+                                       CdmSessionDataRepository.getDefault().getDefaultSec());\r
+               }else{\r
+                       // If this taxon is not visible in the tree, open node\r
+                       TaxonomicTreeViewer treeViewer = getTreeViewer(); \r
+                       if (treeViewer != null) {\r
+                               treeViewer.revealTaxon(taxon);\r
+                       }\r
+                       \r
+                       // Add to recent names list\r
+                       RecentNamesView.addRecentName(taxon);\r
+               }\r
+               \r
                IEditorInput input = new NameEditorInput(taxon);\r
                return openEditor(input, MultiPageTaxonEditor.ID);\r
        }\r
@@ -285,7 +364,9 @@ public class UiUtil {
        }\r
 \r
        public static IUndoContext getWorkbenchUndoContext() {\r
-               return getOperationSupport().getUndoContext();\r
+               // TODO make this more specific than GLOBAL_UNDO_CONTEXT\r
+//             return getOperationSupport().getUndoContext();\r
+               return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
        }\r
 \r
        public static void doEditorSave(Taxon taxon, boolean confirm) {\r