package com.illumina.basespace.igv.vcf;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.broad.igv.feature.genome.Genome;
import org.broad.igv.track.Track;
import org.broad.igv.track.TribbleFeatureSource;
import org.broad.igv.variant.VariantTrack;
import org.broadinstitute.variant.vcf.VCFHeader;
import com.illumina.basespace.ApiClient;
import com.illumina.basespace.entity.File;
import com.illumina.basespace.entity.FileCompact;
import com.illumina.basespace.igv.BaseSpaceResourceLocator;
import com.illumina.basespace.igv.BaseSpaceUtil;
import com.illumina.basespace.igv.IBaseSpaceTrackLoader;
import com.illumina.basespace.igv.IResourceLocatorFactory;
import com.illumina.basespace.igv.vcf.VCFLocatorFactory.VCFTrackLoader;
public class VCFLocatorFactory implements IResourceLocatorFactory<VCFTrackLoader>
{
@Override
public VCFTrackLoader newLocator(UUID clientId,ApiClient client,File check, List<FileCompact> filesInDirectory)
{
String nameLower = check.getName().toLowerCase();
if (nameLower.endsWith(".vcf"))
{
return new VCFTrackLoader(clientId, check,null);
}
if (check.getName().toLowerCase().endsWith(".vcf.gz"))
{
FileCompact indexFile = BaseSpaceUtil.findFile(check.getName() + ".tbi", filesInDirectory);
if (indexFile != null)
{
return new VCFTrackLoader(clientId, check,indexFile);
}
}
return null;
}
public class VCFTrackLoader extends BaseSpaceResourceLocator implements IBaseSpaceTrackLoader<VCFTrackLoader>
{
private FileCompact indexFile;
public VCFTrackLoader(UUID clientId, File file,FileCompact indexFile)
{
super(clientId, file,".vcf");
this.indexFile = indexFile;
}
@Override
public String getDescription()
{
return "BaseSpace VCF";
}
public FileCompact getIndexFile()
{
return indexFile;
}
@Override
public boolean loadTrack(VCFTrackLoader locator, List<Track> newTracks, Genome genome)
{
try
{
TribbleFeatureSource src = new BaseSpaceFeatureSource(locator, genome);
VCFHeader header = (VCFHeader) src.getHeader();
boolean enableMethylationRateSupport = (header.getFormatHeaderLine("MR") != null && header
.getFormatHeaderLine("GB") != null);
List<String> allSamples = new ArrayList(header.getGenotypeSamples());
VariantTrack t = new BaseSpaceVariantTrack(locator, src, allSamples, enableMethylationRateSupport);
t.setMargin(0);
newTracks.add(t);
return true;
}
catch (Throwable t)
{
throw new RuntimeException("Error loading VCF", t);
}
}
}
}