Implement Pepes requests
authorm.doering <m.doering@localhost>
Tue, 12 Feb 2008 12:39:05 +0000 (12:39 +0000)
committerm.doering <m.doering@localhost>
Tue, 12 Feb 2008 12:39:05 +0000 (12:39 +0000)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/HomotypicalGroup.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonNameBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/Synonym.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/Taxon.java

index 9ec13da4736d359717575b7166f967f83a3201d5..b52ea3625dcd9ffabece02f7b536b40c48ff5185 100644 (file)
@@ -9,7 +9,9 @@
 
 package eu.etaxonomy.cdm.model.name;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.persistence.Entity;
@@ -22,6 +24,9 @@ import org.hibernate.annotations.CascadeType;
 import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
 import eu.etaxonomy.cdm.model.occurrence.Specimen;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 
 @Entity
 public class HomotypicalGroup extends AnnotatableEntity {
@@ -70,4 +75,23 @@ public class HomotypicalGroup extends AnnotatableEntity {
                td.setHomotypicalGroup(this);
        }
        
+       /**
+        * Retrieves the synonyms of reference sec that are part of this homotypical group.
+        * If other names are part of this group that are not considered synonyms in the respective sec-reference,
+        * then they will not be included in the resultset.
+        * @param sec
+        * @return
+        */
+       public List<Synonym> getSynonymsInGroup(ReferenceBase sec){
+               List<Synonym> result = new ArrayList();
+               for (TaxonNameBase n:this.getTypifiedNames()){
+                       for (Synonym s:n.getSynonyms()){
+                               if (s.getSec().equals(sec)){
+                                       result.add(s);
+                               }
+                       }
+               }
+               // TODO: sort result list according to date first published, see nomenclatural reference
+               return result;
+       }
 }
index b4dacedd87b253e7ecee3c89d29e1ea091da26a5..ecdd04f2306ae59f01c13e6ee1ee8f395753d857 100644 (file)
@@ -14,6 +14,9 @@ import eu.etaxonomy.cdm.model.occurrence.Specimen;
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
+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.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.common.IReferencedEntity;
 import org.apache.log4j.Logger;
@@ -282,4 +285,21 @@ public abstract class TaxonNameBase extends IdentifiableEntity<TaxonNameBase> im
        public boolean parseName(String fullname){
                return false;
        }       
+       
+       /**
+        * Return a set of taxa that use this name
+        * @return
+        */
+       public Set<Taxon> getTaxa(){
+               // TODO: implement this method via bidirectional TaxonBase-NameBase relation or use a DAO instead
+               return null;
+       }
+       /**
+        * Return a set of synonyms that use this name
+        * @return
+        */
+       public Set<Synonym> getSynonyms(){
+               // TODO: implement this method via bidirectional TaxonBase-NameBase relation or use a DAO instead
+               return null;
+       }
 }
\ No newline at end of file
index d96349386f6f6927d04b0c538de5a4cbbffabb30..d7b06382acd0e6caab5b510a8ed3eb77979ded78 100644 (file)
@@ -74,4 +74,20 @@ public class Synonym extends TaxonBase {
                return taxa;
        }
 
+       /**
+        * Return the synonymy relationship type for the relation to a given accepted taxon.
+        * If no relation exists to that taxon return null.
+        * @param t
+        * @return
+        */
+       @Transient
+       public SynonymRelationshipType getRelationType(Taxon t){
+               for (SynonymRelationship rel:getSynonymRelations()){
+                       if (rel.getAcceptedTaxon().equals(t)){
+                               return rel.getType();
+                       }
+               }
+               // TODO: should we raise an error in case no relationship to the taxon exists? 
+               return null;
+       }
 }
\ No newline at end of file
index ee4dae6de065f3049e68229470a923c61682053d..c55025b402bf1c6d860031a3b7d083294c4aa3e0 100644 (file)
@@ -12,6 +12,7 @@ package eu.etaxonomy.cdm.model.taxon;
 
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 
@@ -187,9 +188,8 @@ public class Taxon extends TaxonBase implements Iterable<Taxon>{
         * @param microcitation 
         */
        public void setTaxonomicParent(Taxon parent, ReferenceBase citation, String microcitation){
-               if (parent == null){
-                       throw new NullPointerException("Parent Taxon is 'null'");
-               }else{
+               // TODO: remove previously existing parent relationship!!!
+               if (parent != null){
                        addTaxonRelation(parent, TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN(),citation,microcitation);
                }
        }
@@ -274,4 +274,25 @@ public class Taxon extends TaxonBase implements Iterable<Taxon>{
                   public void remove() { throw new UnsupportedOperationException(); }
        }
        
+       @Transient
+       public HomotypicalGroup getHomotypicGroup(){
+               return this.getName().getHomotypicalGroup();
+       }
+       
+       @Transient
+       public List<Synonym> getHomotypicSynonyms(){
+               return this.getHomotypicGroup().getSynonymsInGroup(this.getSec());
+       }
+       
+       @Transient
+       public List<HomotypicalGroup> getHeterotypicSynonymyGroups(){
+               List<HomotypicalGroup> result = new ArrayList();
+               for (TaxonNameBase n:this.getSynonymNames()){
+                       if (!result.contains(n.getHomotypicalGroup())){
+                               result.add(n.getHomotypicalGroup());
+                       }
+               }
+               // TODO: sort list according to date of first published name within each group
+               return result;
+       }       
 }
\ No newline at end of file