had to rename the packages to make them compliant with buckminster
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / MultiPageTaxonEditor.java
diff --git a/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java b/taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
deleted file mode 100644 (file)
index 7725380..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-/**
-* 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.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.commands.operations.UndoContext;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.MessageDialog;
-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.model.taxon.TaxonBase;
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
-import eu.etaxonomy.taxeditor.editor.name.container.AbstractGroupedContainer;
-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.operation.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 { 
-
-       /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
-       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;
-       
-       /**
-        * <p>Constructor for MultiPageTaxonEditor.</p>
-        */
-       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) {
-                       EditorUtil.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){
-                                       if(((TaxonNameEditor) editorPage).checkForEmptyNames()){
-                                               MessageDialog.openWarning(EditorUtil.getShell(), "No Name Specified", "An attempt was made to save a taxon or synonym with " +
-                                               "an empty name. Operation was cancelled.");
-                                               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) {
-//                     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 <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();
-               if(element instanceof TaxonBase){
-                       TaxonNameEditor page = (TaxonNameEditor) getPage(Page.NAME);
-                       AbstractGroupedContainer container = page.getContainer((TaxonBase) element);
-                       if(container != null){
-                               container.refresh();
-                       }
-               }
-    }
-    
-    /**
-     * 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 {
-                               EditorUtil.warn(getClass(), "postOperation not enabled for editor " + editor);
-                       }
-               }
-               EditorUtil.warn(getClass(), "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<IMultiPageTaxonEditorPage> getPages(){
-               ArrayList<IMultiPageTaxonEditorPage> editors = new ArrayList<IMultiPageTaxonEditorPage>();
-               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);
-       }
-
-       /**
-        * <p>onComplete</p>
-        *
-        * @return a boolean.
-        */
-       public boolean onComplete() {
-               return false;
-       }
-
-       /**
-        * Reloads the data for this 
-        */
-       public void reload() {
-               if(isDirty()){
-                       EditorUtil.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");
-               }else{
-                       TaxonEditorInput input = (TaxonEditorInput) getEditorInput();
-                       
-                       UUID uuid = input.getTaxonNode().getUuid();
-                       
-                       conversation.clear();
-                       
-                       try {
-                               TaxonEditorInput newInput = TaxonEditorInput.NewInstance(uuid);
-                               setInput(newInput);
-                               for(IMultiPageTaxonEditorPage editorPart : getPages()){
-                                       editorPart.redraw();
-                               }
-                       } catch (Exception e) {
-                               EditorUtil.errorDialog("Error refreshing editor", getClass(), "Could not refresh this editor", e);
-                       }
-               }
-       }
-}