.
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / TaxonEditorInput.java
index af04f81b591ff47082752aacad6be95b0a2b6a8b..ecc5c29589f6d334a933332785aa77fd76f63639 100644 (file)
-/**\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.util.Set;\r
-import java.util.UUID;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IMemento;\r
-import org.eclipse.ui.IPersistableElement;\r
-\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
-import eu.etaxonomy.taxeditor.store.preference.PreferencesUtil;\r
-\r
-/**\r
- * @author n.hoffmann\r
- * @created 19.03.2009\r
- * @version 1.0\r
- */\r
-public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(TaxonEditorInput.class);\r
-\r
-       private Taxon taxon;\r
-       private ConversationHolder conversation;\r
-       \r
-       private TaxonEditorInput(Taxon taxon, ConversationHolder conversation){\r
-               this.taxon = taxon;\r
-               this.conversation = conversation;\r
-       }\r
-       \r
-    /**\r
-     * \r
-     * @param uuid\r
-     * @param conversation\r
-     * @return\r
-     */\r
-    public static TaxonEditorInput NewInstance(UUID uuid){\r
-       ConversationHolder conversation = CdmStore.NewTransactionalConversation();\r
-       \r
-               TaxonBase<?> taxonBase = CdmStore.getTaxonService().getTaxonByUuid(uuid);\r
-               \r
-               if(taxonBase == null){\r
-                       MessageDialog.openWarning(EditorUtil.getShell(), "Not yet implemented", "Selected element is not if type TaxonBase.");\r
-                       return null;\r
-               }\r
-               \r
-               Taxon taxon;\r
-               \r
-               if (taxonBase instanceof Synonym) {\r
-                       // TODO: in case of pro parte synonym or any other where we might have multiple\r
-                       // accepted taxa we have to provide a mechanism that can deal with that\r
-                       // TODO set focus to the synonym\r
-                       Set<Taxon> acceptedTaxa = ((Synonym) taxonBase).getAcceptedTaxa();\r
-                       if(acceptedTaxa.size() != 1){\r
-                               String message;\r
-                               if(acceptedTaxa.size() == 0){\r
-                                       message = "There is no accepted taxon for the chosen synonym. ";\r
-                               }else{\r
-                                       message = "Multiple taxa found for the chosen synonym.";\r
-                               }\r
-                               MessageDialog.openWarning(EditorUtil.getShell(), "Not yet implemented", message);\r
-                               return null;\r
-                       }else{\r
-                               taxon = acceptedTaxa.toArray(new Taxon[0])[0];\r
-                       }\r
-               } else {\r
-                       taxon = (Taxon) taxonBase;\r
-               }       \r
-       \r
-       return new TaxonEditorInput(taxon, conversation);\r
-    }\r
-    \r
-    public static TaxonEditorInput NewEmptyInstance(UUID parentTaxonUuid){\r
-       ConversationHolder conversation = CdmStore.NewTransactionalConversation();\r
-               \r
-               TaxonNameBase name = PreferencesUtil.getInstanceOfPreferredNameClass();\r
-               \r
-               Taxon newTaxon = null;\r
-               if(parentTaxonUuid == null){\r
-                       newTaxon = Taxon.NewInstance(name, CdmStore.getDefault().getDefaultSec());\r
-               }else{\r
-                       Taxon parentTaxon = (Taxon) CdmStore.getTaxonService().getTaxonByUuid(parentTaxonUuid);\r
-                       newTaxon = Taxon.NewInstance(name, parentTaxon.getSec());\r
-                       parentTaxon.addTaxonomicChild(newTaxon, null, null);\r
-               }\r
-               // add the new taxon to the editors persistence context\r
-               CdmStore.getTaxonService().save(newTaxon);\r
-               \r
-               return new TaxonEditorInput(newTaxon, conversation);\r
-    }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IEditorInput#exists()\r
-        */\r
-       public boolean exists() {\r
-               return taxon != null;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IEditorInput#getImageDescriptor()\r
-        */\r
-       public ImageDescriptor getImageDescriptor() {\r
-               return null;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IEditorInput#getName()\r
-        */\r
-       public String getName() {\r
-               TaxonNameBase name = taxon.getName();\r
-               if (name == null || name.getTitleCache() == null) {\r
-                       return "New taxon";\r
-               } else {\r
-                       return name.getTitleCache();\r
-               }       \r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IEditorInput#getPersistable()\r
-        */\r
-       public IPersistableElement getPersistable() {\r
-               return this;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IEditorInput#getToolTipText()\r
-        */\r
-       public String getToolTipText() {\r
-               return getName();\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)\r
-        */\r
-       public Object getAdapter(Class adapter) {\r
-\r
-               if (adapter == Taxon.class) {\r
-                       return taxon;\r
-               }\r
-               \r
-               return null;\r
-       }\r
-       \r
-    /**\r
-     * Overrides equals to ensure that a taxon can only be edited by\r
-     * one editor at a time.\r
-     * \r
-     * @return boolean\r
-     */        \r
-       public boolean equals(Object obj) {\r
-               if (obj.getClass().equals(TaxonEditorInput.class) \r
-                               && taxon.equals(((TaxonEditorInput) obj).taxon))\r
-                       return true;\r
-               return false;\r
-       }\r
-\r
-       public Taxon getTaxon(){\r
-               return taxon;\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
-       /*\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
-               // FIXME update the editor input\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IPersistableElement#getFactoryId()\r
-        */\r
-       public String getFactoryId() {\r
-               return TaxonEditorInputFactory.getFactoryId();\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)\r
-        */\r
-       public void saveState(IMemento memento) {\r
-               TaxonEditorInputFactory.saveState(memento, this);\r
-       }\r
-}\r
+/**
+* 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.Set;
+import java.util.UUID;
+
+import org.apache.log4j.Logger;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPersistableElement;
+
+import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+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.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created 19.03.2009
+ * @version 1.0
+ */
+public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement {
+       private static final Logger logger = Logger
+                       .getLogger(TaxonEditorInput.class);
+
+       private Taxon taxon;
+       private ConversationHolder conversation;
+       
+       private TaxonEditorInput(Taxon taxon, ConversationHolder conversation){
+               this.taxon = taxon;
+               this.conversation = conversation;
+       }
+       
+    /**
+     * 
+     * @param uuid
+     * @param conversation
+     * @return
+     */
+    public static TaxonEditorInput NewInstance(UUID uuid){
+       ConversationHolder conversation = CdmStore.NewTransactionalConversation();
+       
+               TaxonBase<?> taxonBase = CdmStore.getTaxonService().getTaxonByUuid(uuid);
+               
+               if(taxonBase == null){
+                       MessageDialog.openWarning(EditorUtil.getShell(), "Not yet implemented", "Selected element is not if type TaxonBase.");
+                       return null;
+               }
+               
+               Taxon taxon;
+               
+               if (taxonBase instanceof Synonym) {
+                       // TODO: in case of pro parte synonym or any other where we might have multiple
+                       // accepted taxa we have to provide a mechanism that can deal with that
+                       // TODO set focus to the synonym
+                       Set<Taxon> acceptedTaxa = ((Synonym) taxonBase).getAcceptedTaxa();
+                       if(acceptedTaxa.size() != 1){
+                               String message;
+                               if(acceptedTaxa.size() == 0){
+                                       message = "There is no accepted taxon for the chosen synonym. ";
+                               }else{
+                                       message = "Multiple taxa found for the chosen synonym.";
+                               }
+                               MessageDialog.openWarning(EditorUtil.getShell(), "Not yet implemented", message);
+                               return null;
+                       }else{
+                               taxon = acceptedTaxa.toArray(new Taxon[0])[0];
+                       }
+               } else {
+                       taxon = (Taxon) taxonBase;
+               }       
+       
+               logger.trace(TaxonEditorInput.class.getSimpleName() + " created");
+               
+       return new TaxonEditorInput(taxon, conversation);
+    }
+    
+    public static TaxonEditorInput NewEmptyInstance(UUID parentTaxonUuid){
+       ConversationHolder conversation = CdmStore.NewTransactionalConversation();
+               
+               TaxonNameBase<?, ?> name = PreferencesUtil.getInstanceOfPreferredNameClass();
+               
+               Taxon newTaxon = null;
+               if(parentTaxonUuid == null){
+                       newTaxon = Taxon.NewInstance(name, CdmStore.getDefault().getDefaultSec());
+               }else{
+                       Taxon parentTaxon = (Taxon) CdmStore.getTaxonService().getTaxonByUuid(parentTaxonUuid);
+                       newTaxon = Taxon.NewInstance(name, parentTaxon.getSec());
+                       parentTaxon.addTaxonomicChild(newTaxon, null, null);
+               }
+               // add the new taxon to the editors persistence context
+               CdmStore.getTaxonService().save(newTaxon);
+               
+               return new TaxonEditorInput(newTaxon, conversation);
+    }
+       
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IEditorInput#exists()
+        */
+       public boolean exists() {
+               return taxon != null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+        */
+       public ImageDescriptor getImageDescriptor() {
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IEditorInput#getName()
+        */
+       public String getName() {
+               TaxonNameBase<?, ?> name = taxon.getName();
+               if (name == null || name.getTitleCache() == null) {
+                       return "New taxon";
+               } else {
+                       return name.getTitleCache();
+               }       
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IEditorInput#getPersistable()
+        */
+       public IPersistableElement getPersistable() {
+               return this;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IEditorInput#getToolTipText()
+        */
+       public String getToolTipText() {
+               return getName();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+        */
+       public Object getAdapter(Class adapter) {
+
+               if (adapter == Taxon.class) {
+                       return taxon;
+               }
+               
+               return null;
+       }
+       
+    /**
+     * Overrides equals to ensure that a taxon can only be edited by
+     * one editor at a time.
+     * 
+     * @return boolean
+     */        
+       public boolean equals(Object obj) {
+               if (obj.getClass().equals(TaxonEditorInput.class) 
+                               && taxon.equals(((TaxonEditorInput) obj).taxon))
+                       return true;
+               return false;
+       }
+
+       public Taxon getTaxon(){
+               return taxon;
+       }
+       
+       /*
+        * (non-Javadoc)
+        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
+        */
+       public ConversationHolder getConversationHolder() {
+               return conversation;
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
+        */
+       public void update(CdmDataChangeMap events) {
+               // FIXME update the editor input
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPersistableElement#getFactoryId()
+        */
+       public String getFactoryId() {
+               return TaxonEditorInputFactory.getFactoryId();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
+        */
+       public void saveState(IMemento memento) {
+               TaxonEditorInputFactory.saveState(memento, this);
+       }
+}