/*
* TaxonList.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST 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 version 2
* of the License, or (at your option) any later version.
*
* BEAST is distributed in the hope that it will be useful,
* 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 BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package dr.evolution.util;
import dr.util.Identifiable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Interface for a list of taxa.
*
* @version $Id: TaxonList.java,v 1.16 2006/09/05 13:29:34 rambaut Exp $
*
* @author Andrew Rambaut
* @author Alexei Drummond
*/
public interface TaxonList extends Identifiable, Iterable<Taxon> {
/**
* @return a count of the number of taxa in the list.
*/
public int getTaxonCount();
/**
* @return the ith taxon.
*/
public Taxon getTaxon(int taxonIndex);
/**
* @return the ID of the ith taxon.
*/
public String getTaxonId(int taxonIndex);
/**
* returns the index of the taxon with the given id.
*/
int getTaxonIndex(String id);
/**
* returns the index of the given taxon.
*/
int getTaxonIndex(Taxon taxon);
/**
* returns the taxa as a Java list
* @return
*/
List<Taxon> asList();
/**
* @return an object representing the named attributed for the given taxon.
* @param taxonIndex the index of the taxon whose attribute is being fetched.
* @param name the name of the attribute of interest.
*/
public Object getTaxonAttribute(int taxonIndex, String name);
class Utils {
public static boolean hasAttribute(TaxonList taxa, int index, String name) {
return taxa.getTaxonAttribute(index, name) != null;
}
public static Set<String> getTaxonListIdSet(TaxonList taxa) {
Set<String> taxaSet = new HashSet<String>();
for (int i =0; i < taxa.getTaxonCount(); i++) {
taxaSet.add(taxa.getTaxonId(i));
}
return taxaSet;
}
public static int findDuplicateTaxon(TaxonList taxonList) {
Set<String> taxaSet = new HashSet<String>();
for (int i = 0; i < taxonList.getTaxonCount(); i++) {
Taxon taxon = taxonList.getTaxon(i);
if (taxaSet.contains(taxon.getId())) {
return i;
}
taxaSet.add(taxon.getId());
}
return -1;
}
public static boolean areTaxaIdentical(TaxonList taxa1, TaxonList taxa2) {
if (taxa1.getTaxonCount() != taxa2.getTaxonCount()) {
return false;
}
for (int i =0; i < taxa1.getTaxonCount(); i++) {
if (taxa2.getTaxonIndex(taxa1.getTaxon(i)) == -1) {
return false;
}
}
return true;
}
}
class MissingTaxonException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1864895946392309485L;
public MissingTaxonException(String message) { super(message); }
}
}