improving loadRankSpecificRootNodes
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / taxon / TaxonomicTree.java
index 7e80f5108d253eaebcfccfeafea85b15a88aa90a..6fbe47eb4c444190619e9f4e92910abf4e7370c2 100644 (file)
@@ -17,6 +17,7 @@ import java.util.Set;
 \r
 import javax.persistence.Entity;\r
 import javax.persistence.FetchType;\r
+import javax.persistence.JoinColumn;\r
 import javax.persistence.ManyToOne;\r
 import javax.persistence.OneToMany;\r
 import javax.persistence.OneToOne;\r
@@ -34,6 +35,7 @@ import org.apache.log4j.Logger;
 import org.hibernate.annotations.Cascade;\r
 import org.hibernate.annotations.CascadeType;\r
 import org.hibernate.envers.Audited;\r
+import org.hibernate.search.annotations.IndexedEmbedded;\r
 \r
 import eu.etaxonomy.cdm.model.common.IReferencedEntity;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
@@ -61,11 +63,11 @@ public class TaxonomicTree extends IdentifiableEntity implements IReferencedEnti
        private static final long serialVersionUID = -753804821474209635L;\r
        private static final Logger logger = Logger.getLogger(TaxonomicTree.class);\r
        \r
-       @XmlElement(name = "name")\r
-       @XmlIDREF\r
-       @XmlSchemaType(name = "IDREF")\r
+       @XmlElement(name = "Name")\r
        @OneToOne(fetch = FetchType.LAZY)\r
        @Cascade({CascadeType.SAVE_UPDATE})\r
+       @JoinColumn(name = "name_id", referencedColumnName = "id")\r
+       @IndexedEmbedded\r
        private LanguageString name;\r
        \r
 //     @XmlElementWrapper(name = "allNodes")\r
@@ -136,12 +138,14 @@ public class TaxonomicTree extends IdentifiableEntity implements IReferencedEnti
         */\r
        public TaxonNode addChildNode(TaxonNode childNode, ReferenceBase citation,\r
                        String microCitation, Synonym synonymToBeUsed) {\r
+               \r
                rootNodes.add(childNode);\r
                childNode.setParent(null);\r
                childNode.setTaxonomicTree(this);\r
                childNode.setReference(citation);\r
                childNode.setMicroReference(microCitation);\r
                childNode.setSynonymToBeUsed(synonymToBeUsed);\r
+               \r
                return childNode;\r
        }\r
 \r
@@ -358,8 +362,8 @@ public class TaxonomicTree extends IdentifiableEntity implements IReferencedEnti
                        //no multiple parents are allowed in the tree\r
                        if (childNode != null && childNode.getParent() != null){\r
                                //...different to the parent taxon  throw exception\r
-                               if (! childNode.getParent().getTaxon().equals(parent) ){\r
-                                       throw new IllegalStateException("The child taxon is already part of the tree but has an other parent taxon than the one than the parent to be added. Child: " + child.toString() + ", new parent:" + parent.toString() + ", old parent: " + childNode.getParent().getTaxon().toString()) ;\r
+                               if ((childNode.getParent() instanceof TaxonNode) && !((TaxonNode)childNode.getParent()).getTaxon().equals(parent) ){\r
+                                       throw new IllegalStateException("The child taxon is already part of the tree but has an other parent taxon than the one than the parent to be added. Child: " + child.toString() + ", new parent:" + parent.toString() + ", old parent: " + ((TaxonNode) childNode.getParent()).getTaxon().toString()) ;\r
                                //... same as the parent taxon do nothing but overwriting citation and microCitation\r
                                }else{\r
                                        handleCitationOverwrite(childNode, citation, microCitation);\r
@@ -475,7 +479,9 @@ public class TaxonomicTree extends IdentifiableEntity implements IReferencedEnti
         * \r
         * @param rank may be null\r
         * @return\r
+        * @deprecated use {@link ITaxonTreeService.loadRankSpecificRootNode} or {@link ITaxonomicTreeDao.loadRankSpecificRootNode} instead\r
         */\r
+       @Deprecated\r
        public List<TaxonNode> getRankSpecificRootNodes(Rank rank) {\r
                List<TaxonNode> baseNodes = new ArrayList<TaxonNode>();\r
                if(rank != null){\r
@@ -511,4 +517,11 @@ public class TaxonomicTree extends IdentifiableEntity implements IReferencedEnti
                }\r
                return rootNodes;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.model.taxon.ITreeNode#hasChildNodes()\r
+        */\r
+       public boolean hasChildNodes() {\r
+               return getRootNodes().size() > 0;\r
+       }\r
 }\r