-// $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;
* @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;
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 {
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
@Override
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
@Override
@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)
/*
* (non-Javadoc)
- *
+ *
* @see
* eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
* ()
/*
* (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
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
*/
@Override
/*
* (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);
+ }
+ }
+ }
}