Browse Source

svn changeset:1591/svn branch:trunk

tags/6.7.0.beta1
Matti Tahvonen 17 years ago
parent
commit
8438a5fc8a

+ 3
- 1
src/com/itmill/toolkit/terminal/gwt/client/BooleanVariable.java View File

@@ -1,5 +1,7 @@
package com.itmill.toolkit.terminal.gwt.client;

import com.itmill.toolkit.terminal.gwt.client.ui.Component;

public class BooleanVariable extends Variable {

private boolean value = true;
@@ -9,7 +11,7 @@ public class BooleanVariable extends Variable {
}

void update() {
public void update() {
owner.getClient().updateVariable(this);
if(immediate)
owner.getClient().flushVariables();

+ 1
- 0
src/com/itmill/toolkit/terminal/gwt/client/Client.java View File

@@ -15,6 +15,7 @@ import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import com.itmill.toolkit.terminal.gwt.client.ui.Component;
import com.itmill.toolkit.terminal.gwt.client.ui.RootWindow;

/**

+ 0
- 178
src/com/itmill/toolkit/terminal/gwt/client/GwtClient.java View File

@@ -1,178 +0,0 @@
package com.itmill.toolkit.terminal.gwt.client;

import java.util.HashMap;
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.user.client.ui.RootPanel;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import com.itmill.toolkit.terminal.gwt.client.ui.RootWindow;

/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class GwtClient implements EntryPoint {

private String appUri = "http://localhost: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;

private LegacyClientWrapper lClient;

/**
* 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:");
Document doc = XMLParser.parse(response.getText());
console.log(doc.toString());
handleUIDL(doc);
}
});
console.log("Request sent");
} catch (RequestException e) {
console.error(e.getMessage());
}
}
private void handleUIDL(Document doc) {
NodeList changes = doc.getElementsByTagName("change");
for(int i = 0; i < changes.getLength(); i++) {
applyChange(changes.item(i).getFirstChild());
}
}
private void applyChange(Node n) {
if(n.getNodeName().equals("window")) {
console.log("Rendering main window");
rw = new RootWindow(n, this);
rw.setClient(this);
} else {
int pid = Component.getIdFromUidl(n);
console.log("Updating node: " + n.getNodeName() + ", PID:"+pid);
Component c = getPaintable(pid);
c.updateFromUidl(n);
}
}

/**
* 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);
}
public LegacyClientWrapper getLegacyClient() {
if(lClient == null)
lClient = new LegacyClientWrapper();
return lClient;
}
}


+ 2
- 0
src/com/itmill/toolkit/terminal/gwt/client/Variable.java View File

@@ -1,5 +1,7 @@
package com.itmill.toolkit.terminal.gwt.client;

import com.itmill.toolkit.terminal.gwt.client.ui.Component;

public abstract class Variable {

protected Component owner;

+ 1
- 0
src/com/itmill/toolkit/terminal/gwt/client/VariableFactory.java View File

@@ -5,6 +5,7 @@ import java.util.HashMap;
import com.google.gwt.xml.client.NamedNodeMap;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.itmill.toolkit.terminal.gwt.client.ui.Component;

public class VariableFactory {

src/com/itmill/toolkit/terminal/gwt/client/Component.java → src/com/itmill/toolkit/terminal/gwt/client/ui/Component.java View File

@@ -1,22 +1,16 @@
package com.itmill.toolkit.terminal.gwt.client;
package com.itmill.toolkit.terminal.gwt.client.ui;

import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.Node;
import com.itmill.toolkit.terminal.gwt.client.ui.ContainerComponent;
import com.itmill.toolkit.terminal.gwt.client.ui.TkButton;
import com.itmill.toolkit.terminal.gwt.client.ui.TkLabel;
import com.itmill.toolkit.terminal.gwt.client.ui.TkLegacyComponent;
import com.itmill.toolkit.terminal.gwt.client.ui.TkOrderedLayout;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTextField;
import com.itmill.toolkit.terminal.gwt.client.ui.TkUnknown;
import com.itmill.toolkit.terminal.gwt.client.Client;

public abstract class Component {
private ContainerComponent parent;
protected GwtClient client;
protected Client client;
private final int id;
public Component(int id, GwtClient c) {
public Component(int id, Client c) {
client = c;
this.id = id;
}
@@ -36,7 +30,7 @@ public abstract class Component {
return false;
}

public static Component createComponent(Node uidl, GwtClient cli) {
public static Component createComponent(Node uidl, Client cli) {
Component c = null;
String nodeName = uidl.getNodeName();
if(nodeName.equals("label")) {
@@ -65,7 +59,7 @@ public abstract class Component {
return parent;
}
public GwtClient getClient() {
public Client getClient() {
if(client == null)
client = parent.getClient();
return client;

+ 3
- 4
src/com/itmill/toolkit/terminal/gwt/client/ui/ContainerComponent.java View File

@@ -2,18 +2,17 @@ package com.itmill.toolkit.terminal.gwt.client.ui;

import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

abstract class ContainerComponent extends Component {

public ContainerComponent(int id, GwtClient c) {
public ContainerComponent(int id, Client c) {
super(id, c);
}

abstract void appendChild(Component c);
public void renderChildNodes(Node n, GwtClient cli) {
public void renderChildNodes(Node n, Client cli) {
NodeList children = n.getChildNodes();
for(int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);

+ 5
- 6
src/com/itmill/toolkit/terminal/gwt/client/ui/RootWindow.java View File

@@ -4,15 +4,14 @@ package com.itmill.toolkit.terminal.gwt.client.ui;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.Node;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

public class RootWindow extends ContainerComponent {

private RootPanel rp;
private GwtClient client;
private Client client;

public RootWindow(Node uidl, GwtClient c) {
public RootWindow(Node uidl, Client c) {
super(0,c);
// root panel must be attached to client before childs can be rendered
setClient(c);
@@ -34,11 +33,11 @@ public class RootWindow extends ContainerComponent {
return rp;
}

public void setClient(GwtClient client) {
public void setClient(Client client) {
this.client = client;
}
public GwtClient getClient() {
public Client getClient() {
return this.client;
}


+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkButton.java View File

@@ -7,8 +7,7 @@ import com.google.gwt.xml.client.NamedNodeMap;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.itmill.toolkit.terminal.gwt.client.BooleanVariable;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;
import com.itmill.toolkit.terminal.gwt.client.VariableFactory;

public class TkButton extends Component {
@@ -16,7 +15,7 @@ public class TkButton extends Component {
private Button b;
private BooleanVariable state;

public TkButton(Node uidl, GwtClient c) {
public TkButton(Node uidl, Client c) {
super(getIdFromUidl(uidl), c);
b = new Button();
updateFromUidl(uidl);

+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkLabel.java View File

@@ -5,14 +5,13 @@ import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.NamedNodeMap;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

public class TkLabel extends Component {

private Label l;

public TkLabel(Node uidl, GwtClient cli) {
public TkLabel(Node uidl, Client cli) {
super(getIdFromUidl(uidl), cli);

l = new Label();

+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkLegacyComponent.java View File

@@ -6,15 +6,14 @@ import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.Node;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;
import com.itmill.toolkit.terminal.gwt.client.LegacyClientWrapper;

public class TkLegacyComponent extends Component {

private Label l;

public TkLegacyComponent(Node uidl, GwtClient cli) {
public TkLegacyComponent(Node uidl, Client cli) {
super(getIdFromUidl(uidl), cli);
// TODO Check if client has legacy client instantiated

+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkOrderedLayout.java View File

@@ -3,14 +3,13 @@ package com.itmill.toolkit.terminal.gwt.client.ui;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.Node;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

public class TkOrderedLayout extends ContainerComponent {
private FlowPanel p;

public TkOrderedLayout(Node uidl, GwtClient cli) {
public TkOrderedLayout(Node uidl, Client cli) {
super(getIdFromUidl(uidl), cli);

p = new FlowPanel();

+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkTextField.java View File

@@ -5,15 +5,14 @@ import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.NamedNodeMap;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

public class TkTextField extends Component {


private TextBox tb;

public TkTextField(Node uidl, GwtClient cli) {
public TkTextField(Node uidl, Client cli) {
super(getIdFromUidl(uidl),cli);

tb = new TextBox();

+ 2
- 3
src/com/itmill/toolkit/terminal/gwt/client/ui/TkUnknown.java View File

@@ -3,14 +3,13 @@ package com.itmill.toolkit.terminal.gwt.client.ui;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xml.client.Node;
import com.itmill.toolkit.terminal.gwt.client.Component;
import com.itmill.toolkit.terminal.gwt.client.GwtClient;
import com.itmill.toolkit.terminal.gwt.client.Client;

public class TkUnknown extends Component {

private Label l;

public TkUnknown(Node uidl, GwtClient cli) {
public TkUnknown(Node uidl, Client cli) {
super(getIdFromUidl(uidl),cli);

l = new Label("No client side component found for " + uidl.getNodeName());

Loading…
Cancel
Save