diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/ReferenceOrderedData.java b/java/src/org/broadinstitute/sting/gatk/refdata/ReferenceOrderedData.java index 50138e8fc..921193ce1 100644 --- a/java/src/org/broadinstitute/sting/gatk/refdata/ReferenceOrderedData.java +++ b/java/src/org/broadinstitute/sting/gatk/refdata/ReferenceOrderedData.java @@ -7,6 +7,7 @@ import java.io.FileNotFoundException; import java.util.*; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.broadinstitute.sting.gatk.iterators.PushbackIterator; import org.broadinstitute.sting.utils.GenomeLoc; @@ -150,8 +151,25 @@ public class ReferenceOrderedData implements } public RODIterator iterator() { - return new RODIterator(new SimpleRODIterator()); - } + Iterator it; + try { + Method m = type.getDeclaredMethod("createIterator", String.class,java.io.File.class); + it = (Iterator) m.invoke(null, name, file); + } catch ( java.lang.NoSuchMethodException e ) { + it = new SimpleRODIterator(); + } catch ( java.lang.NullPointerException e ) { + throw new RuntimeException(e); + } catch ( java.lang.SecurityException e ) { + throw new RuntimeException(e); + } catch ( java.lang.IllegalAccessException e ) { + throw new RuntimeException(e); + } catch ( java.lang.IllegalArgumentException e ) { + throw new RuntimeException(e); + } catch ( java.lang.reflect.InvocationTargetException e ) { + throw new RuntimeException(e); + } + return new RODIterator(it); + } // ---------------------------------------------------------------------- // @@ -275,7 +293,7 @@ public class ReferenceOrderedData implements private PushbackIterator it; private ROD prev = null; - public RODIterator(SimpleRODIterator it) { + public RODIterator(Iterator it) { this.it = new PushbackIterator(it); }