/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.bio.program.ssbind;
import org.biojava.bio.BioError;
import org.biojava.bio.BioException;
import org.biojava.bio.seq.DNATools;
import org.biojava.bio.seq.ProteinTools;
import org.biojava.bio.symbol.FiniteAlphabet;
/**
* AlphabetResolver
s are helpers which determine which
* type of sequence Alphabet
to expect from a search
* result. Now public to allow use by anyone making custom handlers.
*
* @author Keith James
* @since 1.2
*/
public class AlphabetResolver
{
static final int DNA = 0;
static final int PROTEIN = 1;
/**
* resolveAlphabet
returns an appropriate
* Alphabet
for an arbitrary identifier. The protein
* alphabet returned will include the termination character as
* e.g. BLASTX 6-frame translations are likely to include stops.
*
* @param identifier a String
identifier (recognised
* are BLASTN, BLASTP, BLASTX, TBLASTN, TBLASTX, DNA and PROTEIN).
*
* @return a FiniteAlphabet
.
*
* @exception BioException if the identifier is not known.
*/
public static FiniteAlphabet resolveAlphabet(String identifier)
throws BioException
{
int type = 0;
identifier = identifier.toUpperCase();
if (identifier.indexOf("TBLASTN") != -1)
type = PROTEIN;
else if (identifier.indexOf("TBLASTX") != -1)
type = PROTEIN;
else if (identifier.indexOf("BLASTN") != -1)
type = DNA;
else if (identifier.indexOf("BLASTP") != -1)
type = PROTEIN;
else if (identifier.indexOf("BLASTX") != -1)
type = PROTEIN;
else if (identifier.indexOf("DNA") != -1)
type = DNA;
else if (identifier.indexOf("PROTEIN") != -1)
type = PROTEIN;
else
throw new BioException("Failed to resolve sequence type from identifier '"
+ identifier
+ "'");
switch (type)
{
case DNA:
return DNATools.getDNA();
case PROTEIN:
return ProteinTools.getTAlphabet();
default:
throw new BioError("Internal error in AlphabetResolver: failed to resolve to either DNA or protein alphabets");
}
}
}