package org.seqcode.gsebricks.verbs.assignment;
import java.util.*;
import javax.swing.JProgressBar;
import org.seqcode.genome.Genome;
import org.seqcode.genome.location.Gene;
import org.seqcode.genome.location.NamedRegion;
import org.seqcode.genome.location.Region;
import org.seqcode.gsebricks.verbs.*;
import org.seqcode.gsebricks.verbs.location.ChromRegionIterator;
import org.seqcode.gsebricks.verbs.location.RefGeneGenerator;
/* Doesn't provide annotations itself, but the Items are the results of
applying Expander<Region,Region> evts to the whole genome
*/
public class RegionToRegionAnnotations extends CachedAnnotations<Region,Region> {
private RefGeneGenerator generator;
private JProgressBar progressBar;
public RegionToRegionAnnotations(Genome g, Expander<Region,Region> evts) {
super();
progressBar = null;
init(evts,g);
}
public RegionToRegionAnnotations(Genome g, Expander<Region,Region> evts, JProgressBar pbar) {
super();
progressBar = pbar;
init(evts,g);
}
public void init(Expander<Region,Region> evts, Genome g) {
ChromRegionIterator chroms = new ChromRegionIterator(g);
Iterator<Region> regionChroms =
new MapperIterator<NamedRegion,Region>(new CastingMapper<NamedRegion,Region>(), chroms);
Iterator<Region> evtItr = new ExpanderIterator<Region,Region>(evts, regionChroms);
LinkedList<Region> totalEvents = new LinkedList<Region>();
while(evtItr.hasNext()) {
totalEvents.addLast(evtItr.next());
}
addItems(totalEvents);
if(progressBar != null) {
progressBar.setMaximum(getNumItems());
}
generator = new RefGeneGenerator<Region>(g);
addAnnotations("genes", generator);
}
public void markProgress() {
if(progressBar != null) {
progressBar.setValue(progressBar.getValue() + 1);
}
}
public Expander<Region,Gene> getGeneGenerator() { return generator; }
}