package com.akjava.gwt.common.form;
import com.akjava.gwt.lib.client.LogUtils;
import com.akjava.gwt.lib.client.StorageControler;
import com.akjava.gwt.lib.client.StorageException;
import com.google.common.base.Strings;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.RootPanel;
/**
* for integrate normal html form & gwt
* however not so good work
* @author aki
*
*/
public class FormIntegrator {
private StorageControler storageControler=new StorageControler(false);
private String formKey;
public FormIntegrator(String formKey,String initialValue,String sessionId,String targetId) throws StorageException{
this.formKey=formKey;
if(storageControler!=null){
lastSessionId=storageControler.getValue(formKey+"_fi_session_id", "");
}
this.sessionId=sessionId;
this.initialValue=initialValue;
this.targetId = targetId;
if(storageControler!=null){
//overwrite sessionId
if(sessionId!=null && !sessionId.isEmpty()){
storageControler.setValue(formKey+"_fi_session_id", sessionId);
}
}
}
private String initialValue;//used initial widget value & keep value for reset
public String getInitialValue() {
return initialValue;
}
private String sessionId;//used for store modified
private String targetId;//used for sync normal-input(text or hidden)
private String lastSessionId;
public void updateValue(String value) throws StorageException{
//only save if sessionId exist
if(!Strings.isNullOrEmpty(sessionId)){
storageControler.setValue(formKey+"_fi_last_value", value);
}
//only sync value if targetId exist
if(!Strings.isNullOrEmpty(targetId)){
setInputValueById(targetId, value);
}
}
private void setInputValueById(String id,String value){
RootPanel panel=RootPanel.get(id);
if(panel!=null){
Element element=panel.getElement();
element.setAttribute("value",value);
}
}
public String getValue() throws StorageException{
String value=null;
if(storageControler==null){
LogUtils.log("null storage controler");
return initialValue;
}
if(Strings.isNullOrEmpty(sessionId)){//no integrate
value= initialValue;
LogUtils.log("no-integrate");
}else{
if(lastSessionId.equals(sessionId)){
LogUtils.log("browser back");
//maybe browser back
value= storageControler.getValue(formKey+"_fi_last_value", "");
}else{
LogUtils.log("new-page:last="+lastSessionId+",new="+sessionId);
//page new loaded
storageControler.setValue(formKey+"_fi_last_value", initialValue);
value= initialValue;
}
}
if(!Strings.isNullOrEmpty(targetId)){
setInputValueById(targetId, value);
}
return value;
}
}