Skip to content

Commit 8ef0dcc

Browse files
committed
added Caching support (localStorage and HashMap)
1 parent 79e377c commit 8ef0dcc

File tree

4 files changed

+217
-0
lines changed

4 files changed

+217
-0
lines changed
Lines changed: 13 additions & 0 deletions
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+
}
Lines changed: 43 additions & 0 deletions
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+
}
Lines changed: 99 additions & 0 deletions
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+
}

0 commit comments

Comments
 (0)