From 097828a466bf60ebf650f45b5f27a40e4a79321b Mon Sep 17 00:00:00 2001 From: Mark DePristo Date: Wed, 27 Jul 2011 11:36:53 -0400 Subject: [PATCH] ParsingEngine now maintains the list of rodBindings No longer try to reparser objects to find the right fields Direct support in RodBinding for getTags() --- .../commandline/ArgumentTypeDescriptor.java | 4 ++-- .../sting/commandline/ParsingEngine.java | 13 +++++++++++- .../sting/commandline/RodBinding.java | 8 ++++++- .../commandline/VariantContextRodBinding.java | 4 ++-- .../sting/gatk/CommandLineExecutable.java | 21 ++----------------- .../sting/utils/text/ListFileUtils.java | 4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java b/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java index 16e02c5bd..9b751cc3a 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ArgumentTypeDescriptor.java @@ -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; diff --git a/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java b/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java index e2e694cfb..edb212f2c 100755 --- a/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java +++ b/public/java/src/org/broadinstitute/sting/commandline/ParsingEngine.java @@ -59,6 +59,11 @@ public class ParsingEngine { */ private List parsingMethods = new ArrayList(); + /** + * All of the RodBinding objects we've seen while parsing + */ + private List rodBindings = new ArrayList(); + /** * 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 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 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 diff --git a/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java b/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java index 028d2f411..86b1be162 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java +++ b/public/java/src/org/broadinstitute/sting/commandline/RodBinding.java @@ -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()); } diff --git a/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java b/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java index 66a428369..29b97d07b 100644 --- a/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java +++ b/public/java/src/org/broadinstitute/sting/commandline/VariantContextRodBinding.java @@ -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) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java b/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java index 10573cf25..ec3c96d83 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java +++ b/public/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java @@ -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 newStyle = ListFileUtils.unpackRODBindings(getRodBindingsInWalker(walker), parser); + Collection newStyle = ListFileUtils.unpackRODBindings(parser.getRodBindings(), parser); Collection 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 getRodBindingsInWalker(Walker walker) { - List rods = new ArrayList(); - - 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 diff --git a/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java b/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java index 7d4e47a94..b8e39fb61 100644 --- a/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java +++ b/public/java/src/org/broadinstitute/sting/utils/text/ListFileUtils.java @@ -93,7 +93,7 @@ public class ListFileUtils { * @param RODBindings a text equivale * @return a list of expanded, bound RODs. */ - public static Collection unpackRODBindings(final List RODBindings, final String dbSNPFile, final ParsingEngine parser) { + public static Collection unpackRODBindings(final Collection RODBindings, final String dbSNPFile, final ParsingEngine parser) { // todo -- this is a strange home for this code. Move into ROD system Collection rodBindings = new ArrayList(); @@ -141,7 +141,7 @@ public class ListFileUtils { * @param RODBindings a text equivale * @return a list of expanded, bound RODs. */ - public static Collection unpackRODBindings(final List RODBindings, final ParsingEngine parser) { + public static Collection unpackRODBindings(final Collection RODBindings, final ParsingEngine parser) { // todo -- this is a strange home for this code. Move into ROD system Collection rodBindings = new ArrayList();