in progress
[jalview.git] / forester / java / src / org / forester / phylogeny / data / Taxonomy.java
index 4f6d146..955e298 100644 (file)
@@ -21,7 +21,7 @@
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 //
 // Contact: phylosoft @ gmail . com
-// WWW: www.phylosoft.org/forester
+// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
 
 package org.forester.phylogeny.data;
 
@@ -34,13 +34,10 @@ import org.forester.io.parsers.nhx.NHXtags;
 import org.forester.io.parsers.phyloxml.PhyloXmlDataFormatException;
 import org.forester.io.parsers.phyloxml.PhyloXmlMapping;
 import org.forester.io.parsers.phyloxml.PhyloXmlUtil;
-import org.forester.util.ForesterConstants;
 import org.forester.util.ForesterUtil;
 
 public class Taxonomy implements PhylogenyData, MultipleUris, Comparable<Taxonomy> {
 
-    
-    
     private String       _scientific_name;
     private String       _common_name;
     private List<String> _synonyms;
@@ -251,10 +248,8 @@ public class Taxonomy implements PhylogenyData, MultipleUris, Comparable<Taxonom
 
     public boolean isEmpty() {
         return ( ( getIdentifier() == null ) && ForesterUtil.isEmpty( getTaxonomyCode() )
-                && ForesterUtil.isEmpty( getCommonName() ) && ForesterUtil.isEmpty( getScientificName() )
-                && ForesterUtil.isEmpty( getRank() ) && ForesterUtil.isEmpty( _uris )
-                && ForesterUtil.isEmpty( getAuthority() ) && ForesterUtil.isEmpty( _synonyms ) && ForesterUtil
-                .isEmpty( _lineage ) );
+                && ForesterUtil.isEmpty( getCommonName() ) && ForesterUtil.isEmpty( getScientificName() ) && ForesterUtil
+                    .isEmpty( _lineage ) );
     }
 
     /**
@@ -292,13 +287,8 @@ public class Taxonomy implements PhylogenyData, MultipleUris, Comparable<Taxonom
         else if ( !ForesterUtil.isEmpty( getCommonName() ) && !ForesterUtil.isEmpty( tax.getCommonName() ) ) {
             return getCommonName().equalsIgnoreCase( tax.getCommonName() );
         }
-        else if ( !ForesterUtil.isEmpty( getScientificName() ) && !ForesterUtil.isEmpty( tax.getCommonName() ) ) {
-            return getScientificName().equalsIgnoreCase( tax.getCommonName() );
-        }
-        else if ( !ForesterUtil.isEmpty( getCommonName() ) && !ForesterUtil.isEmpty( tax.getScientificName() ) ) {
-            return getCommonName().equalsIgnoreCase( tax.getScientificName() );
-        }
-        throw new RuntimeException( "comparison not possible with empty fields" );
+        //throw new RuntimeException( "comparison not possible with empty fields" );
+        return false;
     }
 
     public void setAuthority( final String authority ) {
@@ -328,19 +318,21 @@ public class Taxonomy implements PhylogenyData, MultipleUris, Comparable<Taxonom
         _synonyms = synonyms;
     }
 
-    public void setTaxonomyCode( final String taxonomy_code ) throws PhyloXmlDataFormatException {
-        if ( ForesterConstants.TAXONOMY_CODE_STRICT ) {
-            if ( !ForesterUtil.isEmpty( taxonomy_code )
-                    && !PhyloXmlUtil.TAXOMONY_CODE_PATTERN_STRICT.matcher( taxonomy_code ).matches() ) {
-                throw new PhyloXmlDataFormatException( "illegal taxonomy code: [" + taxonomy_code + "]" );
-            }
+    public void setTaxonomyCode( String taxonomy_code ) throws PhyloXmlDataFormatException {
+        if ( !ForesterUtil.isEmpty( taxonomy_code )
+                && !PhyloXmlUtil.TAXOMONY_CODE_PATTERN.matcher( taxonomy_code ).matches() ) {
+            throw new PhyloXmlDataFormatException( "illegal taxonomy code: [" + taxonomy_code + "]" );
         }
-        else {
-            if ( !ForesterUtil.isEmpty( taxonomy_code )
-                    && !PhyloXmlUtil.TAXOMONY_CODE_PATTERN_LAX.matcher( taxonomy_code ).matches() ) {
-                throw new PhyloXmlDataFormatException( "illegal taxonomy code: [" + taxonomy_code + "]" );
-            }
+        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        //TODO FIXME (added on 13-11-18) remove me eventually
+        if ( taxonomy_code.equals( "ACIBL" ) ) {
+            taxonomy_code = "KORVE";
+        }
+        else if ( taxonomy_code.equals( "PYRKO" ) ) {
+            taxonomy_code = "THEKO";
         }
+        //TODO FIXME (added on 13-11-18) remove me eventually
+        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         _taxonomy_code = taxonomy_code;
     }
 
@@ -434,16 +426,29 @@ public class Taxonomy implements PhylogenyData, MultipleUris, Comparable<Taxonom
         if ( equals( o ) ) {
             return 0;
         }
-        else if ( !ForesterUtil.isEmpty( getScientificName() ) && !ForesterUtil.isEmpty( o.getScientificName() ) ) {
+        if ( ( getIdentifier() != null ) && ( o.getIdentifier() != null )
+                && !ForesterUtil.isEmpty( getIdentifier().getValue() )
+                && !ForesterUtil.isEmpty( o.getIdentifier().getValue() ) ) {
+            final int x = getIdentifier().getValuePlusProvider().compareTo( o.getIdentifier().getValuePlusProvider() );
+            if ( x != 0 ) {
+                return x;
+            }
+        }
+        if ( !ForesterUtil.isEmpty( getScientificName() ) && !ForesterUtil.isEmpty( o.getScientificName() ) ) {
             return getScientificName().compareToIgnoreCase( o.getScientificName() );
         }
-        else if ( !ForesterUtil.isEmpty( getCommonName() ) && !ForesterUtil.isEmpty( o.getCommonName() ) ) {
+        if ( !ForesterUtil.isEmpty( getCommonName() ) && !ForesterUtil.isEmpty( o.getCommonName() ) ) {
             return getCommonName().compareToIgnoreCase( o.getCommonName() );
         }
-        else if ( !ForesterUtil.isEmpty( getTaxonomyCode() ) && !ForesterUtil.isEmpty( o.getTaxonomyCode() ) ) {
+        if ( !ForesterUtil.isEmpty( getTaxonomyCode() ) && !ForesterUtil.isEmpty( o.getTaxonomyCode() ) ) {
             return getTaxonomyCode().compareToIgnoreCase( o.getTaxonomyCode() );
         }
-        return 0;
+        if ( ( getIdentifier() != null ) && ( o.getIdentifier() != null )
+                && !ForesterUtil.isEmpty( getIdentifier().getValue() )
+                && !ForesterUtil.isEmpty( o.getIdentifier().getValue() ) ) {
+            return getIdentifier().getValuePlusProvider().compareTo( o.getIdentifier().getValuePlusProvider() );
+        }
+        return 1;
     }
 
     public void setLineage( final List<String> lineage ) {