Merge branch 'develop' into nameEditorE4
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / MultiPageTaxonEditor.java
index 4d23e9495c08a18b8804d805b35db68455be657a..35fa77af252363faa893d3a7576ea3eb4778e653 100644 (file)
@@ -23,14 +23,19 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.editor.FormEditor;
 
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
+import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
@@ -40,6 +45,7 @@ import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
+import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 
@@ -53,12 +59,12 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  * @created 15.05.2008
  * @version 1.0
  */
-public class MultiPageTaxonEditor extends FormEditor implements
-IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled,
-IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
+public class MultiPageTaxonEditor extends FormEditor
+        implements IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled, IDirtyMarkable,
+        IPartContentHasDetails, IPartContentHasSupplementalData, ISecuredEditor, IPartContentHasMedia, ITaxonEditor {
 
     /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
-    public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
+    public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon"; //$NON-NLS-1$
 
     private boolean dirty;
 
@@ -118,10 +124,21 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void pageChange(int newPageIndex) {
+        if(getCurrentPage()==-1){
+            return;
+        }
+        super.pageChange(newPageIndex);
+    }
+
     /** {@inheritDoc} */
     @Override
     public void doSave(IProgressMonitor monitor) {
-        monitor.beginTask("Saving Editor", 4);
+        monitor.beginTask(Messages.MultiPageTaxonEditor_SAVING_EDITOR, 4);
         try {
             if (!conversation.isBound()) {
                 conversation.bind();
@@ -131,9 +148,8 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
             for (IEditorPart editorPage : getPages()) {
                 if (editorPage instanceof TaxonNameEditor) {
                     if (((TaxonNameEditor) editorPage).checkForEmptyNames()) {
-                        MessageDialog.openWarning(AbstractUtility.getShell(), "No Name Specified",
-                                "An attempt was made to save a taxon or synonym with "
-                                        + "an empty name. Operation was cancelled.");
+                        MessageDialog.openWarning(AbstractUtility.getShell(), Messages.MultiPageTaxonEditor_NO_NAME_SPECIFIED,
+                                Messages.MultiPageTaxonEditor_NO_NAME_SPECIFIED_MESSAGE);
                         return;
                     }
                 }
@@ -145,14 +161,17 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
             // commit the conversation and start a new transaction immediately
 
             input.merge();
+
             conversation.commit(true);
+            CdmApplicationState.getCurrentDataChangeService()
+            .fireChangeEvent(new CdmChangeEvent(Action.Update, input.getTaxonNode() , MultiPageTaxonEditor.class), true);
             monitor.worked(1);
 
             this.setDirty(false);
             monitor.worked(1);
         } catch (Exception e) {
             setFocus();
-            MessagingUtils.operationDialog(this, e, TaxeditorEditorPlugin.PLUGIN_ID,"saving a taxon", " Please close and reopen the taxon again.");
+            MessagingUtils.operationDialog(this, e, TaxeditorEditorPlugin.PLUGIN_ID,Messages.MultiPageTaxonEditor_SAVING_TAXON, Messages.MultiPageTaxonEditor_SAVING_TAXON_MESSAGE);
             disableEditor(true);
         } finally {
             monitor.done();
@@ -246,7 +265,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
 
         if (!(input instanceof TaxonEditorInput)) {
             throw new PartInitException(
-                    "Invalid Input: Must be TaxonEditorInput");
+                    Messages.MultiPageTaxonEditor_INVALID_INPUT);
         }
 
         this.input = (TaxonEditorInput) input;
@@ -282,14 +301,14 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
     protected void setPartName() {
 
         String partName = null;
-        TaxonNameBase<?, ?> name = getTaxon().getName();
+        TaxonName name = getTaxon().getName();
 
         if (name != null) {
             partName = name.getTitleCache();
         }
 
-        if (partName == null || partName.equals("")) {
-            partName = ("New taxon");
+        if (partName == null || partName.equals("")) { //$NON-NLS-1$
+            partName = (Messages.MultiPageTaxonEditor_NEW_TAXON);
         }
 
         setPartName(partName);
@@ -317,6 +336,13 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
                 container.refresh();
             }
         }
+        if (element instanceof TaxonRelationship) {
+            TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
+            AbstractGroupedContainer container = page.getContainer(((TaxonRelationship) element).getFromTaxon());
+            if (container != null) {
+                container.refresh();
+            }
+        }
         //refresh part title
         //TODO: refresh taxon node in taxon navigator
         setPartName();
@@ -335,6 +361,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
      *
      * @return the accepted taxon
      */
+    @Override
     public Taxon getTaxon() {
         return input.getTaxon();
     }
@@ -441,10 +468,10 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
             if (editor instanceof IPostOperationEnabled) {
                 ((IPostOperationEnabled) editor).postOperation(objectAffectedByOperation);
             } else {
-                MessagingUtils.warn(getClass(), "postOperation not enabled for editor " + editor);
+                MessagingUtils.warn(getClass(), Messages.MultiPageTaxonEditor_POST_OP_NOT_ENABLED + editor);
             }
         }
-        MessagingUtils.warn(getClass(), "postOperation called on MultiPageTaxonEditor. Can you make it more specific?");
+        MessagingUtils.warn(getClass(), Messages.MultiPageTaxonEditor_POST_OP_CALLED);
 
         return false;
     }
@@ -524,10 +551,7 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
      */
     public void reload() {
         if (isDirty()) {
-            MessagingUtils.warningDialog("Editor has unsaved data", getClass(), "This editor can not be "
-                    + "refreshed because it contains unsaved data. Refreshing "
-                    + "this editor would discard the changes. Please save this editor, "
-                    + "close and reopen it manually in order to get the latest content");
+            MessagingUtils.warningDialog(Messages.MultiPageTaxonEditor_UNSAVED_DATA, getClass(), Messages.MultiPageTaxonEditor_UNSAVED_DATA_MESSAGE);
         } else {
             TaxonEditorInput input = (TaxonEditorInput) getEditorInput();
 
@@ -542,14 +566,14 @@ IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
                     editorPart.redraw();
                 }
             } catch (Exception e) {
-                MessagingUtils.messageDialog("Error refreshing editor", getClass(), "Could not refresh this editor", e);
+                MessagingUtils.messageDialog(Messages.MultiPageTaxonEditor_REFRESH_ERROR, getClass(), Messages.MultiPageTaxonEditor_REFRESH_ERROR_MESSAGE, e);
             }
         }
     }
 
     @Override
     public String toString() {
-        return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput());
+        return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput()); //$NON-NLS-1$
     }
 
     @Override