Merge branch 'master' of wp5.e-taxonomy.eu:/var/git/taxeditor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / TaxonEditorInput.java
index 7e0c39fd94278274461bcba71bdbd15e97d761e8..5452a0458934f0005106036673d3807183766aed 100644 (file)
@@ -1,8 +1,8 @@
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* 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.
 */
@@ -23,8 +23,9 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.taxon.ITreeNode;
+import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
@@ -33,9 +34,11 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
+
 /**
  * <p>TaxonEditorInput class.</p>
  *
@@ -45,21 +48,21 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
 public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement {
 
-       private ConversationHolder conversation;
-       
-       private TaxonNode taxonNode;
+       private final ConversationHolder conversation;
+
+       private final TaxonNode taxonNode;
 
        private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
-       
+
        private TaxonBase initiallySelectedTaxonBase;
-       
+
        private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){
                this.conversation = conversation;
                this.taxonNode = taxonNode;
        }
-       
 
-       
+
+
        /**
         * <p>NewInstance</p>
         *
@@ -75,26 +78,26 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                        throw e;
                }
        }
-       
+
     /**
-     * 
+     *
      * @param taxonNodeUuid
      * @param conversation
      * @return
      */
     private static TaxonEditorInput NewInstance(UUID taxonNodeUuid, ConversationHolder conversation){
-       
-       
+
+
        TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, null);
-               
+
                if(taxonNode == null){
-                       EditorUtil.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase.");
+                       MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not of type TaxonNode but [null].");
                        return null;
-               }       
-               
+               }
+
        return new TaxonEditorInput(taxonNode, conversation);
     }
-    
+
     /**
      * <p>NewInstanceFromTaxonBase</p>
      *
@@ -103,42 +106,45 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
      */
     public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){
        ConversationHolder conversation = CdmStore.createConversation();
-       
+
        TaxonEditorInput input = null;
-       
+
        TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid);
-       
-       if(taxonBase instanceof Taxon){
-               Taxon taxon = (Taxon) taxonBase;
-               
-               if (taxon.isMisapplication()){
-                       // TODO get accepted taxon
-                       EditorUtil.info("trying to open Mispplied Name ");
-                       
-                       Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
-                       Set<TaxonRelationship> relations = taxon.getRelationsFromThisTaxon();
-                       for(TaxonRelationship relation : relations){
-                               if(relation.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){
-                                       acceptedTaxa.add(relation.getToTaxon());
-                               }
-                       }
-                       input =  getInputForMultipleTaxa(conversation, acceptedTaxa);
-                       
-               }else{
-                       input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
-               }
-       }else if(taxonBase instanceof Synonym){
-               Synonym synonym = (Synonym) taxonBase;
-               
-               Set<Taxon> taxa = synonym.getAcceptedTaxa();
-               input = getInputForMultipleTaxa(conversation, taxa);
+       if (taxonBase != null){
+               if(taxonBase.isInstanceOf(Taxon.class)){
+                       Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class);
+
+                       if (taxon.getTaxonNodes().size() == 0 && taxon.isMisapplication()){
+                               // TODO get accepted taxon
+                               MessagingUtils.info("trying to open misapplied Name ");
+
+                               Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
+                               Set<TaxonRelationship> relations = taxon.getRelationsFromThisTaxon();
+                               for(TaxonRelationship relation : relations){
+                                       if(relation.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){
+                                               acceptedTaxa.add(relation.getToTaxon());
+                                       }
+                               }
+                               input =  getInputForMultipleTaxa(conversation, acceptedTaxa);
+
+                       }else{
+                               input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes());
+                       }
+               }else if(taxonBase instanceof Synonym){
+                       Synonym synonym = (Synonym) taxonBase;
+
+                       Set<Taxon> taxa = synonym.getAcceptedTaxa();
+                       input = getInputForMultipleTaxa(conversation, taxa);
+               }
+               if (input != null){
+                       input.setInitiallySelectedTaxonBase(taxonBase);
+               }
        }
-       
-       input.setInitiallySelectedTaxonBase(taxonBase);
-       
+
+
        return input;
     }
-    
+
        private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> taxonNodes){
        if(taxonNodes.size() == 1){
                TaxonNode taxonNode = taxonNodes.iterator().next();
@@ -146,15 +152,15 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        }else if(taxonNodes.size() > 1){
                        TaxonNode taxonNode = ChooseFromMultipleTaxonNodesDialog.choose(taxonNodes);
                        if(taxonNode != null){
-                               return NewInstance(taxonNode.getUuid(), conversation);                  
+                               return NewInstance(taxonNode.getUuid(), conversation);
                        }
                }else if(taxonNodes.size() == 0){
                        // this is an undesired state
-                       EditorUtil.warningDialog("Incorrect state", TaxonEditorInput.class, "The accepted taxon is not part of any classification. This should not have happened.");
+                       MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "The accepted taxon is not part of any classification. This should not have happened.");
                }
        return null;
     }
-    
+
     private static TaxonEditorInput getInputForMultipleTaxa(ConversationHolder conversation, Set<Taxon> taxa){
        if(taxa.size() == 1){
                Taxon taxon = taxa.iterator().next();
@@ -168,12 +174,12 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                        return getInputForMultipleNodes(conversation, taxonNodes);
                }else if(taxa.size() == 0){
                        // this is an undesired state
-                       EditorUtil.warningDialog("Incorrect state", TaxonEditorInput.class, "Trying to open accepted taxon for a synonym or misapplication but" +
+                       MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "Trying to open accepted taxon for a synonym or misapplication but" +
                                        " no accepted taxa are present. This should not have happened.");
                }
        return null;
     }
-    
+
     /**
      * <p>NewEmptyInstance</p>
      *
@@ -182,19 +188,19 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
      */
     public static TaxonEditorInput NewEmptyInstance(UUID parentNodeUuid){
        ConversationHolder conversation = CdmStore.createConversation();
-               
+
                TaxonNameBase<?, ?> name = PreferencesUtil.getPreferredNomenclaturalCode().getNewTaxonNameInstance(null);
-               ITreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid);
-               
+               ITaxonTreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid);
+
                Taxon newTaxon = Taxon.NewInstance(name, parentNode.getReference());
-               TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference(), null);
-               
+               TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference());
+
                // add the new taxon to the editors persistence context
                UUID newTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).save(newTaxonNode);
-               
+
                return new TaxonEditorInput(newTaxonNode, conversation);
     }
-       
+
        /* (non-Javadoc)
         * @see org.eclipse.ui.IEditorInput#exists()
         */
@@ -203,7 +209,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a boolean.
         */
-       public boolean exists() {
+       @Override
+    public boolean exists() {
                return taxonNode != null;
        }
 
@@ -215,7 +222,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object.
         */
-       public ImageDescriptor getImageDescriptor() {
+       @Override
+    public ImageDescriptor getImageDescriptor() {
                return null;
        }
 
@@ -227,7 +235,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link java.lang.String} object.
         */
-       public String getName() {
+       @Override
+    public String getName() {
                if(getTaxon() == null){
                        return null;
                }
@@ -236,7 +245,7 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
                        return "New taxon";
                } else {
                        return name.getTitleCache();
-               }       
+               }
        }
 
        /* (non-Javadoc)
@@ -247,7 +256,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link org.eclipse.ui.IPersistableElement} object.
         */
-       public IPersistableElement getPersistable() {
+       @Override
+    public IPersistableElement getPersistable() {
 //             if(CdmStore.isActive()){
 //                     TaxonNode test = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid());
 //                     boolean isPersistable = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()) != null;
@@ -266,7 +276,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link java.lang.String} object.
         */
-       public String getToolTipText() {
+       @Override
+    public String getToolTipText() {
                return getName();
        }
 
@@ -274,27 +285,29 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
         */
        /** {@inheritDoc} */
-       public Object getAdapter(Class adapter) {
+       @Override
+    public Object getAdapter(Class adapter) {
 
                if (adapter == Taxon.class) {
                        return taxonNode.getTaxon();
                }
-               
+
                if (adapter == TaxonNode.class) {
                        return taxonNode;
                }
-               
+
                return null;
        }
-       
+
        /**
         * {@inheritDoc}
         *
         * Overrides equals to ensure that a taxon can only be edited by
         * one editor at a time.
         */
-       public boolean equals(Object obj) {
-               if (TaxonEditorInput.class.equals(obj.getClass()) 
+       @Override
+    public boolean equals(Object obj) {
+               if (TaxonEditorInput.class.equals(obj.getClass())
                                && getTaxon() != null
                                && getTaxon().equals(((TaxonEditorInput) obj).getTaxon())){
                        if(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase() != null){
@@ -313,7 +326,7 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        public Taxon getTaxon(){
                return taxonNode.getTaxon();
        }
-       
+
        /**
         * <p>Getter for the field <code>taxonNode</code>.</p>
         *
@@ -322,7 +335,7 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        public TaxonNode getTaxonNode() {
                return taxonNode;
        }
-       
+
        /*
         * (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
@@ -332,7 +345,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
         */
-       public ConversationHolder getConversationHolder() {
+       @Override
+    public ConversationHolder getConversationHolder() {
                return conversation;
        }
 
@@ -341,11 +355,12 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
         */
        /** {@inheritDoc} */
-       public void update(CdmDataChangeMap events) {
+       @Override
+    public void update(CdmDataChangeMap events) {
                if(dataChangeBehavior == null){
                        dataChangeBehavior = new TaxonEditorInputDataChangeBehaviour(this);
                }
-               
+
                DataChangeBridge.handleDataChange(events, dataChangeBehavior);
        }
 
@@ -357,7 +372,8 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         *
         * @return a {@link java.lang.String} object.
         */
-       public String getFactoryId() {
+       @Override
+    public String getFactoryId() {
                return TaxonEditorInputFactory.getFactoryId();
        }
 
@@ -365,11 +381,12 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
         * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento)
         */
        /** {@inheritDoc} */
-       public void saveState(IMemento memento) {
+       @Override
+    public void saveState(IMemento memento) {
                TaxonEditorInputFactory.saveState(memento, this);
        }
 
-    
+
     /**
      * <p>Setter for the field <code>initiallySelectedTaxonBase</code>.</p>
      *
@@ -387,7 +404,7 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe
        public TaxonBase getInitiallySelectedTaxonBase() {
                return initiallySelectedTaxonBase;
        }
-       
+
        @Override
        public String toString() {
                return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon());