/*
* 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.util;
import bio.pih.genoogle.seq.SymbolList;
/**
* Factory for the {@link SymbolList} sliding windows
*
* @author Albrecht
*/
public abstract class SymbolListWindowIteratorFactory {
private static SymbolListWindowIteratorFactory OVERLAPPED_SYMBOL_LIST_WINDOW_ITERATOR_FACTORY = new SymbolListWindowIteratorFactory.OverlappedSymbolListWindowIteratorFactory();
private static SymbolListWindowIteratorFactory NOT_OVERLAPPED_SYMBOL_LIST_WINDOW_ITERATOR_FACTORY = new SymbolListWindowIteratorFactory.NotOverlappedSymbolListWindowIteratorFactory();
/**
* @param symbolList
* @param windowLength
* @return a new {@link SymbolListWindowIterator} related with this factory.
*/
public abstract SymbolListWindowIterator newSymbolListWindowIterator(SymbolList symbolList, int windowLength);
/**
* @return a overlapped symbol list window iterator factory
*/
public static SymbolListWindowIteratorFactory getOverlappedFactory() {
return OVERLAPPED_SYMBOL_LIST_WINDOW_ITERATOR_FACTORY;
}
/**
* @return a not overlapped symbol list window iterator factory
*/
public static SymbolListWindowIteratorFactory getNotOverlappedFactory() {
return NOT_OVERLAPPED_SYMBOL_LIST_WINDOW_ITERATOR_FACTORY;
}
private static class OverlappedSymbolListWindowIteratorFactory extends SymbolListWindowIteratorFactory {
@Override
public SymbolListWindowIterator newSymbolListWindowIterator(SymbolList symbolList, int windowLength) {
return new OverlappedSymbolListWindowIterator(symbolList, windowLength);
}
}
private static class NotOverlappedSymbolListWindowIteratorFactory extends SymbolListWindowIteratorFactory {
@Override
public SymbolListWindowIterator newSymbolListWindowIterator(SymbolList symbolList, int windowLength) {
return new NotOverlappedSymbolListWindowIterator(symbolList, windowLength);
}
}
}