ref #6595 removed e3 name editor classes (unstable navigator plugin)
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / EditorUtil.java
index 522bd59e370f8a163ee79fe5495353e9d1c4fa67..c7f6c413ac81162cca1ba0a0cff21207d752a35f 100644 (file)
@@ -9,13 +9,14 @@
 
 package eu.etaxonomy.taxeditor.editor;
 
-import java.util.HashSet;
-import java.util.Set;
 import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.operations.IOperationHistory;
 import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -36,21 +37,16 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.editor.e4.TaxonEditorInputE4;
 import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditor;
 import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
 import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
+import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
 import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
 import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditorInput;
-//import eu.etaxonomy.taxeditor.store.view.dataimport.BioCaseEditorInput;
-//import eu.etaxonomy.taxeditor.view.dataimport.DataImportEditor;
-//import eu.etaxonomy.taxeditor.view.dataimport.DataImportEditorInput;
-//import eu.etaxonomy.taxeditor.view.dataimport.GbifImportEditor;
-//import eu.etaxonomy.taxeditor.view.dataimport.GbifImportEditorInput;
-//import eu.etaxonomy.taxeditor.view.dataimport.SpecimenImportEditor;
-import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView;
-import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -87,19 +83,6 @@ public class EditorUtil extends AbstractUtility {
                return editor;
        }
 
-       /**
-        * Opens a new editor window with the given TaxonEditorInput
-        *
-        * @param input
-        *            a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput}
-        *            object.
-        * @throws org.eclipse.ui.PartInitException
-        *             if any.
-        */
-       public static void open(TaxonEditorInput input) throws PartInitException {
-               open(input, MultiPageTaxonEditor.ID);
-       }
-
        public static void open(PolytomousKeyEditorInput input)
                        throws PartInitException {
                open(input, KeyEditor.ID);
@@ -110,17 +93,6 @@ public class EditorUtil extends AbstractUtility {
                open(input, CdmAuthorityEditor.ID);
        }
 
-       /**
-        * Opens a new DerivateView for the given input
-        * @param input a {@link DerivateViewEditorInput} representing the selected derivate
-        * @throws PartInitException
-        */
-       public static void open(DerivateViewEditorInput input)
-               throws PartInitException {
-           open(input, DerivateView.ID);
-       }
-
-
        /**
         * Opens a new ChecklistView for the given input
         * @param input a {@link ChecklistEditorInput} representing the selected checklist
@@ -155,44 +127,37 @@ public class EditorUtil extends AbstractUtility {
         * @throws java.lang.Exception
         *             if any.
         */
-       public static void openTaxonNode(UUID taxonNodeUuid) throws Exception {
-               TaxonEditorInput input = TaxonEditorInput.NewInstance(taxonNodeUuid);
-               open(input);
+       public static void openTaxonNodeE4(UUID taxonNodeUuid) throws Exception {
+           //FIXME E4 this can probably be removed when fully migrated
+        TaxonEditorInputE4 input = TaxonEditorInputE4.NewInstance(taxonNodeUuid);
+        EPartService partService = TaxeditorEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getService(EPartService.class);
+        MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4");
+        partService.showPart(part, PartState.ACTIVATE);
+        TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject();
+        editor.init(input);
        }
 
-       /**
-        * <p>
-        * openTaxonBase
-        * </p>
-        *
-        * @param taxonBaseUuid
-        *            a {@link java.util.UUID} object.
-        * @throws org.eclipse.ui.PartInitException
-        *             if any.
-        */
-       public static void openTaxonBase(UUID taxonBaseUuid)
-                       throws PartInitException {
+       public static void openTaxonBaseE4(UUID taxonBaseUuid) throws PartInitException{
+           //FIXME E4 this can probably be removed when fully migrated
            TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid);
-        if (taxonBase != null && taxonBase.isOrphaned()) {
-            if(taxonBase.isInstanceOf(Synonym.class)){
-                MessagingUtils.warningDialog("Orphaned accepted taxon", TaxonEditorInput.class, "The accepted "
-                        + "taxon of this synonym is not part of any classification. Editing with the "
-                        + "name editor is currently not implemented. Try to edit the taxon with the bulk editor.");
-                return;
-            }
-            else{
-                MessagingUtils.warningDialog("Orphaned Taxon", TaxonEditorInput.class, "This is an orphaned taxon "
-                        + "i.e. a taxon that is not connected to a classification and not having any taxonomic "
-                        + "relationships. Editing of orphaned taxa in the name editor is currently not supported. "
-                        + "Try editing with the bulk editor");
-                return;
-            }
-        }
-               TaxonEditorInput input = TaxonEditorInput
-                               .NewInstanceFromTaxonBase(taxonBaseUuid);
-               if(input!=null && input.getTaxonNode()!=null){
-                   open(input);
-               }
+
+           if (taxonBase != null && taxonBase.isOrphaned()) {
+               if(taxonBase.isInstanceOf(Synonym.class)){
+                   MessagingUtils.warningDialog(Messages.EditorUtil_ORPHAN_ACCEPTED_TAXON, TaxonEditorInputE4.class, Messages.EditorUtil_ORPHAN_ACCEPTED_TAXON_MESSAGE);
+                   return;
+               }
+               else{
+                   MessagingUtils.warningDialog(Messages.EditorUtil_ORPHAN_TAXON, TaxonEditorInputE4.class, Messages.EditorUtil_ORPHAN_TAXON_MESSAGE);
+                   return;
+               }
+           }
+
+           TaxonEditorInputE4 input = TaxonEditorInputE4.NewInstanceFromTaxonBase(taxonBaseUuid);
+           EPartService partService = TaxeditorEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getService(EPartService.class);
+           MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4");
+           partService.showPart(part, PartState.ACTIVATE);
+           TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject();
+           editor.init(input);
        }
 
        /**
@@ -222,13 +187,14 @@ public class EditorUtil extends AbstractUtility {
         * @param parentNodeUuid
         *            a {@link java.util.UUID} object.
         */
-       public static void openEmpty(UUID parentNodeUuid) throws PartInitException {
-               TaxonEditorInput input = TaxonEditorInput
+       public static void openEmptyE4(UUID parentNodeUuid) throws PartInitException {
+               TaxonEditorInputE4 input = TaxonEditorInputE4
                                .NewEmptyInstance(parentNodeUuid);
-               open(input, MultiPageTaxonEditor.ID);
-
-               getActiveMultiPageTaxonEditor().changed(null);
-
+        EPartService partService = TaxeditorEditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getService(EPartService.class);
+        MPart part = partService.createPart("eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4");
+        partService.showPart(part, PartState.ACTIVATE);
+        TaxonNameEditorE4 editor = (TaxonNameEditorE4) part.getObject();
+        editor.init(input);
        }
 
        /**
@@ -254,86 +220,6 @@ public class EditorUtil extends AbstractUtility {
                return isSaving;
        }
 
-       /**
-        * Returns a set of all currently open <code>MultiPageTaxonEditor</code>s.
-        *
-        * @return a {@link java.util.Set} object.
-        */
-       public static Set<IEditorPart> getOpenEditors() {
-               Set<IEditorPart> taxonEditors = new HashSet<IEditorPart>();
-
-               if (getActivePage() != null) {
-                       for (IEditorReference reference : getActivePage()
-                                       .getEditorReferences()) {
-                               IEditorPart editor = reference.getEditor(false);
-                               if (editor instanceof MultiPageTaxonEditor) {
-                                       taxonEditors.add(editor);
-                               }
-                       }
-               }
-
-               return taxonEditors;
-       }
-
-       /**
-        * Returns the currently active taxon editor
-        *
-        * @return the taxon editor that has focus
-        */
-       public static MultiPageTaxonEditor getActiveMultiPageTaxonEditor() {
-               IEditorPart editorPart = getActiveEditor();
-               if (editorPart != null && editorPart instanceof MultiPageTaxonEditor) {
-                       MultiPageTaxonEditor editor = (MultiPageTaxonEditor) editorPart;
-                       editor.getConversationHolder().bind();
-                       return editor;
-               }
-               return null;
-       }
-
-       /**
-        * <p>
-        * getActiveEditorPage
-        * </p>
-        *
-        * @param page
-        *            a {@link eu.etaxonomy.taxeditor.editor.Page} object.
-        * @return a {@link org.eclipse.ui.IEditorPart} object.
-        */
-       public static IEditorPart getActiveEditorPage(Page page) {
-               MultiPageTaxonEditor editor = getActiveMultiPageTaxonEditor();
-
-               return editor != null ? editor.getPage(page) : null;
-       }
-
-       /**
-        * Returns the selection of the currently active taxon editor
-        *
-        * @return a {@link org.eclipse.jface.viewers.ISelection} object.
-        */
-       public static ISelection getCurrentSelection() {
-               if (getActiveMultiPageTaxonEditor() == null) {
-                       return null;
-               } else {
-                       return getActiveMultiPageTaxonEditor().getSite()
-                                       .getSelectionProvider().getSelection();
-               }
-       }
-
-       /**
-        * <p>
-        * getUndoContext
-        * </p>
-        *
-        * @param editor
-        *            a {@link eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor}
-        *            object.
-        * @return a {@link org.eclipse.core.commands.operations.IUndoContext}
-        *         object.
-        */
-       public static IUndoContext getUndoContext(MultiPageTaxonEditor editor) {
-               return editor.getUndoContext();
-       }
-
        /**
         * <p>
         * getUndoContext
@@ -361,9 +247,8 @@ public class EditorUtil extends AbstractUtility {
                if (editor.isDirty()) {
 
                        boolean doSave = MessageDialog
-                                       .openConfirm(shell, "Confirm save",
-                                                       "Warning - this operation will save the editor. This will also save all other unsaved changes " +
-                                                       "in your working editor to the database. Please 'Cancel' if you are not ready to do this.");
+                                       .openConfirm(shell, Messages.EditorUtil_COMFIRM_SAVE,
+                                                       Messages.EditorUtil_CONFIRM_SAVE_MESSAGE);
 
                        if (!doSave) {
                                return false;
@@ -374,6 +259,22 @@ public class EditorUtil extends AbstractUtility {
                return true;
        }
 
+       public static boolean forceUserSaveE4Editor(TaxonNameEditorE4 editor, Shell shell) {
+           if (editor.isDirty()) {
+
+               boolean doSave = MessageDialog
+                       .openConfirm(shell, Messages.EditorUtil_COMFIRM_SAVE,
+                               Messages.EditorUtil_CONFIRM_SAVE_MESSAGE);
+
+               if (!doSave) {
+                   return false;
+               }
+
+               editor.save(AbstractUtility.getMonitor());
+           }
+           return true;
+       }
+
        /**
         * <p>
         * getSelection
@@ -459,17 +360,6 @@ public class EditorUtil extends AbstractUtility {
         return null;
     }
 
-    /**
-     * Opens a taxon editor for the given object if the given object is a valid input.
-     * @param object the object for which the editor will be opened
-     * @throws PartInitException
-     */
-    public static void openTaxonEditor(Object object) throws PartInitException {
-        if(object instanceof TaxonBase<?>){
-            openTaxonBase(((TaxonBase<?>) object).getUuid());
-        }
-    }
-
     public static boolean closeObsoleteEditor(TaxonNode taxonNode, IWorkbenchPage activePage){
         boolean result = true;
         for (IEditorReference ref : activePage.getEditorReferences()) {