// Copyright (C) 2000-2001 Washington University School of Medicine
// and Howard Hughes Medical Institute
// All rights reserved
-//
+//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
-//
+//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
import org.forester.phylogeny.Phylogeny;
import org.forester.phylogeny.PhylogenyNode;
+import org.forester.phylogeny.data.Identifier;
import org.forester.phylogeny.data.Taxonomy;
import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
import org.forester.util.ForesterUtil;
boolean all_have_id = true;
boolean all_have_code = true;
boolean all_have_sn = true;
- boolean all_have_cn = true;
for( final PhylogenyNodeIterator iter = _species_tree.iteratorExternalForward(); iter.hasNext(); ) {
final PhylogenyNode n = iter.next();
if ( n.getNodeData().isHasTaxonomy() ) {
if ( ForesterUtil.isEmpty( tax.getScientificName() ) ) {
all_have_sn = false;
}
- if ( ForesterUtil.isEmpty( tax.getCommonName() ) ) {
- all_have_cn = false;
- }
}
else {
throw new IllegalArgumentException( "species tree node [" + n + "] has no taxonomic data" );
if ( ForesterUtil.isEmpty( tax.getScientificName() ) ) {
all_have_sn = false;
}
- if ( ForesterUtil.isEmpty( tax.getCommonName() ) ) {
- all_have_cn = false;
- }
}
else {
throw new IllegalArgumentException( "gene tree node [" + n + "] has no taxonomic data" );
else if ( all_have_sn ) {
base = TaxonomyComparisonBase.SCIENTIFIC_NAME;
}
- else if ( all_have_cn ) {
- base = TaxonomyComparisonBase.COMMON_NAME;
- }
else {
throw new IllegalArgumentException( "gene tree and species tree have incomparable taxonomies" );
}
* links (sets the field "link" of PhylogenyNode) each external
* PhylogenyNode of gene_tree to the external PhylogenyNode of species_tree
* which has the same species name.
+ * @throws SDIException
*/
- void linkNodesOfG() {
+ void linkNodesOfG() throws SDIException {
final Map<String, PhylogenyNode> speciestree_ext_nodes = new HashMap<String, PhylogenyNode>();
final TaxonomyComparisonBase tax_comp_base = determineTaxonomyComparisonBase();
// Put references to all external nodes of the species tree into a map.
return sb.toString();
}
- private static String taxonomyToString( final PhylogenyNode n, final TaxonomyComparisonBase base ) {
- final Taxonomy tax = n.getNodeData().getTaxonomy();
+ static String taxonomyToString( final PhylogenyNode n, final TaxonomyComparisonBase base ) {
switch ( base ) {
case ID:
- return tax.getIdentifier().getValue();
+ final Identifier id = n.getNodeData().getTaxonomy().getIdentifier();
+ if ( id == null ) {
+ return null;
+ }
+ return id.getValuePlusProvider();
case CODE:
- return tax.getTaxonomyCode();
+ return n.getNodeData().getTaxonomy().getTaxonomyCode();
case SCIENTIFIC_NAME:
- return tax.getScientificName();
- case COMMON_NAME:
- return tax.getCommonName();
+ return n.getNodeData().getTaxonomy().getScientificName();
default:
throw new IllegalArgumentException( "unknown comparison base for taxonomies: " + base );
}
}
- enum TaxonomyComparisonBase {
- ID, CODE, SCIENTIFIC_NAME, COMMON_NAME;
+ public enum TaxonomyComparisonBase {
+ ID {
+
+ @Override
+ public String toString() {
+ return "taxonomy id";
+ }
+ },
+ CODE {
+
+ @Override
+ public String toString() {
+ return "taxonomy code/mnemonic";
+ }
+ },
+ SCIENTIFIC_NAME {
+
+ @Override
+ public String toString() {
+ return "scientific name";
+ }
+ }
}
}