Merge branch 'release/4.6.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / KeyEditor.java
index 51b81499f6f5afef860297b04345e4d8e1a4167b..1cd36d71140333db6215542671b71fa2194de4de 100644 (file)
@@ -1,9 +1,8 @@
-// $Id$
 /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * 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.editor.key;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorPart;
+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.ICdmChangeListener;
 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.description.PolytomousKey;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
+import eu.etaxonomy.taxeditor.editor.l10n.Messages;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
@@ -32,9 +39,9 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
  * @version 1.0
  */
 public class KeyEditor extends FormEditor implements IConversationEnabled,
-               IDirtyMarkableSelectionProvider, IPartContentHasDetails {
+               IDirtyMarkable, IPartContentHasDetails, ICdmChangeListener {
 
-       public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
+       public static final String ID = "eu.etaxonomy.taxeditor.editor.key"; //$NON-NLS-1$
 
        private ConversationHolder conversation;
 
@@ -42,18 +49,35 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        private KeyEditorDataChangeBehaviour dataChangeBehavior;
 
+       private PolytomousKeyEditorInput polytomousKeyEditorInput;
+
+       /*
+     * (non-Javadoc)
+     *
+     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
+     * org.eclipse.ui.IEditorInput)
+     */
+    @Override
+    public void init(IEditorSite site, IEditorInput input)
+            throws PartInitException {
+        polytomousKeyEditorInput = (PolytomousKeyEditorInput)input;
+        CdmApplicationState.getCurrentDataChangeService().register(this);
+        super.init(site, input);
+    }
+
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
         * IProgressMonitor)
         */
        @Override
        public void doSave(IProgressMonitor monitor) {
                try {
-                       monitor.beginTask("Saving Editor", 1);
+                       monitor.beginTask(Messages.KeyEditor_SAVING, 1);
                        getConversationHolder().bind();
                        getConversationHolder().commit(true);
+                       polytomousKeyEditorInput.merge();
                        setDirty(false);
                        monitor.worked(1);
                } finally {
@@ -63,7 +87,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#doSaveAs()
         */
        @Override
@@ -73,7 +97,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
         */
        @Override
@@ -83,12 +107,14 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        @Override
        public void setFocus() {
+               getConversationHolder().commit(true);
                getConversationHolder().bind();
+               polytomousKeyEditorInput.bind();
                super.setFocus();
        }
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
         * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
@@ -103,7 +129,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
         * ()
@@ -115,23 +141,33 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
         * java.lang.Object)
         */
        @Override
        public void changed(Object element) {
-               editorDirtyStateChanged();
+           if (element != null){
+               editorDirtyStateChanged();
+           }
                IEditorPart activeEditor = getActiveEditor();
-               if (activeEditor instanceof IDirtyMarkableSelectionProvider) {
-                       ((IDirtyMarkableSelectionProvider) activeEditor).changed(element);
+               if (activeEditor instanceof IDirtyMarkable) {
+                       ((IDirtyMarkable) activeEditor).changed(element);
                }
        }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+     */
+    @Override
+    public void forceDirty() {
+        changed(null);
+    }
+
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
         */
        @Override
@@ -155,7 +191,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
         */
        @Override
@@ -165,48 +201,62 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
         */
        @Override
        public void dispose() {
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
+               polytomousKeyEditorInput.dispose();
+               CdmApplicationState.getCurrentDataChangeService().unregister(this);
                super.dispose();
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
         */
        @Override
        protected void addPages() {
-               AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
-               conversation = input.getConversationHolder();
+               conversation = polytomousKeyEditorInput.getConversationHolder();
                conversation.registerForDataStoreChanges(this);
 
                try {
-                       addPage(0, new PolytomousKeyListEditor(this), input);
-                       setPageText(0, "List");
-                       addPage(1, new PolytomousKeyGraphEditor(this), input);
-                       setPageText(1, "Graph");
+                       addPage(0, new PolytomousKeyListEditor(this), polytomousKeyEditorInput);
+                       setPageText(0, Messages.KeyEditor_LIST);
+                       addPage(1, new PolytomousKeyGraphEditor(this), polytomousKeyEditorInput);
+                       setPageText(1, Messages.KeyEditor_GRAPH);
                } catch (PartInitException e) {
                        MessagingUtils.error(getClass(), e);
                }
 
-               
+
 
                setPartName();
 
        }
 
        /**
-        * 
+        *
         */
        public void setPartName() {
-               AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
-               PolytomousKey key = (PolytomousKey) input.getKey();
+               PolytomousKey key = polytomousKeyEditorInput.getKey();
                setPartName(key.getTitleCache());
        }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent)
+     */
+    @Override
+    public void onChange(CdmChangeEvent event) {
+        editorDirtyStateChanged();
+        IEditorPart activeEditor = getActiveEditor();
+        if (activeEditor instanceof IDirtyMarkable) {
+            for(CdmBase cdmBase : event.getChangedObjects()) {
+                ((IDirtyMarkable) activeEditor).changed(cdmBase);
+            }
+        }
+    }
 }