X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/f694f278abb935c14f4b4231526a724213d24de5..9aae5c57b7acce97f0d0c9c709a94a0666bc989f:/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 164ed0037..e58a897b2 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 @@ -54,77 +54,79 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; * @version 1.0 */ public class MultiPageTaxonEditor extends FormEditor implements - IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled, - IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia { - - /** 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) { - 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); +IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled, +IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia { + + /** 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() { + input.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) { + 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) { @@ -140,9 +142,11 @@ 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.merge(); + conversation.commit(true); + monitor.worked(1); this.setDirty(false); monitor.worked(1); @@ -153,141 +157,143 @@ public class MultiPageTaxonEditor extends FormEditor implements } 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(); + } + } + + 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(); } - 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); - } + if (partName == null || partName.equals("")) { + partName = ("New taxon"); + } + + setPartName(partName); + } /** * {@inheritDoc} @@ -307,6 +313,9 @@ public class MultiPageTaxonEditor extends FormEditor implements container.refresh(); } } + //refresh part title + //TODO: refresh taxon node in taxon navigator + setPartName(); } /* (non-Javadoc) @@ -317,82 +326,83 @@ public class MultiPageTaxonEditor extends FormEditor implements changed(null); } - /** - * 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 + /** + * 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 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. - *

- * - * @return a {@link org.eclipse.core.commands.operations.IUndoContext} - * object. - */ - public IUndoContext getUndoContext() { - return undoContext; - } - - /** - *

- * Setter for the field undoContext. - *

- * - * @param undoContext - * a {@link org.eclipse.core.commands.operations.IUndoContext} - * object. - */ - public void setUndoContext(IUndoContext undoContext) { - this.undoContext = undoContext; - } - - /** {@inheritDoc} */ - @Override - public void setFocus() { - // logger.warn("Setting focus to editor"); - // bind the conversation - getConversationHolder().bind(); - // pass focus to the active editor page - getActiveEditor().setFocus(); - } + 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. + *

+ * + * @return a {@link org.eclipse.core.commands.operations.IUndoContext} + * object. + */ + public IUndoContext getUndoContext() { + return undoContext; + } + + /** + *

+ * Setter for the field undoContext. + *

+ * + * @param undoContext + * a {@link org.eclipse.core.commands.operations.IUndoContext} + * object. + */ + public void setUndoContext(IUndoContext undoContext) { + this.undoContext = undoContext; + } + + /** {@inheritDoc} */ + @Override + public void setFocus() { + // logger.warn("Setting focus to editor"); + // bind the conversation + getConversationHolder().bind(); + input.bind(); + // pass focus to the active editor page + getActiveEditor().setFocus(); + } /* * (non-Javadoc) @@ -421,7 +431,7 @@ public class MultiPageTaxonEditor extends FormEditor implements /** {@inheritDoc} */ @Override public boolean postOperation(CdmBase objectAffectedByOperation) { - setDirty(true); + setDirty(true); for (IEditorPart editor : this.getPages()) { if (editor instanceof IPostOperationEnabled) { @@ -435,75 +445,75 @@ public class MultiPageTaxonEditor extends FormEditor implements return false; } - /** - * Returns an 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 AbstractTaxonEditors registered with this - * MultiPageTaxonEditor. - * - * @return a {@link java.util.List} object. - */ - public List getPages() { - ArrayList editors = new ArrayList(); - for (int i = 0; i < this.getPageCount(); i++) { - - editors.add((IMultiPageTaxonEditorPage) this.getEditor(i)); - } - return editors; - } - - /** - * Refreshes a certain page of the MultipageTaxonEditor - * - * @param page - * a {@link eu.etaxonomy.taxeditor.editor.Page} object. - * @return a boolean. - */ - public boolean redraw(Page page) { - return redraw(page, true); - } - - /** - * Refreshes a certain page of the MultipageTaxonEditor and sets focus to - * that page - * - * @param page - * a {@link eu.etaxonomy.taxeditor.editor.Page} object. - * @param focus - * a boolean. - * @return a boolean. - */ - public boolean redraw(Page page, boolean focus) { - IMultiPageTaxonEditorPage editorPage = getPage(page); - return editorPage != null && editorPage.redraw(focus); - } - - /** - *

- * onComplete - *

- * - * @return a boolean. - */ - @Override + /** + * Returns an 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 AbstractTaxonEditors registered with this + * MultiPageTaxonEditor. + * + * @return a {@link java.util.List} object. + */ + public List getPages() { + ArrayList editors = new ArrayList(); + for (int i = 0; i < this.getPageCount(); i++) { + + editors.add((IMultiPageTaxonEditorPage) this.getEditor(i)); + } + return editors; + } + + /** + * Refreshes a certain page of the MultipageTaxonEditor + * + * @param page + * a {@link eu.etaxonomy.taxeditor.editor.Page} object. + * @return a boolean. + */ + public boolean redraw(Page page) { + return redraw(page, true); + } + + /** + * Refreshes a certain page of the MultipageTaxonEditor and sets focus to + * that page + * + * @param page + * a {@link eu.etaxonomy.taxeditor.editor.Page} object. + * @param focus + * a boolean. + * @return a boolean. + */ + public boolean redraw(Page page, boolean focus) { + IMultiPageTaxonEditorPage editorPage = getPage(page); + return editorPage != null && editorPage.redraw(focus); + } + + /** + *

+ * onComplete + *

+ * + * @return a boolean. + */ + @Override public boolean onComplete() { - return false; - } + return false; + } /** * Reloads the data for this @@ -533,17 +543,26 @@ public class MultiPageTaxonEditor extends FormEditor implements } } - @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.model.IPartContentHasMedia#canAttachMedia() + */ + @Override + public boolean canAttachMedia() { + return true; + } - @Override - public boolean permissionsSatisfied() { - IEditorPart activeEditor = getActiveEditor(); - if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){ - return ((ISecuredEditor)activeEditor).permissionsSatisfied(); - } - return true; - } }