Skip to content

Commit 4ed9a8a

Browse files
committed
Functionality for displaying statistic overview band/panel added
1 parent c3be04e commit 4ed9a8a

File tree

12 files changed

+715
-55
lines changed

12 files changed

+715
-55
lines changed

lib/dygraph-gwt.jar

52 KB
Binary file not shown.

src/at/gmi/nordborglab/widgets/geneviewer/client/GeneViewer.java

Lines changed: 382 additions & 15 deletions
Large diffs are not rendered by default.
Lines changed: 35 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,43 @@
11
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
22
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
33
xmlns:g="urn:import:com.google.gwt.user.client.ui"
4+
xmlns:dyg="urn:import:org.danvk.dygraphs.client"
45
xmlns:pjs="urn:import:com.processingjs.client">
5-
<ui:style>
6-
.popupPanel {
7-
width:400px;
8-
z-index:20;
9-
font-family: arial,helvetica,sans-serif;
10-
font-size: 9pt;
11-
text-align: left;
12-
color: #444444;
13-
}
14-
.popupRowEven {
15-
background-color: #F1EFEC;
16-
}
17-
.popupNameRow {
18-
font-size:13pt;
19-
font-weight:bold;
20-
}
21-
</ui:style>
6+
7+
<ui:with field="mainRes" type="at.gmi.nordborglab.widgets.geneviewer.client.resources.MyResources" />
8+
229
<g:FlowPanel ui:field="container">
23-
<pjs:Processing ui:field="processing"></pjs:Processing>
24-
<g:PopupPanel ui:field = "description_popup" animationEnabled = "true" addStyleNames='{style.popupPanel}'>
25-
<g:HTMLPanel>
26-
<table cellspacing="1" cellpadding="2" width="100%" colspan="2" >
27-
<tr colspan="2" >
28-
<td colspan="2" align="left" class="{style.popupNameRow}" >
29-
Gene Model: <span ui:field="name_label" ></span>
30-
</td>
31-
</tr>
32-
<tr class="{style.popupRowEven}">
33-
<th align="left">Position:</th>
34-
<td>
35-
<g:Label ui:field="position_label"></g:Label>
36-
</td>
37-
</tr>
38-
<tr >
39-
<th align="left" valign="top">Description:</th>
40-
<td><g:Label ui:field="description_label"></g:Label></td>
41-
</tr>
42-
</table>
43-
</g:HTMLPanel>
44-
</g:PopupPanel>
10+
<g:ToggleButton ui:field="settings_btn" addStyleNames="{mainRes.style.settingsButton}" />
11+
<pjs:Processing ui:field="processing" addStyleNames="{mainRes.style.geneviewer}"></pjs:Processing>
12+
<dyg:Dygraphs ui:field="genomeStatChart"></dyg:Dygraphs>
13+
<g:PopupPanel ui:field="settings_popup" animationEnabled="true" addStyleNames="{mainRes.style.settingsPopup}">
14+
<g:HTMLPanel addStyleNames="{mainRes.style.settingsContent}">
15+
<div class="{mainRes.style.settingsContentTitle}">Overview Tracks:</div>
16+
<g:HTMLPanel ui:field="track_container" />
17+
</g:HTMLPanel>
18+
</g:PopupPanel>
19+
20+
<g:PopupPanel ui:field = "description_popup" animationEnabled = "true" addStyleNames='{mainRes.style.popupPanel}'>
21+
<g:HTMLPanel>
22+
<table cellspacing="1" cellpadding="2" width="100%" colspan="2" >
23+
<tr colspan="2" >
24+
<td colspan="2" align="left" class="{mainRes.style.popupNameRow}" >
25+
Gene Model: <span ui:field="name_label" ></span>
26+
</td>
27+
</tr>
28+
<tr class="{mainRes.style.popupRowEven}">
29+
<th align="left">Position:</th>
30+
<td>
31+
<g:Label ui:field="position_label"></g:Label>
32+
</td>
33+
</tr>
34+
<tr >
35+
<th align="left" valign="top">Description:</th>
36+
<td><g:Label ui:field="description_label"></g:Label></td>
37+
</tr>
38+
</table>
39+
</g:HTMLPanel>
40+
</g:PopupPanel>
4541
</g:FlowPanel>
4642

4743
</ui:UiBinder>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
22

3+
import java.util.List;
4+
35

46
public interface DataSource {
57

68
public void fetchGenes(String chr, int start, int end, boolean getFeatures, DataSourceCallback callback);
79
public void fetchGenesFromPrefix(String query,FetchGenesFromQueryCallback callback);
810
public void searchGene(String query, SearchGeneCallback callback);
911
public void fetchGeneDescription(String name,FetchGeneDescriptionCallback callback);
12+
public void fetchGenomeStatsData(List<GenomeStat> genomeStats,String chr,FetchGenomeStatsDataCallback callback);
13+
public void fetchGenomeStatsList(FetchGenomeStatsListCallback callback);
1014
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import java.util.List;
4+
5+
import com.google.gwt.visualization.client.DataTable;
6+
7+
8+
9+
public interface FetchGenomeStatsDataCallback {
10+
void onFetchGenomeStats(DataTable statsDataTable);
11+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import java.util.List;
4+
5+
public interface FetchGenomeStatsListCallback {
6+
void onFetchGenomeStatsList(List<GenomeStat> genomeStats);
7+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import java.util.List;
4+
5+
public class GenomeStat {
6+
7+
private final String name;
8+
private final String label;
9+
private final String color;
10+
private final boolean isStepPlot;
11+
private final boolean isStackable;
12+
13+
public GenomeStat(String name,String color,boolean isStackable,boolean isStepPlot,String label) {
14+
this.name = name;
15+
this.color = color;
16+
this.isStackable = isStackable;
17+
this.isStepPlot = isStepPlot;
18+
this.label = label;
19+
}
20+
21+
public String getName() {
22+
return name;
23+
}
24+
25+
public String getLabel() {
26+
if (label == null || label.isEmpty())
27+
return name;
28+
return label;
29+
}
30+
31+
public String getColor() {
32+
return color;
33+
}
34+
35+
public boolean isStackable() {
36+
return isStackable;
37+
}
38+
39+
public boolean isStepPlot() {
40+
return isStepPlot;
41+
}
42+
43+
public static GenomeStat getFromName(List<GenomeStat> stats,String name) {
44+
for (GenomeStat stat: stats) {
45+
if (stat != null && stat.getName().equals(name)){
46+
return stat;
47+
}
48+
}
49+
return null;
50+
}
51+
}

src/at/gmi/nordborglab/widgets/geneviewer/client/datasource/impl/JBrowseDataSourceImpl.java

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package at.gmi.nordborglab.widgets.geneviewer.client.datasource.impl;
22

33
import java.util.ArrayList;
4+
import java.util.Iterator;
5+
import java.util.List;
46

57
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.AbstractHttpDataSource;
68
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.DataSourceCallback;
79
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGeneDescriptionCallback;
810
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGenesFromQueryCallback;
11+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGenomeStatsDataCallback;
12+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGenomeStatsListCallback;
913
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.Gene;
14+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.GenomeStat;
1015
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.SearchGeneCallback;
1116

1217
import com.google.gwt.core.client.JsArray;
@@ -15,11 +20,12 @@
1520
import com.google.gwt.http.client.RequestCallback;
1621
import com.google.gwt.http.client.Response;
1722
import com.google.gwt.json.client.JSONArray;
18-
import com.google.gwt.json.client.JSONBoolean;
1923
import com.google.gwt.json.client.JSONNumber;
2024
import com.google.gwt.json.client.JSONObject;
2125
import com.google.gwt.json.client.JSONParser;
2226
import com.google.gwt.json.client.JSONValue;
27+
import com.google.gwt.user.client.Window;
28+
import com.google.gwt.visualization.client.DataTable;
2329

2430
public class JBrowseDataSourceImpl extends AbstractHttpDataSource{
2531

@@ -73,6 +79,7 @@ public void onResponseReceived(Request request, Response response) {
7379
Gene gene = new Gene(gene_json.get(1).isString().stringValue(),
7480
gene_json.get(2).isString().stringValue(),(int)gene_json.get(3).isNumber().doubleValue(),(int)gene_json.get(4).isNumber().doubleValue(),gene_json.get(5).isString().stringValue());
7581
callback.onSearchGenes(gene);
82+
7683
}
7784
}
7885

@@ -164,4 +171,89 @@ public void onError(Request request, Throwable exception) {
164171

165172
}
166173
}
174+
175+
@Override
176+
public void fetchGenomeStatsData(List<GenomeStat> genomeStats,String chr,
177+
final FetchGenomeStatsDataCallback callback) {
178+
Iterator<GenomeStat> iterator = genomeStats.iterator();
179+
String stats = iterator.next().getName();
180+
while (iterator.hasNext()) {
181+
stats = stats + ","+iterator.next().getName();
182+
}
183+
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,url+"getGenomeStatsData?stats="+stats+"&chr="+chr);
184+
request.setCallback(new RequestCallback() {
185+
186+
@Override
187+
public void onResponseReceived(Request request, Response response) {
188+
JSONValue value = JSONParser.parseStrict(response.getText());
189+
JSONObject retval = value.isObject();
190+
if (retval.get("status").isString().stringValue().equals("OK"))
191+
{
192+
String dataTable_str = retval.get("data").isString().stringValue();
193+
DataTable dataTable = DataTable.create(JSONParser.parseLenient(dataTable_str).isObject().getJavaScriptObject());
194+
callback.onFetchGenomeStats(dataTable);
195+
}
196+
}
197+
198+
@Override
199+
public void onError(Request request, Throwable exception) {
200+
// TODO Auto-generated method stub
201+
}
202+
});
203+
try
204+
{
205+
request.send();
206+
}
207+
catch (Exception e) {
208+
209+
}
210+
211+
}
212+
213+
@Override
214+
public void fetchGenomeStatsList(final FetchGenomeStatsListCallback callback) {
215+
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,url+"getGenomeStatsList");
216+
request.setCallback(new RequestCallback() {
217+
218+
@Override
219+
public void onResponseReceived(Request request, Response response) {
220+
if (response.getStatusCode() != 200)
221+
return;
222+
List<GenomeStat> genomeStats = new ArrayList<GenomeStat>();
223+
JSONValue value = JSONParser.parseStrict(response.getText());
224+
JSONObject retval = value.isObject();
225+
if (retval.get("status").isString().stringValue().equals("OK"))
226+
{
227+
JSONArray stats_array = retval.get("stats").isArray();
228+
for (int i = 0;i<stats_array.size();i++) {
229+
JSONObject stats_item = stats_array.get(i).isObject();
230+
boolean isStackable = true;
231+
boolean isStepPlot = false;
232+
String label = null;
233+
if (stats_item.containsKey("isStepPlot"))
234+
isStepPlot = stats_item.get("isStepPlot").isBoolean().booleanValue();
235+
if (stats_item.containsKey("isStackable"))
236+
isStackable = stats_item.get("isStackable").isBoolean().booleanValue();
237+
if (stats_item.containsKey("label"))
238+
label = stats_item.get("label").isString().stringValue();
239+
genomeStats.add(new GenomeStat(stats_item.get("name").isString().stringValue(), "blue",isStackable,isStepPlot,label));
240+
}
241+
callback.onFetchGenomeStatsList(genomeStats);
242+
}
243+
}
244+
245+
@Override
246+
public void onError(Request request, Throwable exception) {
247+
// TODO Auto-generated method stub
248+
}
249+
});
250+
try
251+
{
252+
request.send();
253+
}
254+
catch (Exception e) {
255+
256+
}
257+
258+
}
167259
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.resources;
2+
3+
import com.google.gwt.resources.client.ClientBundle;
4+
import com.google.gwt.resources.client.CssResource;
5+
import com.google.gwt.resources.client.ImageResource;
6+
7+
8+
public interface MyResources extends ClientBundle {
9+
10+
public interface MainStyle extends CssResource {
11+
String popupPanel();
12+
String popupRowEven();
13+
String popupNameRow();
14+
String geneviewer();
15+
String settingsPopup();
16+
String settingsButton();
17+
String settingsContent();
18+
String settingsContentTitle();
19+
//String settingsContentItemChecked();
20+
String settingsContentItemCheckboxChecked();
21+
String settingsContentItem();
22+
String settingsContentItemText();
23+
String settingsContentItemCheckbox();
24+
}
25+
26+
@Source("style.css")
27+
MainStyle style();
28+
29+
@Source("checkmark.png")
30+
ImageResource checkmark();
31+
32+
@Source("settings_icon.png")
33+
ImageResource settings_icon();
34+
}
Loading
Loading

0 commit comments

Comments
 (0)