/*
* Genoogle: Similar DNA Sequences Searching Engine and Tools. (http://genoogle.pih.bio.br)
* Copyright (C) 2008,2009 Felipe Fernandes Albrecht (felipe.albrecht@gmail.com)
*
* For further information check the LICENSE file.
*/
package bio.pih.genoogle.encoder;
import org.apache.log4j.Logger;
import bio.pih.genoogle.seq.Alphabet;
import bio.pih.genoogle.seq.AminoAcidAlphabet;
import bio.pih.genoogle.seq.DNAAlphabet;
import bio.pih.genoogle.seq.RNAAlphabet;
import bio.pih.genoogle.seq.Reduced_AA_8_Alphabet;
public class SequenceEncoderFactory {
static Logger logger = Logger.getLogger(SequenceEncoderFactory.class.getCanonicalName());
private static DNASequenceEncoder[] dnaEncoders = new DNASequenceEncoder[17];
private static RNASequenceEncoder[] rnaEncoders = new RNASequenceEncoder[17];
private static AminoAcidsSequenceEncoder[] aaEncoder = new AminoAcidsSequenceEncoder[17];
private static Reduced_AA_8_SequenceEncoder[] reduced_AA_8 = new Reduced_AA_8_SequenceEncoder[17];
/**
* @param subSequenceLength
* length of the subSequences.
* @return singleton of the {@link DNASequenceEncoderToInteger}
*/
public static SequenceEncoder getEncoder(Alphabet alphabet, int subSequenceLength) {
if (subSequenceLength < 1 || subSequenceLength > 16) {
throw new IndexOutOfBoundsException("Invalid sub sequence length '" + subSequenceLength + "'");
}
if (alphabet == RNAAlphabet.SINGLETON) {
rnaEncoders[subSequenceLength] = new RNASequenceEncoder(subSequenceLength);
return rnaEncoders[subSequenceLength];
}
if (alphabet == DNAAlphabet.SINGLETON) {
dnaEncoders[subSequenceLength] = new DNASequenceEncoder(subSequenceLength);
return dnaEncoders[subSequenceLength];
}
if (alphabet == AminoAcidAlphabet.SINGLETON) {
aaEncoder[subSequenceLength] = new AminoAcidsSequenceEncoder(subSequenceLength);
return aaEncoder[subSequenceLength];
}
if (alphabet == Reduced_AA_8_Alphabet.SINGLETON) {
reduced_AA_8[subSequenceLength] = new Reduced_AA_8_SequenceEncoder(subSequenceLength);
return reduced_AA_8[subSequenceLength];
}
return null;
}
}