From 65b98470f3dc3b9c8356d2a1e4ab880eb4293f35 Mon Sep 17 00:00:00 2001 From: hanna Date: Fri, 23 Oct 2009 16:00:12 +0000 Subject: [PATCH] Temporary fix: have RodLocusView manage and close its RODs. Really the relationship between these two classes needs to be rethought; see JIRA GSA-207. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1904 348d0f76-0448-11de-a6fe-93d51630548a --- .../ManagingReferenceOrderedView.java | 32 ++++++++----------- .../datasources/providers/RodLocusView.java | 10 ++++++ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java index d17dc06ce..653b90e52 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/ManagingReferenceOrderedView.java @@ -26,11 +26,6 @@ import java.util.Collections; * A view into the reference-ordered data in the provider. */ public class ManagingReferenceOrderedView implements ReferenceOrderedView { - /** - * The provider that's supplying our backing data. - */ - //private final ShardDataProvider provider; - /** * The data sources along with their current states. */ @@ -41,7 +36,6 @@ public class ManagingReferenceOrderedView implements ReferenceOrderedView { * @param provider */ public ManagingReferenceOrderedView( ShardDataProvider provider ) { - //this.provider = provider; for( ReferenceOrderedDataSource dataSource: provider.getReferenceOrderedData() ) states.add( new ReferenceOrderedDataState( dataSource, (SeekableRODIterator)dataSource.seek(provider.getShard()) ) ); @@ -72,17 +66,17 @@ public class ManagingReferenceOrderedView implements ReferenceOrderedView { // Clear out the existing data so that post-close() accesses to this data will fail-fast. states = null; } - - /** - * Models the traversal state of a given ROD lane. - */ - private class ReferenceOrderedDataState { - public final ReferenceOrderedDataSource dataSource; - public final SeekableRODIterator iterator; - - public ReferenceOrderedDataState( ReferenceOrderedDataSource dataSource, SeekableRODIterator iterator ) { - this.dataSource = dataSource; - this.iterator = iterator; - } - } } + +/** + * Models the traversal state of a given ROD lane. + */ +class ReferenceOrderedDataState { + public final ReferenceOrderedDataSource dataSource; + public final SeekableRODIterator iterator; + + public ReferenceOrderedDataState( ReferenceOrderedDataSource dataSource, SeekableRODIterator iterator ) { + this.dataSource = dataSource; + this.iterator = iterator; + } +} \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java index e5a8831b4..5e438b559 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/providers/RodLocusView.java @@ -39,6 +39,11 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { // broken support for multi-locus rods //List multiLocusRODs = new LinkedList(); + /** + * The data sources along with their current states. + */ + private List states = new ArrayList(); + /** * Enable debugging output -- todo remove me */ @@ -67,6 +72,8 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { GenomeLoc shardLoc = provider.getShard().getGenomeLoc(); it.seekForward(GenomeLocParser.createGenomeLoc(shardLoc.getContigIndex(), shardLoc.getStart()-1, shardLoc.getStart()-1)); + states.add(new ReferenceOrderedDataState(dataSource,it)); + // we need to special case the interval so we don't always think there's a rod at the first location if ( dataSource.getName().equals(INTERVAL_ROD_NAME) ) { if ( interval != null ) @@ -202,6 +209,9 @@ public class RodLocusView extends LocusView implements ReferenceOrderedView { * Closes the current view. */ public void close() { + for( ReferenceOrderedDataState state: states ) + state.dataSource.close( state.iterator ); + rodQueue = null; tracker = null; }