package com.akjava.gwt.lib.client; import java.util.ArrayList; import java.util.List; import com.akjava.gwt.lib.client.datalist.SimpleTextData; import com.akjava.gwt.lib.client.datalist.SimpleTextDataDataConverter; /** * trying to use Storage data as simple list datas * * however little bit complex * @author aki * */ public class StorageDataList { private String key; public String getKey() { return key; } public static final String KEY_INDEX="_IND_"; public static final String KEY_DATA="_DAT_"; public static final String KEY_HEADER="_HED_"; private IStorageControler controler; public StorageDataList(IStorageControler controler,String key){ this.controler=controler; this.key=key; } public int incrementId(){ try{ int index=controler.getValue(key+KEY_INDEX, 0); int ret=index; index++; controler.setValue(key+KEY_INDEX, index); return ret; }catch(StorageException e){ onError(e); } return -1; } private void onError(StorageException e){ if(exceptionListener!=null){ exceptionListener.onError(e); }else{ LogUtils.log("Storage-Error:"+e.getMessage()); } } public int getCurrentId(){ try{ return controler.getValue(key+KEY_INDEX, 0); }catch(StorageException e){ onError(e); } return -1; } //becareful public void setCurrentId(int index){ try{ controler.setValue(key+KEY_INDEX, index); }catch(StorageException e){ onError(e); } } private String[] splitCdateAndData(String line){ String[] result=new String[2]; for(int i=0;i<line.length();i++){ if(Character.isDigit(line.charAt(i))){ continue; }else if(line.charAt(i)==','){ //find split result[0]=line.substring(i+1); result[1]=line.substring(0,i); return result; }else{ //not found result[0]=line; result[1]=""; return result; } } //just number if(result[0]==null){ result[0]=line; result[1]=""; } return result; } //this split cdate & data public List<SimpleTextData> getDataList(){ try{ List<SimpleTextData> values=new ArrayList<SimpleTextData>(); int id=getCurrentId(); for(int i=0;i<id;i++){ String header=controler.getValue(key+KEY_HEADER+i, null); if(header!=null){ String data=controler.getValue(key+KEY_DATA+i, "");//now null as empty String[] data_cdate=splitCdateAndData(data); SimpleTextData sdata=new SimpleTextData(i, header,data_cdate[0],data_cdate[1]); //LogUtils.log(i+","+sdata.getName()+","+sdata.getData()+",cdate="+sdata.getCdate()); values.add(sdata); } } return values; }catch(StorageException e){ onError(e); } return null; } public List<HeaderAndValue> getDatas(){ try{ List<HeaderAndValue> values=new ArrayList<HeaderAndValue>(); int id=getCurrentId(); for(int i=0;i<id;i++){ String header=controler.getValue(key+KEY_HEADER+i, null); if(header!=null){ String data=controler.getValue(key+KEY_DATA+i, "");//now null as empty values.add(new HeaderAndValue(i,header,data)); } } return values; }catch(StorageException e){ onError(e); } return null; } public void clearData(int id){ try{ controler.removeValue(key+KEY_DATA+id); controler.removeValue(key+KEY_HEADER+id); }catch(StorageException e){ onError(e); } } /**use add data * @deprecated * @param header * @param value */ public void setDataValue(String header,String value){ try{ int id=getCurrentId(); controler.setValue(key+KEY_DATA+id, value); controler.setValue(key+KEY_HEADER+id, header); }catch(StorageException e){ onError(e); } } private static SimpleTextDataDataConverter converter=new SimpleTextDataDataConverter(); public int addData(SimpleTextData data){ int id=-1; try{ id=getCurrentId(); controler.setValue(key+KEY_DATA+id, converter.convert(data)); controler.setValue(key+KEY_HEADER+id, data.getName()); incrementId(); data.setId(id); return id; }catch(StorageException e){ onError(e); } return -1; } public int addData(String header,String value){ int id=-1; try{ id=getCurrentId(); controler.setValue(key+KEY_DATA+id, value); controler.setValue(key+KEY_HEADER+id, header); incrementId(); return id; }catch(StorageException e){ onError(e); } return -1; } public void updateDataHeader(int id,String header){ try{ controler.setValue(key+KEY_HEADER+id, header); }catch(StorageException e){ onError(e); } } public void updateDataValue(int id,String value){ try{ controler.setValue(key+KEY_DATA+id, value); }catch(StorageException e){ onError(e); } } public void updateData(int id,String header,String value){ try{ controler.setValue(key+KEY_HEADER+id, header); controler.setValue(key+KEY_DATA+id, value); }catch(StorageException e){ onError(e); } } public void updateData(SimpleTextData data){ try{ int id=data.getId(); controler.setValue(key+KEY_HEADER+id, data.getName()); controler.setValue(key+KEY_DATA+id, converter.convert(data)); }catch(StorageException e){ onError(e); } } public SimpleTextData getDataValue(int id){ try{ String header=controler.getValue(key+KEY_HEADER+id, null); if(header!=null){ String data=controler.getValue(key+KEY_DATA+id, ""); String[] data_cdate=splitCdateAndData(data); SimpleTextData sdata=new SimpleTextData(id, header,data_cdate[0],data_cdate[1]); return sdata; } return null; }catch(StorageException e){ onError(e); } return null; } public HeaderAndValue getDataAt(int id){ try{ String header=controler.getValue(key+KEY_HEADER+id, null); if(header!=null){ String data=controler.getValue(key+KEY_DATA+id, ""); return new HeaderAndValue(id,header,data); } return null; }catch(StorageException e){ onError(e); } return null; } /** * @deprecated * @author aki * */ public static class QuotaExceededError extends Error{ private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public QuotaExceededError(String message) { this.message=message; } private static final long serialVersionUID = 1L; } private StorageExceptionListener exceptionListener; public StorageExceptionListener getExceptionListener() { return exceptionListener; } public void setExceptionListener(StorageExceptionListener exceptionListener) { this.exceptionListener = exceptionListener; } public interface StorageExceptionListener{ public void onError(StorageException exception); } }