Skip to content

Commit 96583af

Browse files
committed
Merge branch 'cache_genestats'
2 parents 83a669e + 8ef0dcc commit 96583af

File tree

8 files changed

+274
-45
lines changed

8 files changed

+274
-45
lines changed

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -515,10 +515,10 @@ public void onClick(ClickEvent event) {
515515
track_container.clear();
516516
for (GenomeStat stat:genomeStats) {
517517
Image checkbox_image = new Image(mainRes.checkmark());
518-
checkbox_image.setTitle("Click to add/remove "+ stat.getLabel()+" statistics to the chart as new series");
518+
checkbox_image.setTitle("Click to add/remove "+ stat.getDisplayName()+" statistics to the chart as new series");
519519
checkbox_image.setAltText(stat.getName());
520-
Anchor link = new Anchor(stat.getLabel());
521-
link.setTitle("Click to display "+ stat.getLabel()+" statistics");
520+
Anchor link = new Anchor(stat.getDisplayName());
521+
link.setTitle("Click to display "+ stat.getDisplayName()+" statistics");
522522
link.setName(stat.getName());
523523
FlowPanel panel = new FlowPanel();
524524
SimplePanel panel_names = new SimplePanel();
@@ -636,6 +636,8 @@ private void initStatisticsChart() {
636636

637637
@Override
638638
public void onUnderlay(UnderlayEvent event) {
639+
if (!processing.isLoaded())
640+
return;
639641
int zoomStart = processing.getInstance().getZoomStart();
640642
int zoomEnd = processing.getInstance().getZoomEnd();
641643
event.canvas.save();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
public interface Cache {
4+
5+
void put(Object key, Object value);
6+
7+
Object get(Object key);
8+
9+
void remove(Object key);
10+
11+
void clear();
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import com.google.gwt.visualization.client.DataTable;
4+
5+
public class CustomDataTable extends DataTable {
6+
7+
protected CustomDataTable() {}
8+
9+
public final native String toJSON() /*-{
10+
return this.toJSON();
11+
}-*/;
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import java.util.HashMap;
4+
5+
public class DefaultCacheImpl implements Cache {
6+
7+
private HashMap<Object, Object> map;
8+
9+
public DefaultCacheImpl() {
10+
this.map = new HashMap<Object, Object>();
11+
}
12+
13+
@Override
14+
public void put(Object key, Object value) {
15+
if (key == null) {
16+
throw new NullPointerException("key is null");
17+
}
18+
if (value == null) {
19+
throw new NullPointerException("value is null");
20+
}
21+
map.put(key, value);
22+
}
23+
24+
@Override
25+
public Object get(Object key) {
26+
// Check for null as Cache should not store null values / keys
27+
if (key == null) {
28+
throw new NullPointerException("key is null");
29+
}
30+
return map.get(key);
31+
}
32+
33+
@Override
34+
public void remove(Object key) {
35+
map.remove(key);
36+
}
37+
38+
@Override
39+
public void clear() {
40+
map.clear();
41+
}
42+
43+
}

src/main/java/at/gmi/nordborglab/widgets/geneviewer/client/datasource/GenomeStat.java

+36-29
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,50 @@
22

33
import java.util.List;
44

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-
}
5+
import com.google.gwt.core.client.JavaScriptObject;
6+
7+
public class GenomeStat extends JavaScriptObject{
208

21-
public String getName() {
22-
return name;
23-
}
249

25-
public String getLabel() {
10+
protected GenomeStat() {}
11+
12+
public final native String getName() /*-{
13+
return this.name;
14+
}-*/;
15+
16+
public final String getDisplayName() {
17+
String label = getLabel();
2618
if (label == null || label.isEmpty())
27-
return name;
19+
return getName();
2820
return label;
2921
}
3022

31-
public String getColor() {
32-
return color;
33-
}
23+
public final native String getLabel() /*-{
24+
if (typeof this.label != 'undefined') {
25+
return this.label;
26+
}
27+
return null;
28+
}-*/;
3429

35-
public boolean isStackable() {
36-
return isStackable;
37-
}
3830

39-
public boolean isStepPlot() {
40-
return isStepPlot;
41-
}
31+
32+
public final native String getColor() /*-{
33+
return this.color;
34+
}-*/;
35+
36+
public final native boolean isStackable() /*-{
37+
if (typeof this.isStackable != 'undefined') {
38+
return this.isStackable;
39+
}
40+
return true;
41+
}-*/;
42+
43+
public final native boolean isStepPlot() /*-{
44+
if (typeof this.isStepPlot != 'undefined') {
45+
return this.isStepPlot;
46+
}
47+
return false;
48+
}-*/;
4249

4350
public static GenomeStat getFromName(List<GenomeStat> stats,String name) {
4451
for (GenomeStat stat: stats) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import com.google.gwt.core.client.JavaScriptObject;
7+
import com.google.gwt.core.client.JsArray;
8+
import com.google.gwt.core.client.JsonUtils;
9+
import com.google.gwt.json.client.JSONArray;
10+
import com.google.gwt.json.client.JSONObject;
11+
import com.google.gwt.json.client.JSONValue;
12+
import com.google.gwt.storage.client.Storage;
13+
import com.google.gwt.visualization.client.DataTable;
14+
15+
public class LocalStorageImpl implements Cache{
16+
17+
public static enum TYPE {LOCAL,SESSION}
18+
private TYPE type;
19+
private Storage cacheStorage = null;
20+
21+
public LocalStorageImpl(TYPE type) throws Exception {
22+
this.type = type;
23+
if (type == TYPE.LOCAL) {
24+
cacheStorage = Storage.getLocalStorageIfSupported();
25+
}
26+
else {
27+
cacheStorage = Storage.getSessionStorageIfSupported();
28+
}
29+
if (cacheStorage == null) {
30+
throw new Exception("LocalStorage not supported");
31+
}
32+
}
33+
34+
35+
@Override
36+
public void put(Object key, Object value) {
37+
if (key == null) {
38+
throw new NullPointerException("key is null");
39+
}
40+
if (value == null) {
41+
throw new NullPointerException("value is null");
42+
}
43+
String jsonData = null;
44+
if (value instanceof List) {
45+
JSONArray array = new JSONArray();
46+
int index = 0;
47+
for (Object val:(List)value) {
48+
array.set(index,new JSONObject((JavaScriptObject)val));
49+
index = index +1;
50+
}
51+
jsonData = array.toString();
52+
}
53+
else
54+
{
55+
jsonData = ((CustomDataTable)value).toJSON();
56+
}
57+
cacheStorage.setItem(key.toString(), jsonData);
58+
}
59+
60+
@Override
61+
public Object get(Object key) {
62+
if (key == null) {
63+
throw new NullPointerException("key is null");
64+
}
65+
String jsonDataString = cacheStorage.getItem(key.toString());
66+
if (jsonDataString == null) {
67+
return null;
68+
}
69+
Object data = null;
70+
JavaScriptObject jsonData = JsonUtils.safeEval(jsonDataString);
71+
if (!key.equals("genomestatslist"))
72+
data = DataTable.create((JavaScriptObject)jsonData);
73+
else if (jsonData instanceof JsArray){
74+
JsArray<GenomeStat> jsonStats = (JsArray<GenomeStat>)jsonData;
75+
List<GenomeStat> stats = new ArrayList<GenomeStat>();
76+
for (int i = 0;i<jsonStats.length();i++) {
77+
stats.add(jsonStats.get(i));
78+
}
79+
data = (Object)stats;
80+
}
81+
return data;
82+
}
83+
84+
@Override
85+
public void remove(Object key) {
86+
cacheStorage.removeItem(key.toString());
87+
}
88+
89+
@Override
90+
public void clear() {
91+
cacheStorage.clear();
92+
93+
}
94+
95+
public TYPE getType() {
96+
return type;
97+
}
98+
99+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package at.gmi.nordborglab.widgets.geneviewer.client.datasource.impl;
2+
3+
import java.util.List;
4+
5+
import com.google.gwt.visualization.client.DataTable;
6+
7+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.Cache;
8+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGenomeStatsDataCallback;
9+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.FetchGenomeStatsListCallback;
10+
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.GenomeStat;
11+
12+
13+
public class JBrowseCacheDataSourceImpl extends JBrowseDataSourceImpl {
14+
15+
protected final Cache cache;
16+
private static String genomeStatsListKey ="genomestatslist";
17+
18+
public JBrowseCacheDataSourceImpl(String url,final Cache cache) {
19+
super(url);
20+
this.cache = cache;
21+
}
22+
23+
@Override
24+
public void fetchGenomeStatsData(List<GenomeStat> genomeStats, String chr,
25+
final FetchGenomeStatsDataCallback callback) {
26+
final String genomeStatsDataKey = getStatUrl(genomeStats)+"_"+chr;
27+
Object value = cache.get(genomeStatsDataKey);
28+
if (value != null && value instanceof DataTable) {
29+
callback.onFetchGenomeStats((DataTable)value);
30+
}
31+
else {
32+
super.fetchGenomeStatsData(genomeStats, chr,new FetchGenomeStatsDataCallback() {
33+
34+
@Override
35+
public void onFetchGenomeStats(DataTable statsDataTable) {
36+
cache.put(genomeStatsDataKey, statsDataTable);
37+
callback.onFetchGenomeStats(statsDataTable);
38+
}
39+
});
40+
}
41+
}
42+
43+
@Override
44+
public void fetchGenomeStatsList(final FetchGenomeStatsListCallback callback) {
45+
Object value = cache.get(genomeStatsListKey);
46+
if (value != null && value instanceof List) {
47+
callback.onFetchGenomeStatsList((List<GenomeStat>)value);
48+
}
49+
else {
50+
super.fetchGenomeStatsList(new FetchGenomeStatsListCallback() {
51+
52+
@Override
53+
public void onFetchGenomeStatsList(List<GenomeStat> genomeStats) {
54+
cache.put(genomeStatsListKey, genomeStats);
55+
callback.onFetchGenomeStatsList(genomeStats);
56+
}
57+
});
58+
}
59+
}
60+
61+
62+
}

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

+4-13
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import at.gmi.nordborglab.widgets.geneviewer.client.datasource.SearchGeneCallback;
1616

1717
import com.google.gwt.core.client.JsArray;
18+
import com.google.gwt.core.client.JsonUtils;
1819
import com.google.gwt.http.client.Request;
1920
import com.google.gwt.http.client.RequestBuilder;
2021
import com.google.gwt.http.client.RequestCallback;
@@ -229,19 +230,9 @@ public void onResponseReceived(Request request, Response response) {
229230
JSONObject retval = value.isObject();
230231
if (retval.get("status").isString().stringValue().equals("OK"))
231232
{
232-
JSONArray stats_array = retval.get("stats").isArray();
233-
for (int i = 0;i<stats_array.size();i++) {
234-
JSONObject stats_item = stats_array.get(i).isObject();
235-
boolean isStackable = true;
236-
boolean isStepPlot = false;
237-
String label = null;
238-
if (stats_item.containsKey("isStepPlot"))
239-
isStepPlot = stats_item.get("isStepPlot").isBoolean().booleanValue();
240-
if (stats_item.containsKey("isStackable"))
241-
isStackable = stats_item.get("isStackable").isBoolean().booleanValue();
242-
if (stats_item.containsKey("label"))
243-
label = stats_item.get("label").isString().stringValue();
244-
genomeStats.add(new GenomeStat(stats_item.get("name").isString().stringValue(), "blue",isStackable,isStepPlot,label));
233+
JsArray<GenomeStat> array = JsonUtils.safeEval(retval.get("stats").toString());
234+
for (int i =0;i<array.length();i++) {
235+
genomeStats.add(array.get(i));
245236
}
246237
callback.onFetchGenomeStatsList(genomeStats);
247238
}

0 commit comments

Comments
 (0)