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); ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
String value = getArgumentValue( defaultDefinition, matches ); String value = getArgumentValue( defaultDefinition, matches );
try { try {
Constructor ctor = type.getConstructor(String.class, String.class); Constructor ctor = type.getConstructor(String.class, String.class, ParsingEngine.class);
RodBinding result = (RodBinding)ctor.newInstance(source.field.getName(), value); RodBinding result = (RodBinding)ctor.newInstance(source.field.getName(), value, parsingEngine);
Tags tags = getArgumentTags(matches); Tags tags = getArgumentTags(matches);
parsingEngine.addTags(result,tags); parsingEngine.addTags(result,tags);
return result; return result;

View File

@ -59,6 +59,11 @@ public class ParsingEngine {
*/ */
private List<ParsingMethod> parsingMethods = new ArrayList<ParsingMethod>(); 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. * 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). * 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); Object value = (argumentMatches.size() != 0) ? source.parse(this,argumentMatches) : source.createTypeDefault(this);
JVMUtils.setFieldValue(source.field,target,value); 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. * Gets a collection of the container instances of the given type stored within the given target.
* @param source Argument source. * @param source Argument source.
@ -391,7 +403,6 @@ public class ParsingEngine {
return ArgumentTypeDescriptor.selectBest(argumentTypeDescriptors,type); return ArgumentTypeDescriptor.selectBest(argumentTypeDescriptors,type);
} }
private List<ArgumentSource> extractArgumentSources(Class sourceClass, Field[] parentFields) { private List<ArgumentSource> extractArgumentSources(Class sourceClass, Field[] parentFields) {
// now simply call into the truly general routine extract argument bindings but with a null // now simply call into the truly general routine extract argument bindings but with a null
// object so bindings aren't computed // object so bindings aren't computed

View File

@ -34,10 +34,12 @@ import java.util.List;
public class RodBinding { public class RodBinding {
final String variableName; final String variableName;
final String source; 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.variableName = variableName;
this.source = source; this.source = source;
this.parser = parser;
} }
public String getVariableName() { public String getVariableName() {
@ -52,6 +54,10 @@ public class RodBinding {
return tracker.getReferenceMetaData(variableName); return tracker.getReferenceMetaData(variableName);
} }
public Tags getTags() {
return parser.getTags(this);
}
public String toString() { public String toString() {
return String.format("(RodBinding name=%s source=%s)", getVariableName(), getSource()); 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 class VariantContextRodBinding extends RodBinding {
public VariantContextRodBinding(final String variableName, final String sourceFile) { protected VariantContextRodBinding(final String variableName, final String sourceFile, final ParsingEngine parser) {
super(variableName, sourceFile); super(variableName, sourceFile, parser);
} }
public VariantContext getVariantContext(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc) { public VariantContext getVariantContext(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc) {

View File

@ -25,10 +25,7 @@
package org.broadinstitute.sting.gatk; package org.broadinstitute.sting.gatk;
import org.broadinstitute.sting.commandline.ArgumentSource; import org.broadinstitute.sting.commandline.*;
import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor;
import org.broadinstitute.sting.commandline.CommandLineProgram;
import org.broadinstitute.sting.commandline.RodBinding;
import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection;
import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor;
@ -100,7 +97,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
loadArgumentsIntoObject(walker); loadArgumentsIntoObject(walker);
argumentSources.add(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); Collection<RMDTriplet> oldStyle = ListFileUtils.unpackRODBindings(getArgumentCollection().RODBindings, getArgumentCollection().DBSNPFile, parser);
oldStyle.addAll(newStyle); oldStyle.addAll(newStyle);
engine.setReferenceMetaDataFiles(oldStyle); engine.setReferenceMetaDataFiles(oldStyle);
@ -121,20 +118,6 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
return 0; 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. * 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 * 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 * @param RODBindings a text equivale
* @return a list of expanded, bound RODs. * @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 // todo -- this is a strange home for this code. Move into ROD system
Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>(); Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>();
@ -141,7 +141,7 @@ public class ListFileUtils {
* @param RODBindings a text equivale * @param RODBindings a text equivale
* @return a list of expanded, bound RODs. * @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 // todo -- this is a strange home for this code. Move into ROD system
Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>(); Collection<RMDTriplet> rodBindings = new ArrayList<RMDTriplet>();