improve to better fulfill the Comparator contract
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / name / TaxonNameBase.java
index 088abcb3587cb2c747a83af2044f2a3bfaa84ba6..410685fa95723e742dc9b3fc20090fc26156225e 100644 (file)
 package eu.etaxonomy.cdm.model.name;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -1327,30 +1329,7 @@ public abstract class TaxonNameBase<T extends TaxonNameBase<?,?>, S extends INam
         Method method = ReflectionUtils.findMethod(TaxonBase.class, "setName", new Class[] {TaxonNameBase.class});
         ReflectionUtils.makeAccessible(method);
         ReflectionUtils.invokeMethod(method, taxonBase, new Object[] {null});
-        boolean removed = false;
-        
-        if (taxonBases.contains(taxonBase)){
-                removed = taxonBases.remove(taxonBase);
-        }
-        if (!removed){
-              if (!removed && !taxonBases.isEmpty()){
-                      HashSet<TaxonBase> copyTaxonBase = new HashSet<TaxonBase>();
-                      Iterator<TaxonBase> iterator = taxonBases.iterator();
-                      while (iterator.hasNext()){
-                          TaxonBase taxonBaseTest = iterator.next();
-                          if (taxonBaseTest.equals(taxonBase)){
-                                  removed = taxonBases.remove(taxonBaseTest);
-                          }
-                          
-                          
-                       }
-              }
-        }
-        
-        
-       
-        
-        
+     
        
     }
 
@@ -1655,6 +1634,23 @@ public abstract class TaxonNameBase<T extends TaxonNameBase<?,?>, S extends INam
         }
         return getRank().isInfraSpecific();
     }
+    
+    /**
+     * Returns true if this name's rank indicates a rank that aggregates species like species 
+     * aggregates or species groups, false otherwise. This methods currently returns false 
+     * for all user defined ranks.
+     *
+     *@see Rank#isSpeciesAggregate()
+     * 
+     * @return
+     */
+    @Transient
+    public boolean isSpeciesAggregate() {
+        if (rank == null){
+            return false;
+        }
+        return getRank().isSpeciesAggregate();
+    }
 
 
     /**