adding code to detect out-of-date index files, which we now remove and regenerate if the target file is newer than the index file.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3303 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
aaron 2010-05-05 17:55:36 +00:00
parent a68f3b2e9c
commit c998c48a23
1 changed files with 28 additions and 1 deletions

View File

@ -25,6 +25,7 @@
package org.broadinstitute.sting.gatk.refdata.tracks.builders;
import org.apache.log4j.Logger;
import org.broad.tribble.Feature;
import org.broad.tribble.FeatureCodec;
import org.broad.tribble.FeatureReader;
@ -53,6 +54,11 @@ import java.util.Map;
* that gets iterators from the FeatureReader using Tribble.
*/
public class TribbleRMDTrackBuilder extends PluginManager<FeatureCodec> implements RMDTrackBuilder {
/**
* our log, which we want to capture anything from this class
*/
private static Logger logger = Logger.getLogger(TribbleRMDTrackBuilder.class);
// the linear index extension
private static final String linearIndexExtension = ".idx";
@ -88,7 +94,8 @@ public class TribbleRMDTrackBuilder extends PluginManager<FeatureCodec> implemen
FeatureReader reader;
try {
// check to see if the input file has an index
if (!(new File(inputFile.getAbsolutePath() + linearIndexExtension).canRead())) {
if (requireIndex(inputFile)) {
logger.warn("Creating Tribble Index for file " + inputFile);
LinearIndex index = createIndex(inputFile, this.createByType(targetClass));
reader = new FeatureReader(inputFile,index, this.createByType(targetClass));
}
@ -115,6 +122,26 @@ public class TribbleRMDTrackBuilder extends PluginManager<FeatureCodec> implemen
LinearIndexCreator create = new LinearIndexCreator(inputFile, codec);
return create.createIndex();
}
/**
* this function checks if we need to make an index file. There are three cases:
* 1. The index file doesn't exist; return true
* 2. The index does exist, but is older than the file. We delete the index and return true
* 3. else return false;
* @param inputFile the target file to make an index for
* @return true if we need to create an index, false otherwise
*/
private boolean requireIndex(File inputFile) {
// can we read the index? if not, create an index
File indexFile = new File(inputFile.getAbsolutePath() + linearIndexExtension);
if (!(indexFile.canRead())) return true;
if (inputFile.lastModified() > indexFile.lastModified()) {
logger.warn("Removing out of date (index file date older than target file ) index file " + indexFile);
indexFile.delete();
return true;
}
return false;
}
}
/**