package freenet.client.tools; import java.util.ArrayList; import java.util.Arrays; import java.util.List; 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; /** A helper class for sending requests back to the server */ public class FreenetRequest { /** * Sends a request to the given path with the given query parameters * * @param path * - The path to send the request to * @param parameters * - The parameters to send along with the request * @return The sent request */ public static Request sendRequest(String path, QueryParameter[] parameters) { return sendRequest(path, parameters, null); } /** * Sends a request to the given path with the given query parameter * * @param path * - The path to send the request to * @param parameter * - The parameter to send along with the request * @return The sent request */ public static Request sendRequest(String path, QueryParameter parameter) { return sendRequest(path, new QueryParameter[] { parameter }); } /** * Sends a request to the given path with the given query parameter and a callback * * @param path * - The path to send the request to * @param parameter * - The parameter to send along with the request * @param callback * - The callback that is registered to the request * @return The sent request */ public static Request sendRequest(String path, QueryParameter parameter, RequestCallback callback) { return sendRequest(path, new QueryParameter[] { parameter }, callback); } /** * Sends a request to the given path with the given query parameters and a callback * * @param path * - The path to send the request to * @param parameters * - The parameters to send along with the request * @param callback * - The callback that is registered to the request * @return The sent request */ public static Request sendRequest(String path, QueryParameter[] parameters, RequestCallback callback) { // FreenetJs.log("AJAX:path="+path+" queryParams:"+Arrays.asList(parameters)); // A timestamp needs to be sent, because IE caches ajax if (parameters == null) { parameters = new QueryParameter[1]; } List<QueryParameter> paramList = new ArrayList<QueryParameter>(Arrays.asList(parameters)); paramList.add(new QueryParameter("timestamp", "" + System.currentTimeMillis())); // Assembles the query string String queryString = new String(); queryString = queryString.concat("?"); for (int i = 0; i < paramList.size(); i++) { queryString = queryString.concat(paramList.get(i).getName() + "=" + paramList.get(i).getValue()); if (i != paramList.size() - 1) { queryString = queryString.concat("&"); } } // If no callback was specified, then create an empty one if (callback == null) { callback = new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { } @Override public void onError(Request request, Throwable exception) { } }; } try { // Create the request, send it, then return return new RequestBuilder(RequestBuilder.GET, path + queryString).sendRequest(null, callback); } catch (RequestException e) { // If error happened, then notify the callback and return null callback.onError(null, e); return null; } } }