-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.taxeditor.editor;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.commands.operations.IUndoContext;\r
-import org.eclipse.core.commands.operations.UndoContext;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.forms.editor.FormEditor;\r
-\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
-import eu.etaxonomy.taxeditor.model.DataChangeBridge;\r
-import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;\r
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
-import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;\r
-import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
-\r
-/**\r
- * \r
- * Generates the tabbed editor with <code>TaxonNameEditor</code> on top and tabs for\r
- * "Descriptions", "Concepts", "Geography", etc.\r
- * \r
- * @author p.ciardelli\r
- * @author n.hoffmann\r
- * @created 15.05.2008\r
- * @version 1.0\r
- */\r
-public class MultiPageTaxonEditor extends FormEditor implements IConversationEnabled, IPostOperationEnabled, IDirtyMarkableSelectionProvider, IPartContentHasDetails { \r
- private static final Logger logger = Logger.getLogger(MultiPageTaxonEditor.class);\r
-\r
- public static final String ID = "eu.etaxonomy.taxeditor.editor.multipagetaxonview";\r
-\r
- private boolean dirty;\r
-\r
- private ConversationHolder conversation;\r
- private IDataChangeBehavior dataChangeBehavior;\r
- private IUndoContext undoContext;\r
-\r
- private TaxonEditorInput input;\r
- \r
- public MultiPageTaxonEditor() {\r
- super(); \r
- undoContext = new UndoContext();\r
- }\r
- \r
- @Override\r
- public void dispose() {\r
- conversation.close();\r
- super.dispose(); \r
- conversation.close();\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.forms.editor.FormEditor#addPages()\r
- */\r
- @Override\r
- protected void addPages() {\r
- input = (TaxonEditorInput) getEditorInput();\r
- conversation = input.getConversationHolder();\r
- conversation.registerForDataStoreChanges(this);\r
- \r
- try {\r
- addPage(Page.NAME.getIndex(), new TaxonNameEditor(this), getEditorInput());\r
-// setPageText(Page.NAME.getIndex(), Page.NAME.getTitle());\r
- \r
- // TODO lazy create\r
-// addPage(Page.DESCRIPTIVE.getIndex(), new TaxonDescriptionTreeEditor(this), getEditorInput());\r
-// setPageText(Page.DESCRIPTIVE.getIndex(), Page.DESCRIPTIVE.getTitle());\r
- \r
-// EditorUtil.showPropertySheet();\r
- \r
- } catch (PartInitException e) {\r
- logger.error("Could not create MultiPageTaxonEditor.", e);\r
- }\r
- }\r
- \r
- \r
- @Override\r
- public void doSave(IProgressMonitor monitor) {\r
- monitor.beginTask("Saving Editor", 4);\r
- try{\r
- if( ! conversation.isBound()){\r
- conversation.bind();\r
- }\r
- monitor.worked(1);\r
- \r
- for(IEditorPart editorPage : getPages()){\r
- if(editorPage instanceof TaxonNameEditor){\r
- if(((TaxonNameEditor) editorPage).checkForEmptyNames()){\r
- // abort\r
- return;\r
- }\r
- }\r
- \r
- editorPage.doSave(monitor);\r
- monitor.worked(1);\r
- }\r
- \r
- // commit the conversation and start a new transaction immediately\r
- conversation.commit(true);\r
- monitor.worked(1);\r
- \r
- this.setDirty(false);\r
- monitor.worked(1);\r
- }finally{\r
- monitor.done();\r
- }\r
- }\r
-\r
-\r
- private void setDirty(boolean dirty) {\r
- this.dirty = dirty;\r
- firePropertyChange(PROP_DIRTY);\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty()\r
- */\r
- public boolean isDirty() {\r
- return dirty;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()\r
- */\r
- @Override\r
- public void editorDirtyStateChanged() {\r
- dirty = true;\r
- super.editorDirtyStateChanged();\r
- }\r
- \r
- \r
- /**\r
- * Checks whether nested editors are calling <code>firePropertyChange(PROP_DIRTY)</code>\r
- * to signal an edit has taken place before passing property change along to \r
- * <code>super.handlePropertyChange(int propertyId)</code>.\r
- */\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)\r
- */\r
- protected void handlePropertyChange(int propertyId) {\r
- if (propertyId == PROP_DIRTY) {\r
- setDirty(true);\r
- }\r
- super.handlePropertyChange(propertyId);\r
- }\r
- \r
- @Override\r
- public void doSaveAs() {}\r
-\r
- @Override\r
- public boolean isSaveAsAllowed() {\r
- return false;\r
- }\r
-\r
- @Override\r
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
- \r
- if (!(input instanceof TaxonEditorInput))\r
- throw new PartInitException(\r
- "Invalid Input: Must be TaxonEditorInput");\r
- \r
- this.input = (TaxonEditorInput) input;\r
-\r
- try {\r
- // Listen for name changes, \r
- // change tab for this taxon editor accordingly\r
- getTaxon().addPropertyChangeListener("name",\r
- new PropertyChangeListener() {\r
- public void propertyChange(PropertyChangeEvent e) {\r
- setPartName();\r
- }\r
- });\r
- } catch (NullPointerException e) {\r
- logger.warn("Caught an NPE while initing an editor. This is most " +\r
- "likely due to the unsuccesful attempt to restore the former " +\r
- "state of the application. We ignore this because the workbench " +\r
- "will simply be reset.");\r
- }\r
- setPartName();\r
- \r
- super.init(site, input);\r
- }\r
- \r
- /**\r
- * Calls <code>MultiPageEditorPart.setPartName(String partName)</code>\r
- * with text appropriate to the state of the taxon: any taxon that has \r
- * been saved will by necessity have a name to display; a new taxon \r
- * should display "New taxon" in the editor tab.\r
- */\r
- protected void setPartName() {\r
- \r
- String partName = null;\r
- TaxonNameBase<?, ?> name = getTaxon().getName();\r
- \r
- if (name != null) {\r
- partName = name.getTitleCache();\r
- }\r
- \r
- if (partName == null || partName.equals("")) {\r
- partName = ("New taxon");\r
- }\r
-\r
- setPartName(partName);\r
- }\r
- \r
- /**\r
- * Editor pages call this in their postOperation to notify the MultiPageTaxonEditor \r
- * of unsaved changes\r
- * @param element TODO\r
- */\r
- public void changed(Object element) {\r
-// setDirty(true);\r
- dirty = true;\r
- super.editorDirtyStateChanged();\r
- }\r
- \r
- /**\r
- * The accepted taxon that is the input for this editor\r
- * \r
- * @return the accepted taxon\r
- */\r
- public Taxon getTaxon(){\r
- return input.getTaxon();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
- */\r
- public ConversationHolder getConversationHolder() {\r
- return conversation;\r
- }\r
- \r
- public void setConversationHolder(ConversationHolder conversation){\r
- this.conversation = conversation;\r
- }\r
-\r
-\r
- public IUndoContext getUndoContext() {\r
- return undoContext;\r
- }\r
-\r
- public void setUndoContext(IUndoContext undoContext) {\r
- this.undoContext = undoContext;\r
- }\r
- \r
- @Override\r
- public void setFocus(){\r
- //logger.warn("Setting focus to editor");\r
- // bind the conversation\r
- getConversationHolder().bind();\r
- // pass focus to the active editor page\r
- getActiveEditor().setFocus();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)\r
- */\r
- public void update(CdmDataChangeMap events) {\r
- if(dataChangeBehavior == null){\r
- dataChangeBehavior = new MultiPageTaxonEditorDataChangeBehaviour(this);\r
- }\r
- \r
- DataChangeBridge.handleDataChange(events, dataChangeBehavior);\r
- }\r
-\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation()\r
- */\r
- public boolean postOperation(CdmBase objectAffectedByOperation) {\r
- setDirty(true);\r
- \r
- for(IEditorPart editor : this.getPages()){\r
- if (editor instanceof IPostOperationEnabled) {\r
- ((IPostOperationEnabled) editor).postOperation(objectAffectedByOperation);\r
- } else {\r
- logger.warn("postOperation not enabled for editor " + editor);\r
- }\r
- }\r
- logger.warn("postOperation called on MultiPageTaxonEditor. Can you make it more specific?");\r
- \r
- return false;\r
- }\r
- \r
- /**\r
- * Returns an <code>IEditorPart</code> implementation by type\r
- * \r
- * @param page the page type\r
- * @return\r
- */\r
- public IMultiPageTaxonEditorPage getPage(Page page){\r
- for(IEditorPart editor : this.getPages()){\r
- if(editor.getClass().equals(page.getClazz())){\r
- return (IMultiPageTaxonEditorPage) editor;\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- /**\r
- * Return a list of <code>AbstractTaxonEditor</code>s registered with this \r
- * <code>MultiPageTaxonEditor</code>. \r
- * \r
- * @return\r
- */\r
- public List<IEditorPart> getPages(){\r
- ArrayList<IEditorPart> editors = new ArrayList<IEditorPart>();\r
- for(int i = 0; i < this.getPageCount(); i++){\r
- editors.add(this.getEditor(i));\r
- }\r
- return editors;\r
- }\r
- \r
- /**\r
- * Refreshes a certain page of the MultipageTaxonEditor\r
- * \r
- * @param page\r
- * @return\r
- */\r
- public boolean redraw(Page page){\r
- return redraw(page, true);\r
- }\r
- \r
- /**\r
- * Refreshes a certain page of the MultipageTaxonEditor and\r
- * sets focus to that page\r
- * \r
- * @param page\r
- * @param focus\r
- * @return\r
- */\r
- public boolean redraw(Page page, boolean focus){\r
- IMultiPageTaxonEditorPage editorPage = getPage(page);\r
- return editorPage != null && editorPage.redraw(focus);\r
- }\r
-\r
- public boolean onComplete() {\r
- // TODO Auto-generated method stub\r
- return false;\r
- }\r
-}
\ No newline at end of file
+/**
+* Copyright (C) 2007 EDIT
+* 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;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.commands.operations.UndoContext;
+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.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+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.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.model.DataChangeBridge;
+import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;
+import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
+import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;
+
+/**
+ *
+ * Generates the tabbed editor with <code>TaxonNameEditor</code> on top and tabs for
+ * "Descriptions", "Concepts", "Geography", etc.
+ *
+ * @author p.ciardelli
+ * @author n.hoffmann
+ * @created 15.05.2008
+ * @version 1.0
+ */
+public class MultiPageTaxonEditor extends FormEditor implements IConversationEnabled, IPostOperationEnabled, IDirtyMarkableSelectionProvider, IPartContentHasDetails {
+ private static final Logger logger = Logger.getLogger(MultiPageTaxonEditor.class);
+
+ /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.multipage"{trunked}</code> */
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.multipagetaxonview";
+
+ private boolean dirty;
+
+ private ConversationHolder conversation;
+ private IDataChangeBehavior dataChangeBehavior;
+ private IUndoContext undoContext;
+
+ private TaxonEditorInput input;
+
+ /**
+ * <p>Constructor for MultiPageTaxonEditor.</p>
+ */
+ public MultiPageTaxonEditor() {
+ super();
+ undoContext = new UndoContext();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void dispose() {
+ conversation.close();
+ super.dispose();
+ conversation.close();
+ }
+
+ /* (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) {
+ logger.error("Could not create MultiPageTaxonEditor.", 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){
+ if(((TaxonNameEditor) editorPage).checkForEmptyNames()){
+ // abort
+ return;
+ }
+ }
+
+ editorPage.doSave(monitor);
+ monitor.worked(1);
+ }
+
+ // commit the conversation and start a new transaction immediately
+ conversation.commit(true);
+ monitor.worked(1);
+
+ this.setDirty(false);
+ monitor.worked(1);
+ }finally{
+ monitor.done();
+ }
+ }
+
+
+ private void setDirty(boolean dirty) {
+ this.dirty = dirty;
+ firePropertyChange(PROP_DIRTY);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty()
+ */
+ /**
+ * <p>isDirty</p>
+ *
+ * @return a boolean.
+ */
+ 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 <code>firePropertyChange(PROP_DIRTY)</code>
+ * to signal an edit has taken place before passing property change along to
+ * <code>super.handlePropertyChange(int propertyId)</code>.
+ */
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)
+ */
+ 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))
+ throw new PartInitException(
+ "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) {
+ logger.warn("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 <code>MultiPageEditorPart.setPartName(String partName)</code>
+ * 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}
+ *
+ * Editor pages call this in their postOperation to notify the MultiPageTaxonEditor
+ * of unsaved changes
+ */
+ public void changed(Object element) {
+// setDirty(true);
+ dirty = true;
+ super.editorDirtyStateChanged();
+ }
+
+ /**
+ * 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()
+ */
+ /**
+ * <p>getConversationHolder</p>
+ *
+ * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+ */
+ public ConversationHolder getConversationHolder() {
+ return conversation;
+ }
+
+ /**
+ * <p>setConversationHolder</p>
+ *
+ * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+ */
+ public void setConversationHolder(ConversationHolder conversation){
+ this.conversation = conversation;
+ }
+
+
+ /**
+ * <p>Getter for the field <code>undoContext</code>.</p>
+ *
+ * @return a {@link org.eclipse.core.commands.operations.IUndoContext} object.
+ */
+ public IUndoContext getUndoContext() {
+ return undoContext;
+ }
+
+ /**
+ * <p>Setter for the field <code>undoContext</code>.</p>
+ *
+ * @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();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
+ */
+ /** {@inheritDoc} */
+ public void update(CdmDataChangeMap events) {
+ if(dataChangeBehavior == null){
+ dataChangeBehavior = new MultiPageTaxonEditorDataChangeBehaviour(this);
+ }
+
+ DataChangeBridge.handleDataChange(events, dataChangeBehavior);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation()
+ */
+ /** {@inheritDoc} */
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ setDirty(true);
+
+ for(IEditorPart editor : this.getPages()){
+ if (editor instanceof IPostOperationEnabled) {
+ ((IPostOperationEnabled) editor).postOperation(objectAffectedByOperation);
+ } else {
+ logger.warn("postOperation not enabled for editor " + editor);
+ }
+ }
+ logger.warn("postOperation called on MultiPageTaxonEditor. Can you make it more specific?");
+
+ return false;
+ }
+
+ /**
+ * Returns an <code>IEditorPart</code> 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 <code>AbstractTaxonEditor</code>s registered with this
+ * <code>MultiPageTaxonEditor</code>.
+ *
+ * @return a {@link java.util.List} object.
+ */
+ public List<IEditorPart> getPages(){
+ ArrayList<IEditorPart> editors = new ArrayList<IEditorPart>();
+ for(int i = 0; i < this.getPageCount(); i++){
+ editors.add(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);
+ }
+
+ /**
+ * <p>onComplete</p>
+ *
+ * @return a boolean.
+ */
+ public boolean onComplete() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+}