RodBinding<T> are properly generic now.
VariantContextRodBinding removed, as RodBinding<VariantContext> is the right style now.
This commit is contained in:
parent
3b799db61a
commit
6acb4aad3b
|
|
@ -26,6 +26,7 @@
|
|||
package org.broadinstitute.sting.commandline;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.broad.tribble.Feature;
|
||||
import org.broadinstitute.sting.gatk.walkers.Multiplex;
|
||||
import org.broadinstitute.sting.gatk.walkers.Multiplexer;
|
||||
import org.broadinstitute.sting.utils.classloader.JVMUtils;
|
||||
|
|
@ -299,10 +300,10 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
|
|||
ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
|
||||
String value = getArgumentValue( defaultDefinition, matches );
|
||||
try {
|
||||
// TODO: determine type of internal value via Parameter
|
||||
Constructor ctor = type.getConstructor(Class.class, String.class, String.class, ParsingEngine.class);
|
||||
RodBinding result = (RodBinding)ctor.newInstance(null, source.field.getName(), value, parsingEngine);
|
||||
Tags tags = getArgumentTags(matches);
|
||||
Constructor ctor = type.getConstructor(Class.class, String.class, String.class, Tags.class);
|
||||
Class parameterType = getParameterizedTypeClass(source.field.getGenericType());
|
||||
RodBinding result = (RodBinding)ctor.newInstance(parameterType, source.field.getName(), value, tags);
|
||||
parsingEngine.addTags(result,tags);
|
||||
return result;
|
||||
} catch (InvocationTargetException e) {
|
||||
|
|
@ -315,6 +316,16 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
|
|||
value, source.field.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
private Class getParameterizedTypeClass(Type t) {
|
||||
if ( t instanceof ParameterizedType ) {
|
||||
ParameterizedType parameterizedType = (ParameterizedType)t;
|
||||
if ( parameterizedType.getActualTypeArguments().length != 1 )
|
||||
throw new ReviewedStingException("BUG: more than 1 generic type found on class" + t);
|
||||
return (Class)parameterizedType.getActualTypeArguments()[0];
|
||||
} else
|
||||
throw new ReviewedStingException("BUG: could not find generic type on class " + t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -27,7 +27,10 @@ package org.broadinstitute.sting.commandline;
|
|||
import org.broad.tribble.Feature;
|
||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -38,14 +41,14 @@ import java.util.List;
|
|||
public class RodBinding<T extends Feature> {
|
||||
final String variableName;
|
||||
final String source;
|
||||
final ParsingEngine parser;
|
||||
final Tags tags;
|
||||
final Class<T> type;
|
||||
|
||||
protected RodBinding(Class<T> type, final String variableName, final String source, final ParsingEngine parser) {
|
||||
public RodBinding(Class<T> type, final String variableName, final String source, final Tags tags) {
|
||||
this.type = type;
|
||||
this.variableName = variableName;
|
||||
this.source = source;
|
||||
this.parser = parser;
|
||||
this.tags = tags;
|
||||
}
|
||||
|
||||
public String getVariableName() {
|
||||
|
|
@ -56,16 +59,26 @@ public class RodBinding<T extends Feature> {
|
|||
return source;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// Accessors should be kept in sync with RefMetaDataTracker
|
||||
//
|
||||
//
|
||||
// ------------------------------------------------------------------------------------------
|
||||
|
||||
public List<T> getValues(final RefMetaDataTracker tracker) {
|
||||
return tracker.getValues(variableName, type);
|
||||
return tracker.getValues(type, getVariableName());
|
||||
}
|
||||
public List<T> getValues(final RefMetaDataTracker tracker, final GenomeLoc onlyAtThisLoc) {
|
||||
return tracker.getValues(type, getVariableName(), onlyAtThisLoc);
|
||||
}
|
||||
|
||||
// public <T> List<T> getValues(final RefMetaDataTracker tracker, final Class<T> clazz) {
|
||||
// return tracker.getValues(variableName, clazz);
|
||||
// }
|
||||
|
||||
public T getFirstValue(final RefMetaDataTracker tracker) {
|
||||
return tracker.getFirstValue(variableName, type);
|
||||
return tracker.getFirstValue(type, getVariableName());
|
||||
}
|
||||
public T getFirstValue(final RefMetaDataTracker tracker, final GenomeLoc onlyAtThisLoc) {
|
||||
return tracker.getFirstValue(type, getVariableName(), onlyAtThisLoc);
|
||||
}
|
||||
|
||||
public boolean hasValues(final RefMetaDataTracker tracker) {
|
||||
|
|
@ -77,7 +90,7 @@ public class RodBinding<T extends Feature> {
|
|||
}
|
||||
|
||||
public Tags getTags() {
|
||||
return parser.getTags(this);
|
||||
return tags;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
|
|
|
|||
|
|
@ -1,78 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2011, The Broad Institute
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
* files (the "Software"), to deal in the Software without
|
||||
* restriction, including without limitation the rights to use,
|
||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package org.broadinstitute.sting.commandline;
|
||||
|
||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* A RodBinding representing a walker argument that gets bound to a ROD track containing VariantContexts
|
||||
*/
|
||||
public class VariantContextRodBinding extends RodBinding {
|
||||
/**
|
||||
* Create a new RodBinding specialized to provide VariantContexts.
|
||||
* @param variableName the name of the field in the walker that we will bind the ROD track too
|
||||
* @param sourceFile the data source from which we will read the VCs
|
||||
* @param parser the Engine parser used to obtain information about this argument, such as its underlying file type
|
||||
*/
|
||||
protected VariantContextRodBinding(final String variableName, final String sourceFile, final ParsingEngine parser) {
|
||||
super(VariantContext.class, variableName, sourceFile, parser);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwarding method to identical tracker method
|
||||
*/
|
||||
public Collection<VariantContext> getVariantContexts(final RefMetaDataTracker tracker,
|
||||
final GenomeLoc curLocation,
|
||||
final boolean requireStartHere,
|
||||
final boolean takeFirstOnly ) {
|
||||
return tracker.getVariantContexts(variableName, curLocation, requireStartHere, takeFirstOnly);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwarding method to identical tracker method
|
||||
* @param tracker
|
||||
* @param curLocation
|
||||
* @param requireStartHere
|
||||
* @return
|
||||
*/
|
||||
public VariantContext getVariantContext(final RefMetaDataTracker tracker,
|
||||
final GenomeLoc curLocation,
|
||||
final boolean requireStartHere ) {
|
||||
return tracker.getVariantContext(variableName, curLocation, requireStartHere);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwarding method to identical tracker method
|
||||
*/
|
||||
public VariantContext getVariantContext(final RefMetaDataTracker tracker,
|
||||
final GenomeLoc curLocation) {
|
||||
return tracker.getVariantContext(variableName, curLocation);
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
package org.broadinstitute.sting.gatk.walkers.variantutils;
|
||||
|
||||
import org.broad.tribble.Feature;
|
||||
import org.broadinstitute.sting.commandline.*;
|
||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||
|
|
@ -62,10 +63,10 @@ public class VariantsToTableNewRodStyle extends RodWalker<Integer, Integer> {
|
|||
public boolean ALLOW_MISSING_DATA = false;
|
||||
|
||||
@Input(fullName="variants", shortName="V", doc="The variant file we will convert to a table", required=true)
|
||||
public VariantContextRodBinding variants;
|
||||
public RodBinding<VariantContext> variants;
|
||||
|
||||
@Input(fullName="rodList", shortName="RL", doc="A list of ROD types that we will convert to a table", required=true)
|
||||
public List<RodBinding> variantsList;
|
||||
// @Input(fullName="rodList", shortName="RL", doc="A list of ROD types that we will convert to a table", required=true)
|
||||
// public List<RodBinding<Feature>> variantsList;
|
||||
|
||||
public void initialize() {
|
||||
out.println(Utils.join("\t", fieldsToTake));
|
||||
|
|
@ -134,11 +135,11 @@ public class VariantsToTableNewRodStyle extends RodWalker<Integer, Integer> {
|
|||
if ( tracker == null ) // RodWalkers can make funky map calls
|
||||
return 0;
|
||||
|
||||
for ( RodBinding binding : variantsList )
|
||||
System.out.printf("VariantList binding %s tags=%s%n", binding, getToolkit().getTags(binding).getPositionalTags());
|
||||
// for ( RodBinding binding : variantsList )
|
||||
// System.out.printf("VariantList binding %s tags=%s%n", binding, getToolkit().getTags(binding).getPositionalTags());
|
||||
|
||||
if ( ++nRecords < MAX_RECORDS || MAX_RECORDS == -1 ) {
|
||||
VariantContext vc = variants.getVariantContext(tracker, context.getLocation());
|
||||
VariantContext vc = variants.getFirstValue(tracker, context.getLocation());
|
||||
if ( (keepMultiAllelic || vc.isBiallelic()) && ( showFiltered || vc.isNotFiltered() ) ) {
|
||||
List<String> vals = extractFields(vc, fieldsToTake, ALLOW_MISSING_DATA);
|
||||
out.println(Utils.join("\t", vals));
|
||||
|
|
|
|||
Loading…
Reference in New Issue