diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java index 297c163ab..d37839eff 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/RefMetaDataTracker.java @@ -32,7 +32,6 @@ import java.util.*; */ public class RefMetaDataTracker { // TODO: this should be a list, not a map, actually - private final static RODRecordList EMPTY_ROD_RECORD_LIST = new RODRecordListImpl("EMPTY"); final Map map; @@ -138,6 +137,26 @@ public class RefMetaDataTracker { return getFirstValue(rodBinding.getType(), rodBinding.getVariableName(), onlyAtThisLoc); } + public T getFirstValue(final Collection> rodBindings) { + for ( RodBinding rodBinding : rodBindings ) { + T val = getFirstValue(rodBinding); + if ( val != null ) + return val; + } + return null; + } + + public T getFirstValue(final Collection> rodBindings, final GenomeLoc onlyAtThisLoc) { + for ( RodBinding rodBinding : rodBindings ) { + T val = getFirstValue(rodBinding, onlyAtThisLoc); + if ( val != null ) + return val; + } + return null; + } + + + public boolean hasValues(final RodBinding rodBinding) { return hasValues(rodBinding.getVariableName()); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/refdata/RefMetaDataTrackerUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/refdata/RefMetaDataTrackerUnitTest.java index ab67e48e1..1e1c11ab8 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/refdata/RefMetaDataTrackerUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/refdata/RefMetaDataTrackerUnitTest.java @@ -226,7 +226,7 @@ public class RefMetaDataTrackerUnitTest { RefMetaDataTracker tracker = test.makeTracker(); for ( String nameAsString : Arrays.asList("A", "B") ) { - RodBinding binding = new RodBinding(Feature.class, nameAsString, "none", new Tags()); + RodBinding binding = new RodBinding(Feature.class, nameAsString, "none", new Tags()); List v1 = tracker.getValues(binding); testGetter(nameAsString, v1, test.expected(nameAsString), true, tracker); @@ -241,6 +241,29 @@ public class RefMetaDataTrackerUnitTest { } } + @Test(enabled = true, dataProvider = "tests") + public void testGettersAsListOfRodBindings(MyTest test) { + logger.warn("Testing " + test + " for get() methods for List"); + RefMetaDataTracker tracker = test.makeTracker(); + + String nameAsString = "A+B"; + RodBinding A = new RodBinding(Feature.class, "A", "none", new Tags()); + RodBinding B = new RodBinding(Feature.class, "B", "none", new Tags()); + List> binding = Arrays.asList(A, B); + + List v1 = tracker.getValues(binding); + testGetter(nameAsString, v1, test.expected(nameAsString), true, tracker); + + List v2 = tracker.getValues(binding, locus); + testGetter(nameAsString, v2, startingHere(test.expected(nameAsString)), true, tracker); + + Feature v3 = tracker.getFirstValue(binding); + testGetter(nameAsString, Arrays.asList(v3), test.expected(nameAsString), false, tracker); + + Feature v4 = tracker.getFirstValue(binding, locus); + testGetter(nameAsString, Arrays.asList(v4), startingHere(test.expected(nameAsString)), false, tracker); + } + private List startingHere(List l) { List x = new ArrayList(); for ( GATKFeature f : l ) if ( f.getStart() == locus.getStart() ) x.add(f);