package com.illumina.basespace.igv.wiggle;
import java.util.List;
import java.util.UUID;
import org.broad.igv.data.DatasetDataSource;
import org.broad.igv.data.WiggleDataset;
import org.broad.igv.feature.genome.Genome;
import org.broad.igv.track.DataSourceTrack;
import org.broad.igv.track.Track;
import org.broad.igv.track.TrackProperties;
import org.broad.igv.track.TrackType;
import org.broad.igv.track.WindowFunction;
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.wiggle.WiggleLocatorFactory.WiggleTrackLoader;
public class WiggleLocatorFactory implements IResourceLocatorFactory<WiggleTrackLoader>
{
@Override
public WiggleTrackLoader newLocator(UUID clientId, ApiClient client, File check, List<FileCompact> filesInDirectory)
{
String nameLower = check.getName().toLowerCase();
if (nameLower.endsWith(".bedgraph.gz"))
{
return new WiggleTrackLoader(clientId, check);
}
return null;
}
public class WiggleTrackLoader extends BaseSpaceResourceLocator implements IBaseSpaceTrackLoader<WiggleTrackLoader>
{
public WiggleTrackLoader(UUID clientId, File file)
{
super(clientId, file, ".bedgraph");
}
@Override
public String getDescription()
{
return "BaseSpace Wiggle";
}
@Override
public boolean loadTrack(WiggleTrackLoader locator, List<Track> newTracks, Genome genome)
{
try
{
WiggleDataset ds = (new BaseSpaceWiggleParser(locator, genome)).parse();
TrackProperties props = ds.getTrackProperties();
// In case of conflict between the resource locator display name
// and the track properties name,
// use the resource locator
String name = props == null ? null : props.getName();
String label = locator.getName();
if (name == null)
{
name = locator.getFileName();
}
else if (label != null)
{
props.setName(label); // erase name rom track properties
}
String path = locator.getPath();
boolean multiTrack = ds.getTrackNames().length > 1;
for (String heading : ds.getTrackNames())
{
String trackId = multiTrack ? path + "_" + heading : path;
String trackName = multiTrack ? heading : name;
DatasetDataSource dataSource = new DatasetDataSource(trackId, ds, genome);
DataSourceTrack track = new DataSourceTrack(locator, trackId, trackName, dataSource);
String displayName = (label == null || multiTrack) ? heading : label;
track.setName(displayName);
track.setProperties(props);
track.setTrackType(ds.getType());
if (ds.getType() == TrackType.EXPR)
{
track.setWindowFunction(WindowFunction.none);
}
newTracks.add(track);
}
return true;
}
catch (Throwable t)
{
throw new RuntimeException("Error loading BedGraph.gz", t);
}
}
}
}