X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/ee1ed5a9f8e42fa1d763a7994596dc071caaab31..f4142aa7552c37b08fd511f1a6b70816e5426069:/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
index 207b5d2f0..945380745 100644
--- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
+++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
@@ -29,15 +29,22 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
import eu.etaxonomy.taxeditor.model.AbstractUtility;
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+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.MessagingUtils;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
/**
*
@@ -50,77 +57,82 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
* @version 1.0
*/
public class MultiPageTaxonEditor extends FormEditor implements
- IConversationEnabled, IPostOperationEnabled,
- IDirtyMarkableSelectionProvider, IPartContentHasDetails, ISecuredEditor {
-
- /** Constant ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}
*/
- public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
-
- private boolean dirty;
-
- private ConversationHolder conversation;
- private IDataChangeBehavior dataChangeBehavior;
- private IUndoContext undoContext;
-
- private TaxonEditorInput input;
-
- /**
- *
- * Constructor for MultiPageTaxonEditor. - *
- */ - public MultiPageTaxonEditor() { - super(); - undoContext = new UndoContext(); - } - - /** {@inheritDoc} */ - @Override - public void dispose() { - conversation.unregisterForDataStoreChanges(this); - conversation.close(); - super.dispose(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.forms.editor.FormEditor#addPages() - */ - /** {@inheritDoc} */ - @Override - protected void addPages() { - input = (TaxonEditorInput) getEditorInput(); - conversation = input.getConversationHolder(); - conversation.registerForDataStoreChanges(this); - - try { - addPage(Page.NAME.getIndex(), new TaxonNameEditor(this), - getEditorInput()); - // setPageText(Page.NAME.getIndex(), Page.NAME.getTitle()); - - // TODO lazy create - // addPage(Page.DESCRIPTIVE.getIndex(), new - // TaxonDescriptionTreeEditor(this), getEditorInput()); - // setPageText(Page.DESCRIPTIVE.getIndex(), - // Page.DESCRIPTIVE.getTitle()); - - // EditorUtil.showPropertySheet(); - - } catch (PartInitException e) { - AbstractUtility.error(getClass(), e); - } - } - - /** {@inheritDoc} */ - @Override - public void doSave(IProgressMonitor monitor) { - monitor.beginTask("Saving Editor", 4); - try { - if (!conversation.isBound()) { - conversation.bind(); - } - monitor.worked(1); +IPartContentHasFactualData, IConversationEnabled, ICdmEntitySessionEnabled, IPostOperationEnabled, +IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia { + + /** ConstantID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}
*/
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
+
+ private boolean dirty;
+
+ private ICdmEntitySession cdmEntitySession;
+ private ConversationHolder conversation;
+ private IDataChangeBehavior dataChangeBehavior;
+ private IUndoContext undoContext;
+
+ private TaxonEditorInput input;
+
+ /**
+ * + * Constructor for MultiPageTaxonEditor. + *
+ */ + public MultiPageTaxonEditor() { + super(); + undoContext = new UndoContext(); + + } + + /** {@inheritDoc} */ + @Override + public void dispose() { + if(cdmEntitySession != null) { + cdmEntitySession.dispose(); + } + conversation.unregisterForDataStoreChanges(this); + conversation.close(); + super.dispose(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.forms.editor.FormEditor#addPages() + */ + /** {@inheritDoc} */ + @Override + protected void addPages() { + input = (TaxonEditorInput) getEditorInput(); + conversation = input.getConversationHolder(); + conversation.registerForDataStoreChanges(this); + cdmEntitySession.registerForDataStoreChanges(this); + try { + addPage(Page.NAME.getIndex(), new TaxonNameEditor(this), + getEditorInput()); + // setPageText(Page.NAME.getIndex(), Page.NAME.getTitle()); + + // TODO lazy create + // addPage(Page.DESCRIPTIVE.getIndex(), new + // TaxonDescriptionTreeEditor(this), getEditorInput()); + // setPageText(Page.DESCRIPTIVE.getIndex(), + // Page.DESCRIPTIVE.getTitle()); + + // EditorUtil.showPropertySheet(); + + } catch (PartInitException e) { + MessagingUtils.error(getClass(), e); + } + } + + /** {@inheritDoc} */ + @Override + public void doSave(IProgressMonitor monitor) { + monitor.beginTask("Saving Editor", 4); + try { + if (!conversation.isBound()) { + conversation.bind(); + } + monitor.worked(1); for (IEditorPart editorPage : getPages()) { if (editorPage instanceof TaxonNameEditor) { @@ -136,155 +148,158 @@ public class MultiPageTaxonEditor extends FormEditor implements monitor.worked(1); } - // commit the conversation and start a new transaction immediately - conversation.commit(true); - monitor.worked(1); + // commit the conversation and start a new transaction immediately + + input.update(); + conversation.commit(true); + monitor.worked(1); this.setDirty(false); monitor.worked(1); } catch (Exception e) { setFocus(); - AbstractUtility.errorDialog("An error occurred while saving", getClass(), - "An error occurred while saving the editor. Please close and reopen the taxon again.", e); + MessagingUtils.operationDialog(this, e, TaxeditorEditorPlugin.PLUGIN_ID,"saving a taxon", " Please close and reopen the taxon again."); disableEditor(true); } finally { monitor.done(); } - } - - private void disableEditor(boolean isOnError) { - for (IMultiPageTaxonEditorPage editorPage : getPages()) { - if(isOnError){ - editorPage.setOnError(); - }else { - editorPage.setDisabled(); - } - } - conversation.unregisterForDataStoreChanges(this); - conversation.close(); - setDirty(false); - } - - private void setDirty(boolean dirty) { - this.dirty = dirty; - firePropertyChange(PROP_DIRTY); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty() - */ - /** - *- * isDirty - *
- * - * @return a boolean. - */ - @Override + } + + private void disableEditor(boolean isOnError) { + for (IMultiPageTaxonEditorPage editorPage : getPages()) { + if(isOnError){ + editorPage.setOnError(); + }else { + editorPage.setDisabled(); + } + } + cdmEntitySession.unregisterForDataStoreChanges(this); + conversation.unregisterForDataStoreChanges(this); + conversation.close(); + setDirty(false); + } + + private void setDirty(boolean dirty) { + this.dirty = dirty; + firePropertyChange(PROP_DIRTY); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty() + */ + /** + *+ * isDirty + *
+ * + * @return a boolean. + */ + @Override public boolean isDirty() { - return dirty; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged() - */ - /** {@inheritDoc} */ - @Override - public void editorDirtyStateChanged() { - dirty = true; - super.editorDirtyStateChanged(); - } - - /** - * {@inheritDoc} - * - * Checks whether nested editors are calling - *firePropertyChange(PROP_DIRTY)
to signal an edit has taken
- * place before passing property change along to
- * super.handlePropertyChange(int propertyId)
.
- */
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)
- */
- @Override
+ return dirty;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
+ */
+ /** {@inheritDoc} */
+ @Override
+ public void editorDirtyStateChanged() {
+ dirty = true;
+ super.editorDirtyStateChanged();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Checks whether nested editors are calling
+ * firePropertyChange(PROP_DIRTY)
to signal an edit has taken
+ * place before passing property change along to
+ * super.handlePropertyChange(int propertyId)
.
+ */
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)
+ */
+ @Override
protected void handlePropertyChange(int propertyId) {
- if (propertyId == PROP_DIRTY) {
- setDirty(true);
- }
- super.handlePropertyChange(propertyId);
- }
-
- /** {@inheritDoc} */
- @Override
- public void doSaveAs() {
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean isSaveAsAllowed() {
- return false;
- }
-
- /** {@inheritDoc} */
- @Override
- public void init(IEditorSite site, IEditorInput input)
- throws PartInitException {
-
- if (!(input instanceof TaxonEditorInput)) {
+ if (propertyId == PROP_DIRTY) {
+ setDirty(true);
+ }
+ super.handlePropertyChange(propertyId);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void doSaveAs() {
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void init(IEditorSite site, IEditorInput input)
+ throws PartInitException {
+
+ if (!(input instanceof TaxonEditorInput)) {
throw new PartInitException(
- "Invalid Input: Must be TaxonEditorInput");
+ "Invalid Input: Must be TaxonEditorInput");
}
- this.input = (TaxonEditorInput) input;
-
- // try {
- // // Listen for name changes,
- // // change tab for this taxon editor accordingly
- // getTaxon().addPropertyChangeListener("name",
- // new PropertyChangeListener() {
- // public void propertyChange(PropertyChangeEvent e) {
- // setPartName();
- // }
- // });
- // } catch (NullPointerException e) {
- // EditorUtil.warn(getClass(),
- // "Caught an NPE while initing an editor. This is most " +
- // "likely due to the unsuccesful attempt to restore the former " +
- // "state of the application. We ignore this because the workbench " +
- // "will simply be reset.");
- // }
- setPartName();
-
- super.init(site, input);
- }
-
- /**
- * Calls MultiPageEditorPart.setPartName(String partName)
with
- * text appropriate to the state of the taxon: any taxon that has been saved
- * will by necessity have a name to display; a new taxon should display
- * "New taxon" in the editor tab.
- */
- protected void setPartName() {
-
- String partName = null;
- TaxonNameBase, ?> name = getTaxon().getName();
-
- if (name != null) {
- partName = name.getTitleCache();
- }
-
- if (partName == null || partName.equals("")) {
- partName = ("New taxon");
- }
-
- setPartName(partName);
- }
+ this.input = (TaxonEditorInput) input;
+ cdmEntitySession = this.input.getCdmEntitySession();
+
+ // try {
+ // // Listen for name changes,
+ // // change tab for this taxon editor accordingly
+ // getTaxon().addPropertyChangeListener("name",
+ // new PropertyChangeListener() {
+ // public void propertyChange(PropertyChangeEvent e) {
+ // setPartName();
+ // }
+ // });
+ // } catch (NullPointerException e) {
+ // EditorUtil.warn(getClass(),
+ // "Caught an NPE while initing an editor. This is most " +
+ // "likely due to the unsuccesful attempt to restore the former " +
+ // "state of the application. We ignore this because the workbench " +
+ // "will simply be reset.");
+ // }
+ setPartName();
+
+ super.init(site, input);
+ }
+
+ /**
+ * Calls MultiPageEditorPart.setPartName(String partName)
with
+ * text appropriate to the state of the taxon: any taxon that has been saved
+ * will by necessity have a name to display; a new taxon should display
+ * "New taxon" in the editor tab.
+ */
+ protected void setPartName() {
+
+ String partName = null;
+ TaxonNameBase, ?> name = getTaxon().getName();
+
+ if (name != null) {
+ partName = name.getTitleCache();
+ }
+
+ if (partName == null || partName.equals("")) {
+ partName = ("New taxon");
+ }
+
+ setPartName(partName);
+ }
/**
* {@inheritDoc}
@@ -304,84 +319,98 @@ public class MultiPageTaxonEditor extends FormEditor implements
container.refresh();
}
}
+ //refresh part title
+ //TODO: refresh taxon node in taxon navigator
+ setPartName();
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+ */
+ @Override
+ public void forceDirty() {
+ changed(null);
+ }
+
+ /**
+ * The accepted taxon that is the input for this editor
+ *
+ * @return the accepted taxon
+ */
+ public Taxon getTaxon() {
+ return input.getTaxon();
}
- /**
- * The accepted taxon that is the input for this editor
- *
- * @return the accepted taxon
- */
- public Taxon getTaxon() {
- return input.getTaxon();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
- * ()
- */
- /**
- * - * getConversationHolder - *
- * - * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} - * object. - */ - @Override + /* + * (non-Javadoc) + * + * @see + * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder + * () + */ + /** + *+ * getConversationHolder + *
+ * + * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} + * object. + */ + @Override public ConversationHolder getConversationHolder() { - return conversation; - } - - /** - *- * setConversationHolder - *
- * - * @param conversation - * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} - * object. - */ - public void setConversationHolder(ConversationHolder conversation) { - this.conversation = conversation; - } - - /** - *
- * Getter for the field undoContext
.
- *
- * Setter for the field undoContext
.
- *
+ * setConversationHolder + *
+ * + * @param conversation + * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} + * object. + */ + public void setConversationHolder(ConversationHolder conversation) { + this.conversation = conversation; + } + + /** + *
+ * Getter for the field undoContext
.
+ *
+ * Setter for the field undoContext
.
+ *
IEditorPart
implementation by type
- *
- * @param page
- * the page type
- * @return a {@link eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage}
- * object.
- */
- public IMultiPageTaxonEditorPage getPage(Page page) {
- for (IEditorPart editor : this.getPages()) {
- if (editor.getClass().equals(page.getClazz())) {
- return (IMultiPageTaxonEditorPage) editor;
- }
- }
- return null;
- }
-
- /**
- * Return a list of AbstractTaxonEditor
s registered with this
- * MultiPageTaxonEditor
.
- *
- * @return a {@link java.util.List} object.
- */
- public List- * onComplete - *
- * - * @return a boolean. - */ - @Override + /** + * Returns anIEditorPart
implementation by type
+ *
+ * @param page
+ * the page type
+ * @return a {@link eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage}
+ * object.
+ */
+ public IMultiPageTaxonEditorPage getPage(Page page) {
+ for (IEditorPart editor : this.getPages()) {
+ if (editor.getClass().equals(page.getClazz())) {
+ return (IMultiPageTaxonEditorPage) editor;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Return a list of AbstractTaxonEditor
s registered with this
+ * MultiPageTaxonEditor
.
+ *
+ * @return a {@link java.util.List} object.
+ */
+ public List+ * onComplete + *
+ * + * @return a boolean. + */ + @Override public boolean onComplete() { - return false; - } + return false; + } /** * Reloads the data for this */ public void reload() { if (isDirty()) { - AbstractUtility.warningDialog("Editor has unsaved data", getClass(), "This editor can not be " + 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"); @@ -517,22 +546,38 @@ public class MultiPageTaxonEditor extends FormEditor implements editorPart.redraw(); } } catch (Exception e) { - AbstractUtility.errorDialog("Error refreshing editor", getClass(), "Could not refresh this editor", e); + MessagingUtils.messageDialog("Error refreshing editor", getClass(), "Could not refresh this editor", e); } } } - @Override - public String toString() { - return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput()); - } + @Override + public String toString() { + return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput()); + } + + @Override + public boolean permissionsSatisfied() { + IEditorPart activeEditor = getActiveEditor(); + if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){ + return ((ISecuredEditor)activeEditor).permissionsSatisfied(); + } + return true; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() + */ + @Override + public ICdmEntitySession getCdmEntitySession() { + return cdmEntitySession; + } - @Override - public boolean permissionsSatisfied() { - IEditorPart activeEditor = getActiveEditor(); - if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){ - return ((ISecuredEditor)activeEditor).permissionsSatisfied(); - } - return true; - } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List