/** * */ package de.uni_luebeck.inb.krabbenhoeft.eQTL.client.tracks; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DasTrackEntry; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.FetchDasTrack; import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.FetchDasTrackAsync; import de.uni_luebeck.inb.krabbenhoeft.eQTL.client.scroller.GenomeDisplayTrack; public class TranscriptTrack extends GenomeDisplayTrack<DasTrackEntry> { public TranscriptTrack() { super("transcripts", 1024); } final FetchDasTrackAsync ensemblAsync = (FetchDasTrackAsync) GWT.create(FetchDasTrack.class); @Override public void fetchData(String chromosome, long fromBP, long toBP, AsyncCallback<DasTrackEntry[]> callback) { ensemblAsync.getTrackForSegment("transcript", chromosome, fromBP, toBP, callback); } @Override protected void renderBlockInternal(int topY, long fromBP, long toBP, long bpPerPixel, de.uni_luebeck.inb.krabbenhoeft.eQTL.client.scroller.GenomeDisplayTrack.Block<DasTrackEntry> b) { final String col[] = new String[] { "chr-transcript-0", "chr-transcript-1" }; b.bottomY = topY + 10; b.html = ""; for (int i = 0; i < b.data.length; i++) { DasTrackEntry band = b.data[i]; if (band.to < fromBP) continue; if (band.from > toBP) continue; long from = Math.max(band.from, fromBP) - fromBP; long to = Math.min(band.to, toBP) - fromBP; from /= bpPerPixel; to /= bpPerPixel; long width = to - from; if (width <= 0) continue; b.html += genBox(col[band.type], (int) from, topY, (int) width, 10, "", genAutomation(fromBP, i), ""); } } @Override public void onMouseClick(Object object) { DasTrackEntry e = (DasTrackEntry) object; Window.open("http://www.ensembl.org/Mus_musculus/Location/View?r=" + chromosome + ":" + (e.from - 1000) + "-" + (e.to + 1000), "_blank", ""); } }