Merge branch 'develop' into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / KeyEditor.java
index 7b9a605cf3719f445a17a58678363142ff271d39..b6ca9645abd52bb6e75739fd5a5f90b63c2d3fe1 100644 (file)
 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.model.DataChangeBridge;
@@ -32,7 +39,7 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils;
  * @version 1.0
  */
 public class KeyEditor extends FormEditor implements IConversationEnabled,
-               IDirtyMarkable, IPartContentHasDetails {
+               IDirtyMarkable, IPartContentHasDetails, ICdmChangeListener {
 
        public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
 
@@ -42,6 +49,22 @@ 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)
         *
@@ -54,6 +77,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
                        monitor.beginTask("Saving Editor", 1);
                        getConversationHolder().bind();
                        getConversationHolder().commit(true);
+                       polytomousKeyEditorInput.merge();
                        setDirty(false);
                        monitor.worked(1);
                } finally {
@@ -85,6 +109,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
        public void setFocus() {
                getConversationHolder().commit(true);
                getConversationHolder().bind();
+               polytomousKeyEditorInput.bind();
                super.setFocus();
        }
        /*
@@ -181,6 +206,8 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
        public void dispose() {
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
+               polytomousKeyEditorInput.dispose();
+               CdmApplicationState.getCurrentDataChangeService().unregister(this);
                super.dispose();
        }
 
@@ -191,14 +218,13 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
         */
        @Override
        protected void addPages() {
-               AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
-               conversation = input.getConversationHolder();
+               conversation = polytomousKeyEditorInput.getConversationHolder();
                conversation.registerForDataStoreChanges(this);
 
                try {
-                       addPage(0, new PolytomousKeyListEditor(this), input);
+                       addPage(0, new PolytomousKeyListEditor(this), polytomousKeyEditorInput);
                        setPageText(0, "List");
-                       addPage(1, new PolytomousKeyGraphEditor(this), input);
+                       addPage(1, new PolytomousKeyGraphEditor(this), polytomousKeyEditorInput);
                        setPageText(1, "Graph");
                } catch (PartInitException e) {
                        MessagingUtils.error(getClass(), e);
@@ -214,8 +240,21 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
         *
         */
        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);
+            }
+        }
+    }
 }