package org.vaadin.smartgwt.client.util;
import org.vaadin.rpc.client.ClientSideHandler;
import org.vaadin.rpc.client.ClientSideProxy;
import org.vaadin.rpc.shared.Method;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
public class VSC extends Widget implements Paintable {
private final Element element = DOM.createDiv();
protected String paintableId;
private ApplicationConnection client;
private final ClientSideProxy rpc = new ClientSideProxy("VSC", new ClientSideHandlerImpl());
public VSC() {
rpc.register("sayNoCallback", new Method() {
public void invoke(final String methodName, final Object[] data) {
if (data.length == 1) {
SC.say((String) data[0]);
} else {
SC.say((String) data[0], (String) data[1]);
}
}
});
rpc.register("sayWithCallback", new Method() {
public void invoke(final String methodName, final Object[] data) {
if (data.length == 1) {
SC.say((String) data[0], new BooleanCallback() {
@Override
public void execute(Boolean value) {
client.updateVariable(paintableId, "callback", value != null ? value : false, true);
}
});
} else {
SC.say((String) data[0], (String) data[1], new BooleanCallback() {
@Override
public void execute(Boolean value) {
client.updateVariable(paintableId, "callback", value != null ? value : false, true);
}
});
}
}
});
rpc.register("confirm", new Method() {
@Override
public void invoke(String methodName, Object[] params) {
final int key = (Integer) params[0];
final String message = (String) params[1];
final BooleanCallback callback = new BooleanCallback() {
@Override
public void execute(Boolean value) {
client.updateVariable(paintableId, "callbackKey", key, false);
if (value == null) {
client.updateVariable(paintableId, "callback", "null", true);
} else {
client.updateVariable(paintableId, "callback", value, true);
}
}
};
if (params.length < 2) {
SC.confirm(message, callback);
} else {
SC.confirm((String) params[2], message, callback);
}
}
});
rpc.register("ask", new Method() {
public void invoke(final String methodName, final Object[] data) {
SC.ask((String) data[1], (String) data[2], new BooleanCallback() {
@Override
public void execute(Boolean value) {
client.updateVariable(paintableId, "callbackKey", (Integer) data[0], false);
if (value == null) {
client.updateVariable(paintableId, "callback", "null", true);
} else {
client.updateVariable(paintableId, "callback", value, true);
}
}
});
}
});
}
@Override
public Element getElement() {
return element;
}
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
rpc.update(this, uidl, client);
this.client = client;
paintableId = uidl.getId();
}
private class ClientSideHandlerImpl implements ClientSideHandler {
@Override
public boolean initWidget(Object[] params) {
return false;
}
@Override
public void handleCallFromServer(String method, Object[] params) {
}
}
}