]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1835
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 18 Jun 2008 12:34:17 +0000 (12:34 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 18 Jun 2008 12:34:17 +0000 (12:34 +0000)
svn changeset:4916/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java

index 1ff668caa83d7d4d63acf9db1b642ef4118a72a1..fa1d61c224df58c85f0b161ebf6a1180078a6a11 100755 (executable)
@@ -48,9 +48,9 @@ public class ApplicationConnection {
 
     private static final String ERROR_CLASSNAME_EXT = "-error";
 
-    public static final String VAR_RECORD_SEPARATOR = escapeString("\u001e");
+    public static final String VAR_RECORD_SEPARATOR = "\u001e";
 
-    public static final String VAR_FIELD_SEPARATOR = escapeString("\u001f");
+    public static final String VAR_FIELD_SEPARATOR = "\u001f";
 
     private final HashMap resourcesMap = new HashMap();
 
@@ -131,7 +131,7 @@ public class ApplicationConnection {
         // TODO remove hard coded id name
         view = new IView(cnf.getRootPanelId());
 
-        makeUidlRequest("repaintAll=1");
+        makeUidlRequest("", true);
         applicationRunning = true;
     }
 
@@ -229,15 +229,18 @@ public class ApplicationConnection {
         return (activeRequests > 0);
     }
 
-    private void makeUidlRequest(String requestData) {
+    private void makeUidlRequest(String requestData, boolean repaintAll) {
         startRequest();
 
         console.log("Making UIDL Request with params: " + requestData);
-        final String uri = getAppUri() + "UIDL" + configuration.getPathInfo();
+        String uri = getAppUri() + "UIDL" + configuration.getPathInfo();
+        if (repaintAll) {
+            uri += "?repaintAll=1";
+        }
         final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, uri);
-        rb.setHeader("Content-Type",
-                "application/x-www-form-urlencoded; charset=utf-8");
-        // rb.setHeader("Content-Type", "text/plain;charset=utf-8");
+        // rb.setHeader("Content-Type",
+        // "application/x-www-form-urlencoded; charset=utf-8");
+        rb.setHeader("Content-Type", "text/plain;charset=utf-8");
         try {
             rb.sendRequest(requestData, new RequestCallback() {
                 public void onError(Request request, Throwable exception) {
@@ -620,7 +623,6 @@ public class ApplicationConnection {
     private void buildAndSendVariableBurst(Vector pendingVariables) {
         final StringBuffer req = new StringBuffer();
 
-        req.append("changes=");
         for (int i = 0; i < pendingVariables.size(); i++) {
             if (i > 0) {
                 if (i % 2 == 0) {
@@ -633,18 +635,12 @@ public class ApplicationConnection {
         }
 
         pendingVariables.clear();
-        makeUidlRequest(req.toString());
+        makeUidlRequest(req.toString(), false);
     }
 
-    private static native String escapeString(String value)
-    /*-{
-     return encodeURIComponent(value);
-     }-*/;
-
     public void updateVariable(String paintableId, String variableName,
             String newValue, boolean immediate) {
-        addVariableToQueue(paintableId, variableName, escapeString(newValue),
-                immediate, 's');
+        addVariableToQueue(paintableId, variableName, newValue, immediate, 's');
     }
 
     public void updateVariable(String paintableId, String variableName,
@@ -684,7 +680,7 @@ public class ApplicationConnection {
             if (i > 0) {
                 buf.append(",");
             }
-            buf.append(escapeString(values[i].toString()));
+            buf.append(values[i].toString());
         }
         addVariableToQueue(paintableId, variableName, buf.toString(),
                 immediate, 'a');
index f1433b3d43f7d30a549266dd252d849a4da709c6..86bbb39d2a5818e0a03c3b1614154fc69504096e 100644 (file)
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -47,7 +48,6 @@ import com.itmill.toolkit.terminal.URIHandler;
 import com.itmill.toolkit.terminal.UploadStream;
 import com.itmill.toolkit.terminal.VariableOwner;
 import com.itmill.toolkit.terminal.Paintable.RepaintRequestEvent;
-import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
 import com.itmill.toolkit.ui.Component;
 import com.itmill.toolkit.ui.Upload;
 import com.itmill.toolkit.ui.Window;
@@ -71,9 +71,11 @@ public class CommunicationManager implements Paintable.RepaintRequestListener {
     private static final int VAR_TYPE = 3;
     private static final int VAR_VALUE = 0;
 
-    private static final String VAR_RECORD_SEPARATOR = ApplicationConnection.VAR_RECORD_SEPARATOR;
+    private static final String VAR_RECORD_SEPARATOR = "\u001e";
 
-    private static final String VAR_FIELD_SEPARATOR = ApplicationConnection.VAR_FIELD_SEPARATOR;
+    private static final String VAR_FIELD_SEPARATOR = "\u001f";
+
+    private static final int MAX_BUFFER_SIZE = 64 * 1024;
 
     private final ArrayList dirtyPaintabletSet = new ArrayList();
 
@@ -503,17 +505,24 @@ public class CommunicationManager implements Paintable.RepaintRequestListener {
      * @param request
      * @param application2
      * @return true if successful, false if there was an inconsistency
+     * @throws IOException
      */
     private boolean handleVariables(HttpServletRequest request,
-            Application application2) {
+            Application application2) throws IOException {
         boolean success = true;
-        final Map params = new HashMap(request.getParameterMap());
-        final String changes = (String) ((params.get("changes") instanceof String[]) ? ((String[]) params
-                .get("changes"))[0]
-                : params.get("changes"));
-        params.remove("changes");
 
-        if (changes != null && changes.length() > 0) {
+        if (request.getContentLength() > 0) {
+
+            byte[] buffer = new byte[request.getContentLength()];
+            ServletInputStream inputStream = request.getInputStream();
+            int totalBytesRead = 0;
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer, totalBytesRead,
+                    MAX_BUFFER_SIZE)) != -1) {
+                totalBytesRead += bytesRead;
+            }
+
+            String changes = new String(buffer, "utf-8");
             // extract variables to two dim string array
             final String[] tmp = changes.split(VAR_RECORD_SEPARATOR);
             final String[][] variableRecords = new String[tmp.length][4];