-/**\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);
+ }
+}