package org.seqcode.gsebricks.verbs.location;
import java.util.*;
import org.seqcode.genome.location.Region;
import org.seqcode.gsebricks.*;
import org.seqcode.gsebricks.types.*;
import org.seqcode.gsebricks.verbs.Mapper;
import org.seqcode.gsebricks.verbs.MapperIterator;
public class RegionExpander<X extends Region>
implements Mapper<X,Region>, SelfDescribingVerb, DefaultConstantsParameterized {
private int minWidth;
public RegionExpander() {
minWidth = 0;
}
public RegionExpander(int minw) {
minWidth = minw;
}
public Iterator<Region> execute(Iterator<X> r) {
return new MapperIterator<X,Region>(this,r);
}
public Region execute(X r) {
if(r.getWidth() >= minWidth) {
return r;
} else {
int diff = minWidth - r.getWidth();
int startdelta = diff/2;
int enddelta = diff-startdelta;
return r.expand(startdelta, enddelta);
}
}
/*
* Methods for the implementation of SelfDescribingVerb
*/
public EchoType getInputClass() {
return new ClassType(Region.class);
}
public EchoType getOutputClass() {
return new ClassType(Region.class);
}
private static final EchoType[] pclasses = { new ClassType(Integer.class) };
private static final String[] pnames = { "MinWidth" };
private static final EchoType[] inputClasses = { new ClassType(Region.class) };
private static final String[] inputNames = { "Regions" };
private static final SelfDescribingConstant[] defConsts = { new ValueWrapper(1000) };
private static final String[] defConstNames = { "MinWidth" };
public String[] getInputNames() {
return inputNames;
}
public EchoType[] getInputClasses() {
return inputClasses;
}
public EchoType[] getParameterClasses() {
return pclasses;
}
public String[] getParameterNames() {
return pnames;
}
public void init(Map<String, Object> params) {
int minw = (Integer)params.get(pnames[0]);
minWidth = minw;
}
public String[] defaultConstantNames() {
return defConstNames;
}
public SelfDescribingConstant[] defaultConstants() {
return defConsts;
}
}