Java tutorial
/* * Copyright (C) 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.api.explorer.client.base.http.crossdomain; import com.google.api.explorer.client.base.ApiRequest; import com.google.api.explorer.client.base.ApiResponse; import com.google.api.explorer.client.base.dynamicjso.DynamicJso; import com.google.api.explorer.client.base.http.HttpException; import com.google.api.explorer.client.base.http.TimeoutException; import com.google.gwt.core.client.JavaScriptException; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import java.util.Map; /** * Returned by requests made by a {@link CrossDomainRequestBuilder}. * * @author jasonhall@google.com (Jason Hall) */ public final class CrossDomainRequest { private final AsyncCallback<ApiResponse> callback; private Timer timer; private boolean canceled = false; CrossDomainRequest(final AsyncCallback<ApiResponse> callback, int timeoutMillis) { this.callback = callback; if (timeoutMillis > 0) { this.timer = new Timer() { @Override public void run() { if (callback != null) { CrossDomainRequest.this.cancel(); callback.onFailure(new TimeoutException()); } } }; timer.schedule(timeoutMillis); } } native void sendRequest(JavaScriptObject requestObj) /*-{ var self = this; var callback = $entry(function(response) { self. @com.google.api.explorer.client.base.http.crossdomain.CrossDomainRequest::onresponse(Lcom/google/gwt/core/client/JavaScriptObject;) (response); }); $wnd.googleapis.newHttpRequest(requestObj).execute(callback); }-*/; @SuppressWarnings("unused") // Used in JSNI private void onresponse(JavaScriptObject response) { if (callback != null && !canceled) { handleResponse(response.<DynamicJso>cast()); } } public void cancel() { if (timer != null) { timer.cancel(); } canceled = true; } static JavaScriptObject convertRequest(ApiRequest request) { DynamicJso headers = DynamicJso.createObject().cast(); for (Map.Entry<String, String> entry : request.getHeaders().entrySet()) { headers.set(entry.getKey(), entry.getValue()); } return DynamicJso.createObject().<DynamicJso>cast().set("url", request.getRequestPath()) .set("headers", headers).set("body", request.getRequestBody()) .set("httpMethod", request.getHttpMethod().name()); } void handleResponse(DynamicJso response) { try { callback.onSuccess(ApiResponse.fromData(response)); } catch (JavaScriptException e) { callback.onFailure(new HttpException("Unknown error")); } } }