minor
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / description / FeatureTree.java
index 4ce69aba82b5caf153b6925efdee24d78fbc9168..33f7d0e5fddac28c2951e9fdd34269c12f9f7183 100644 (file)
@@ -10,7 +10,9 @@
 package eu.etaxonomy.cdm.model.description;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 import javax.persistence.Entity;
@@ -20,9 +22,7 @@ import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.log4j.Logger;
@@ -69,8 +69,6 @@ public class FeatureTree extends TermBase {
        //private Set<FeatureNode> nodes = new HashSet<FeatureNode>();
        
        @XmlElement(name = "Root")
-       @XmlIDREF
-       @XmlSchemaType(name="IDREF")
        @OneToOne(fetch = FetchType.LAZY)
        @Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})
        private FeatureNode root;
@@ -85,6 +83,7 @@ public class FeatureTree extends TermBase {
        protected FeatureTree() {
                super();
                root = FeatureNode.NewInstance();
+               root.setFeatureTree(this);
        }
 
        /** 
@@ -191,4 +190,16 @@ public class FeatureTree extends TermBase {
                return result;
        }
        
+       /**
+        * Computes a set of distinct features that are present in this feature tree
+        * 
+        * @return
+        */
+       @Transient
+       public Set<Feature> getDistinctFeatures(){
+               Set<Feature> features = new HashSet<Feature>();
+               
+               return root.getDistinctFeaturesRecursive(features);
+       }
+       
 }
\ No newline at end of file