123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- package com.itmill.toolkit.terminal.gwt.client;
-
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.Vector;
-
- import com.google.gwt.core.client.EntryPoint;
- import com.google.gwt.http.client.Request;
- import com.google.gwt.http.client.RequestBuilder;
- import com.google.gwt.http.client.RequestCallback;
- import com.google.gwt.http.client.RequestException;
- import com.google.gwt.http.client.Response;
- import com.google.gwt.http.client.URL;
- import com.google.gwt.json.client.JSONArray;
- import com.google.gwt.json.client.JSONObject;
- import com.google.gwt.json.client.JSONParser;
- import com.google.gwt.json.client.JSONValue;
- import com.google.gwt.user.client.ui.RootPanel;
- import com.itmill.toolkit.terminal.gwt.client.ui.Component;
- import com.itmill.toolkit.terminal.gwt.client.ui.RootWindow;
-
- /**
- * Entry point classes define <code>onModuleLoad()</code>.
- */
- public class Client implements EntryPoint {
-
- private String appUri = "http://127.0.0.1:8080/tk/HelloWorld";
-
- // TODO remove repaintAll things start to pile up
- private RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, appUri
- + "/UIDL/?repaintAll=1&");
-
- private Console console;
-
- private RootWindow rw;
-
- private Vector pendingVariables = new Vector();
-
- private HashMap components = new HashMap();
-
- private int requestCount = 0;
-
- /**
- * This is the entry point method.
- */
- public void onModuleLoad() {
-
- console = new Console(RootPanel.get("itmtk-loki"));
-
- console.log("muutos");
-
- console.log("Starting app");
-
- console.log("Makin fake UIDL Request to fool servlet of an app init");
- RequestBuilder rb2 = new RequestBuilder(RequestBuilder.GET, appUri);
- try {
- rb2.sendRequest("", new RequestCallback() {
-
- public void onResponseReceived(Request request,
- Response response) {
- console
- .log("Got fake response... sending initial UIDL request");
- makeUidlRequest("repaintAll=1");
- }
-
- public void onError(Request request, Throwable exception) {
- // TODO Auto-generated method stub
-
- }
-
- });
- } catch (RequestException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
-
- }
-
- private void makeUidlRequest(String requestData) {
- console.log("Making UIDL Request");
- rb = new RequestBuilder(RequestBuilder.GET, appUri
- + "/UIDL/?requestId=" + (++requestCount) + "&" + requestData);
- try {
- rb.sendRequest(requestData, new RequestCallback() {
- public void onError(Request request, Throwable exception) {
- console.error("Got error");
- }
-
- public void onResponseReceived(Request request,
- Response response) {
- console.log("Got response:" + response.getText() + "\n");
- JSONValue update = JSONParser.parse(response.getText()
- .substring(3)
- + "}");
-
- // TEST
- console.log(update.toString());
- JSONArray changes = (JSONArray) ((JSONObject) update)
- .get("changes");
-
- for (int i = 0; i < changes.size(); i++) {
- try {
- console.log("Change " + i);
- UIDL u = new UIDL((JSONArray) changes.get(i));
- console.log("\nUIDL = " + u);
- } catch (Throwable e) {
- e.printStackTrace();
- }
-
- }
-
- // handleUIDL(update.isObject());
- }
- });
- console.log("Request sent");
-
- } catch (RequestException e) {
- console.error(e.getMessage());
- }
- }
-
- private void handleUIDL(JSONObject update) {
- JSONObject changes;
- if (update.containsKey("meta")) {
- JSONObject meta = update.get("meta").isObject();
- }
-
- if ((changes = update.isObject()) != null) {
- Set keys = changes.keySet();
- Iterator it = keys.iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- if (key.startsWith("change")) {
- JSONObject change = changes.get(key).isObject();
- JSONArray children;
- if ((children = change.isArray()) != null) {
- for (int i = 0; i < children.size(); i++) {
- applyChange(children.get(i).isObject());
- }
- }
- }
- }
- }
-
- }
-
- private void applyChange(JSONObject change) {
- if (change.get("attr").isObject().get("id").isString().equals("PID0")) {
- console.log("Rendering main window");
- // rw = new RootWindow(change, this);
- rw.setClient(this);
- } else {
- // int pid = Component.getIdFromUidl(change);
- // console.log("Updating node: " + change.getNodeName() + ",
- // PID:"+pid);
- // Component c = getPaintable(pid);
- // c.updateFromUidl(change);
- }
- }
-
- /**
- * Queues a changed variable to be sent to server
- *
- * @param variable
- */
- public void updateVariable(Variable variable) {
- // remove variable first so we will maintain the correct order (in case
- // of "double change")
- pendingVariables.remove(variable);
- pendingVariables.add(variable);
- }
-
- /**
- * Sends queued variables to server
- *
- */
- public void flushVariables() {
-
- StringBuffer sb = new StringBuffer();
-
- int i = 0;
- while (!pendingVariables.isEmpty()) {
- Variable v = (Variable) pendingVariables.lastElement();
- pendingVariables.removeElement(v);
-
- if (i > 0) {
- sb.append("&");
- }
- // encode the characters in the name
- String encodedName = URL.encodeComponent(v.getId());
- sb.append(encodedName);
- sb.append("=");
-
- // encode the characters in the value
- String encodedValue = URL.encodeComponent(v.getEncodedValue());
- sb.append(encodedValue);
- }
-
- String buf = sb.toString();
-
- console.log("Making following request to server:");
- console.log(buf);
-
- makeUidlRequest(buf);
- }
-
- public void registerComponent(Component component) {
- components.put("" + component.getId(), component);
- }
-
- public Component getPaintable(int pid) {
- return (Component) components.get("" + pid);
- }
-
- }
|