ParsingEngine now maintains the list of rodBindings

No longer try to reparser objects to find the right fields
Direct support in RodBinding for getTags()
This commit is contained in:
Mark DePristo 2011-07-27 11:36:53 -04:00
parent 9dfb57168a
commit 097828a466
6 changed files with 27 additions and 27 deletions

View File

@ -299,8 +299,8 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
String value = getArgumentValue( defaultDefinition, matches );
try {
Constructor ctor = type.getConstructor(String.class, String.class);
RodBinding result = (RodBinding)ctor.newInstance(source.field.getName(), value);
Constructor ctor = type.getConstructor(String.class, String.class, ParsingEngine.class);
RodBinding result = (RodBinding)ctor.newInstance(source.field.getName(), value, parsingEngine);
Tags tags = getArgumentTags(matches);
parsingEngine.addTags(result,tags);
return result;

View File

@ -59,6 +59,11 @@ public class ParsingEngine {
*/
private List<ParsingMethod> parsingMethods = new ArrayList<ParsingMethod>();
/**
* All of the RodBinding objects we've seen while parsing
*/
private List<RodBinding> rodBindings = new ArrayList<RodBinding>();
/**
* Class reference to the different types of descriptors that the create method can create.
* The type of set used must be ordered (but not necessarily sorted).
@ -342,9 +347,16 @@ public class ParsingEngine {
Object value = (argumentMatches.size() != 0) ? source.parse(this,argumentMatches) : source.createTypeDefault(this);
JVMUtils.setFieldValue(source.field,target,value);
if ( value instanceof RodBinding )
rodBindings.add((RodBinding)value);
}
}
public Collection<RodBinding> getRodBindings() {
return Collections.unmodifiableCollection(rodBindings);
}
/**
* Gets a collection of the container instances of the given type stored within the given target.
* @param source Argument source.
@ -391,7 +403,6 @@ public class ParsingEngine {
return ArgumentTypeDescriptor.selectBest(argumentTypeDescriptors,type);
}
private List<ArgumentSource> extractArgumentSources(Class sourceClass, Field[] parentFields) {
// now simply call into the truly general routine extract argument bindings but with a null
// object so bindings aren't computed

View File

@ -34,10 +34,12 @@ import java.util.List;
public class RodBinding {
final String variableName;
final String source;
final ParsingEngine parser;
public RodBinding(final String variableName, final String source) {
protected RodBinding(final String variableName, final String source, final ParsingEngine parser) {
this.variableName = variableName;
this.source = source;
this.parser = parser;
}
public String getVariableName() {
@ -52,6 +54,10 @@ public class RodBinding {
return tracker.getReferenceMetaData(variableName);
}
public Tags getTags() {
return parser.getTags(this);
}
public String toString() {
return String.format("(RodBinding name=%s source=%s)", getVariableName(), getSource());
}

View File

@ -36,8 +36,8 @@ import java.util.List;
*
*/
public class VariantContextRodBinding extends RodBinding {
public VariantContextRodBinding(final String variableName, final String sourceFile) {
super(variableName, sourceFile);
protected VariantContextRodBinding(final String variableName, final String sourceFile, final ParsingEngine parser) {
super(variableName, sourceFile, parser);
}
public VariantContext getVariantContext(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc) {

View File

@ -25,10 +25,7 @@
package org.broadinstitute.sting.gatk;
import org.broadinstitute.sting.commandline.ArgumentSource;
import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor;
import org.broadinstitute.sting.commandline.CommandLineProgram;
import org.broadinstitute.sting.commandline.RodBinding;
import org.broadinstitute.sting.commandline.*;
import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection;
import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor;
@ -100,7 +97,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
loadArgumentsIntoObject(walker);
argumentSources.add(walker);
Collection<RMDTriplet> newStyle = ListFileUtils.unpackRODBindings(getRodBindingsInWalker(walker), parser);
Collection<RMDTriplet> newStyle = ListFileUtils.unpackRODBindings(parser.getRodBindings(), parser);
Collection<RMDTriplet> oldStyle = ListFileUtils.unpackRODBindings(getArgumentCollection().RODBindings, getArgumentCollection().DBSNPFile, parser);
oldStyle.addAll(newStyle);
engine.setReferenceMetaDataFiles(oldStyle);
@ -121,20 +118,6 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
return 0;
}
private List<RodBinding> getRodBindingsInWalker(Walker<?,?> walker) {
List<RodBinding> rods = new ArrayList<RodBinding>();
for ( ArgumentSource source : parser.extractArgumentSources(walker.getClass()) ) {
Object obj = JVMUtils.getFieldValue(source.field, walker);
if ( obj instanceof RodBinding ) {
System.out.printf("Found rod binding for field %s of %s%n", obj, source.field);
rods.add((RodBinding)obj);
}
}
return rods;
}
/**
* Generate the GATK run report for this walker using the current GATKEngine, if -et is enabled.
* This report will be written to either STDOUT or to the run repository, depending on the options

View File

@ -93,7 +93,7 @@ public class ListFileUtils {
* @param RODBindings a text equivale
* @return a list of expanded, bound RODs.
*/
public static Collection<RMDTriplet> unpackRODBindings(final List<String> RODBindings, final String dbSNPFile, final ParsingEngine parser) {
public static Collection<RMDTriplet> unpackRODBindings(final Collection<String> RODBindings, final String dbSNPFile, final ParsingEngine parser) {
// todo -- this is a strange home for this code. Move into ROD system
Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>();
@ -141,7 +141,7 @@ public class ListFileUtils {
* @param RODBindings a text equivale
* @return a list of expanded, bound RODs.
*/
public static Collection<RMDTriplet> unpackRODBindings(final List<RodBinding> RODBindings, final ParsingEngine parser) {
public static Collection<RMDTriplet> unpackRODBindings(final Collection<RodBinding> RODBindings, final ParsingEngine parser) {
// todo -- this is a strange home for this code. Move into ROD system
Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>();