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:
parent
9dfb57168a
commit
097828a466
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue