package com.akjava.gwt.lib.client;
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.storage.client.Storage;
public class StorageControler implements IStorageControler {
private Storage storage;
public StorageControler(){
storage = Storage.getLocalStorageIfSupported();
}
public StorageControler(boolean isLocalStorage){
if(isLocalStorage){
storage = Storage.getLocalStorageIfSupported();
}else{
storage=Storage.getSessionStorageIfSupported();
}
}
/* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#isAvailable()
*/
@Override
public boolean isAvailable(){
return storage!=null;
}
/*
* Quota error usually happen
* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#setValue(java.lang.String, java.lang.String)
*/
@Override
public void setValue(String key,String value) throws StorageException{
if(storage==null){
throw new StorageException("Storage not found");
}else{
try{
if(value==null){//for null set
storage.removeItem(key);
}else{
storage.setItem(key, value);
}
}catch (Exception e) {
throw new StorageException(e.getMessage());
}
}
}
/* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#setValue(java.lang.String, int)
*/
@Override
public void setValue(String key,int value) throws StorageException{
if(storage==null){
throw new StorageException("Storage not found");
}else{
try{
storage.setItem(key, ""+value);
}catch(Exception e){
throw new StorageException(e.getMessage());
}
}
}
/* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#removeValue(java.lang.String)
*/
@Override
public void removeValue(String key){
if(storage==null){
return;
}else{
storage.removeItem(key);
}
}
/* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#getValue(java.lang.String, int)
*/
@Override
public int getValue(String key,int defaultValue){
if(storage==null){
return defaultValue;
}else{
String v=storage.getItem(key);
if(v==null){
return defaultValue;
}else{
try{
return Integer.parseInt(v);
}catch(Exception e){}
return defaultValue;
}
}
}
//TODO add IStorageControler and test all
public boolean getValue(String key,boolean defaultValue){
if(storage==null){
return defaultValue;
}else{
String v=storage.getItem(key);
if(v==null){
return defaultValue;
}else{
try{
return Boolean.parseBoolean(v);
}catch(Exception e){}
return defaultValue;
}
}
}
//TODO add IStorageControler and test all
public void setValue(String key,boolean value) throws StorageException{
if(storage==null){
throw new StorageException("Storage not found");
}else{
try{
storage.setItem(key, ""+value);
}catch(Exception e){
throw new StorageException(e.getMessage());
}
}
}
/* (non-Javadoc)
* @see com.akjava.gwt.lib.client.IStorageControler#getValue(java.lang.String, java.lang.String)
*/
@Override
public String getValue(String key,String defaultValue){
if(storage==null){
return defaultValue;
}else{
String v=storage.getItem(key);
if(v==null){
return defaultValue;
}else{
return v;
}
}
}
public int getLength(){
return storage.getLength();
}
public String key(int index){
return storage.key(index);
}
public Map<String,String> toHashMap(){
Map<String,String> hashMap=new HashMap<String, String>();
for(int i=0;i<getLength();i++){
String key=key(i);
String value=getValue(key, "");
hashMap.put(key, value);
}
return hashMap;
}
}