package com.illumina.basespace.igv.gff; import java.util.List; import java.util.UUID; import org.broad.igv.feature.genome.Genome; import org.broad.igv.track.FeatureTrack; import org.broad.igv.track.Track; 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.IBaseSpaceTrackLoader; import com.illumina.basespace.igv.IResourceLocatorFactory; import com.illumina.basespace.igv.gff.GFFLocatorFactory.GFFTrackLoader; public class GFFLocatorFactory implements IResourceLocatorFactory<GFFTrackLoader> { @Override public GFFTrackLoader newLocator(UUID clientId, ApiClient client, File check, List<FileCompact> filesInDirectory) { String nameLower = check.getName().toLowerCase(); if (nameLower.endsWith(".gtf")) { return new GFFTrackLoader(clientId, check); } return null; } public class GFFTrackLoader extends BaseSpaceResourceLocator implements IBaseSpaceTrackLoader<GFFTrackLoader> { public GFFTrackLoader(UUID clientId, File file) { super(clientId, file, ".gtf"); } @Override public String getDescription() { return "BaseSpace GFF"; } @Override public boolean loadTrack(GFFTrackLoader locator, List<Track> newTracks, Genome genome) { try { BaseSpaceGFFParser featureParser = new BaseSpaceGFFParser(locator.getPath()); List<FeatureTrack> tracks = featureParser.loadTracks(locator, genome); newTracks.addAll(tracks); return true; } catch (Throwable t) { throw new RuntimeException("Error loading file", t); } } } }