package com.akjava.gwt.hangout.test2.client;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.akjava.gwt.lib.hangouts.client.StringMap;
import com.akjava.gwt.lib.hangouts.client.data.Data;
import com.akjava.gwt.lib.hangouts.client.data.OnStateChanged;
import com.akjava.gwt.lib.hangouts.client.data.StateMetadata;
import com.akjava.gwt.lib.hangouts.client.data.StateMetadataMap;
import com.akjava.gwt.lib.hangouts.client.data.events.StateChangedEvent;
import com.akjava.gwt.lib.hangouts.client.data.listeners.StateChangedListener;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.StackLayoutPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
public class StateTest extends VerticalPanel {
public StateTest(){
StackLayoutPanel stacks=new StackLayoutPanel(Unit.PX);
stacks.setWidth("500px");
stacks.setHeight("400px");
HorizontalPanel main=new HorizontalPanel();
add(main);
main.add(stacks);
final VerticalPanel logsPanel = new VerticalPanel();
main.add(logsPanel);
logsPanel.add(new Label("[Events]"));
VerticalPanel setValueControler=new VerticalPanel();
setValueControler.setWidth("100%");
stacks.add(setValueControler, "SetValue() and ClearValue()", 25);
OnStateChanged.add(new StateChangedListener() {
@Override
public void onStateChanged(StateChangedEvent event) {
try{
ChangedPanel panel=new ChangedPanel(event);
Test2.log("log-panel:"+logsPanel);
logsPanel.insert(panel,1);
if(logsPanel.getWidgetCount()>3+1){
logsPanel.remove(logsPanel.getWidgetCount()-1);
}
}catch(Exception e){
Test2.log("error:"+e.getMessage());
}
}
});
setValueControler.add(new Label("[setValue]"));
HorizontalPanel setValues=new HorizontalPanel();
setValueControler.add(setValues);
setValues.add(new Label("key:"));
final TextBox setVKey=new TextBox();
setVKey.setText("hello");
setValues.add(setVKey);
setValues.add(new Label("value:"));
final TextBox setVValue=new TextBox();
setVValue.setText("world");
setValues.add(setVValue);
Button setValueButton=new Button("setValue");
setValues.add(setValueButton);
setValueButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Data.setValue(setVKey.getText(), setVValue.getText());
}
});
setValueControler.add(new Label("[clearValue]"));
HorizontalPanel clearValues=new HorizontalPanel();
setValueControler.add(clearValues);
clearValues.add(new Label("key:"));
final TextBox clearVKey=new TextBox();
clearVKey.setText("hello");
clearValues.add(clearVKey);
Button clearValueButton=new Button("clearValue");
clearValues.add(clearValueButton);
clearValueButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Data.clearValue(clearVKey.getText());
}
});
VerticalPanel submitDeltaControler=new VerticalPanel();
submitDeltaControler.setWidth("100%");
stacks.add(submitDeltaControler, "SubmitDelta()", 25);
submitDeltaControler.add(new Label("[add]"));
HorizontalPanel addValues=new HorizontalPanel();
submitDeltaControler.add(addValues);
addValues.add(new Label("key:"));
final TextBox addVKey=new TextBox();
addVKey.setText("hello");
addValues.add(addVKey);
addValues.add(new Label("value:"));
final TextBox addVValue=new TextBox();
addVValue.setText("world");
addValues.add(addVValue);
//
submitDeltaControler.add(new Label("[remove]"));
HorizontalPanel removeValues=new HorizontalPanel();
submitDeltaControler.add(removeValues);
removeValues.add(new Label("key:"));
final TextBox removeVKey=new TextBox();
removeVKey.setText("hello2");
removeValues.add(removeVKey);
Button submitButton=new Button("submitDelta");
submitDeltaControler.add(submitButton);
submitButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Map<String,String> adds=new HashMap<String, String>();
if(!addVKey.getText().isEmpty()){
adds.put(addVKey.getText(), addVValue.getText());
}
List<String> removes=new ArrayList<String>();
if(!removeVKey.getText().isEmpty()){
removes.add(removeVKey.getText());
}
Data.submitDelta(adds, removes);
}
});
}
public class ChangedPanel extends VerticalPanel{
public ChangedPanel(StateChangedEvent event){
this.setBorderWidth(1);
JsArray<StateMetadata> added=event.getAddedKeys();
add(new Label("[added]"));
for(int i=0;i<added.length();i++){
StateMetadata meta=added.get(i);
String text="";
text+="key="+meta.getKey()+",";
text+="value="+meta.getValue()+",";
text+="diff="+meta.getTimediff()+",";
text+="stamp="+new Date((long)meta.getTimestamp());
add(new Label(text));
}
JsArrayString removed=event.getRemovedKeys();
add(new Label("[removed]"));
for(int i=0;i<removed.length();i++){
add(new Label(removed.get(i)));
}
add(new Label("[metas]"));
StateMetadataMap metas=event.getMetadata();
JsArrayString metakeys=metas.keys();
for(int i=0;i<metakeys.length();i++){
String key=metakeys.get(i);
StateMetadata meta=metas.get(key);
String text="";
text+="key="+meta.getKey()+",";
text+="value="+meta.getValue()+",";
text+="diff="+meta.getTimediff()+",";
text+="stamp="+new Date((long)meta.getTimestamp());
add(new Label(text));
}
add(new Label("[states]"));
StringMap states=event.getState();
JsArrayString stateKeys=states.keys();
for(int i=0;i<stateKeys.length();i++){
String text="";
String key=stateKeys.get(i);
text+="key="+key+",";
text+="value="+states.get(key);
add(new Label(text));
}
}
}
}