package org.geogebra.web.html5.util; import org.geogebra.common.move.ggtapi.models.AjaxCallback; import org.geogebra.common.util.HttpRequest; import org.geogebra.common.util.debug.Log; 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.xhr.client.XMLHttpRequest; /** * @author Zoltan Kovacs <zoltan@geogebra.org> Implements HTTP requests and * responses for web. */ public class HttpRequestW extends HttpRequest { /* * The following code has been copied mostly from * http://code.google.com/intl * /hu-HU/webtoolkit/doc/latest/DevGuideServerCommunication * .html#DevGuideHttpRequests */ @Override public void sendRequest(String url) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url)); try { builder.setTimeoutMillis(getTimeout() * 1000); Log.debug("Sending request " + url + " until timeout " + getTimeout()); builder.sendRequest(null, new RequestCallback() { @Override public void onError(Request request, Throwable exception) { // Couldn't connect to server (could be timeout, SOP // violation, etc.) setResponseText(exception.getMessage()); processed = true; } @Override public void onResponseReceived(Request request, Response response) { if (200 == response.getStatusCode()) { // Process the response in response.getText() setResponseText(response.getText()); processed = true; } else { // Handle the error. Can get the status text from // response.getStatusText() setResponseText(response.getStatusText()); processed = true; } } }); } catch (RequestException e) { // Couldn't connect to server processed = true; } } @Override public void sendRequestPost(String url, String post, AjaxCallback callback) { XHR2 request = (XHR2) XMLHttpRequest.create(); if (callback == null) { request.openSync("POST", url); } else { request.open("POST", url); } // needed for SMART, hopefully no problem for others request.setRequestHeader("Content-type", "text/plain"); // request.setTimeOut(timeout * 1000); request.onLoad(callback); request.send(post); } }