blob: 84ed3f3944f938c7476330c58f09291679099ff0 [file] [log] [blame]
package org.apache.hupa.client.storage;
import org.apache.hupa.shared.storage.AppCacheMemory;
import org.apache.hupa.shared.storage.AppSerializer;
import com.google.gwt.storage.client.Storage;
import com.google.gwt.storage.client.StorageMap;
import com.google.inject.Inject;
/**
* AppCache implementation in Browser localStorage.
*
* @author manolo
*/
public class AppCacheHTML5 extends AppCacheMemory {
Storage localStorage;
StorageMap storageMap;
@Inject
public AppCacheHTML5(AppSerializer s) {
super(s);
}
@Override
public void createStorageImplementationSync() {
localStorage = Storage.getLocalStorageIfSupported();
if (localStorage == null) {
super.createStorageImplementationSync();
return;
}
try {
storageMap = new StorageMap(localStorage);
localStorage.setItem(".", ".");
localStorage.getItem(".");
storageMap.containsKey(".");
localStorage.removeItem(".");
} catch (Exception e) {
super.createStorageImplementationSync();
return;
}
syncStorage = new SyncStorage() {
@Override
public void setItem(String key, Object data) {
localStorage.setItem(key, "" + data);
}
@Override
public void removeItem(String key) {
if (storageMap.containsKey(key)) {
localStorage.removeItem(key);
}
}
@Override
public int getLength() {
return localStorage.getLength();
}
@Override
public String getItem(String key) {
String ret = localStorage.getItem(key);
return ret;
}
@Override
public boolean containsKey(String key) {
return storageMap.containsKey(key);
}
@Override
public void clear() {
localStorage.clear();
}
@Override
public String key(int i) {
return localStorage.key(i);
}
@Override
public native void log(Object o) /*-{
if ($wnd.console && typeof $wnd.console.log == 'function')
$wnd.console.log(o);
}-*/;
@Override
public native int getSize() /*-{
try {
return JSON.stringify(localStorage).length;
} catch (e) {
return 0;
}
}-*/;
};
}
}