Java tutorial
/******************************************************************************* * Copyright (c) 2013 Guillaume Hillairet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Hillairet - initial API and implementation *******************************************************************************/ package org.eclipselabs.emfjson.gwt.handlers; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.eclipse.emf.common.util.Callback; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.emf.ecore.resource.URIHandler; import org.eclipse.emf.ecore.resource.impl.URIHandlerImpl; 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; /** * {@link HttpHandler} * * {@link URIHandler} implementation that uses {@link RequestBuilder} to communicate with * an HTTP server in JSON format. * * @author ghillairet * @since 0.6.0 */ public class HttpHandler extends URIHandlerImpl implements URIHandler { @Override public void createInputStream(URI uri, Map<?, ?> options, final Callback<Map<?, ?>> callback) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(uri.toString())); try { builder.sendRequest(null, new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> responseMap = new HashMap<String, Object>(); resultMap.put(URIConverter.OPTION_RESPONSE, responseMap); if (200 == response.getStatusCode()) { String responseText = response.getText(); if (responseText != null) { InputStream stream = new ByteArrayInputStream(responseText.getBytes()); responseMap.put(URIConverter.RESPONSE_RESULT, stream); } } else { responseMap.put(URIConverter.RESPONSE_RESULT, null); } callback.onSuccess(resultMap); } @Override public void onError(Request request, Throwable exception) { callback.onFailure(exception); } }); } catch (RequestException e) { e.printStackTrace(); } } @Override public void delete(URI uri, Map<?, ?> options, final Callback<Map<?, ?>> callback) { RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, URL.encode(uri.toString())); try { builder.sendRequest(null, new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> responseMap = new HashMap<String, Object>(); resultMap.put(URIConverter.OPTION_RESPONSE, responseMap); int code = response.getStatusCode(); if (code >= 200 && code < 300) { responseMap.put(URIConverter.RESPONSE_RESULT, null); responseMap.put(URIConverter.RESPONSE_TIME_STAMP_PROPERTY, null); responseMap.put(URIConverter.RESPONSE_URI, null); } callback.onSuccess(resultMap); } @Override public void onError(Request request, Throwable exception) { callback.onFailure(exception); } }); } catch (RequestException e) { e.printStackTrace(); } } @Override public void store(URI uri, byte[] bytes, Map<?, ?> options, final Callback<Map<?, ?>> callback) { RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(uri.toString())); String data = new String(bytes); try { builder.sendRequest(data, new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> responseMap = new HashMap<String, Object>(); resultMap.put(URIConverter.OPTION_RESPONSE, responseMap); int code = response.getStatusCode(); if (code > 200 && code < 300) { responseMap.put(URIConverter.RESPONSE_RESULT, null); responseMap.put(URIConverter.RESPONSE_TIME_STAMP_PROPERTY, null); responseMap.put(URIConverter.RESPONSE_URI, null); } callback.onSuccess(resultMap); } @Override public void onError(Request request, Throwable exception) { callback.onFailure(exception); } }); } catch (RequestException e) { e.printStackTrace(); } } @Override public void exists(URI uri, Map<?, ?> options, final Callback<Boolean> callback) { RequestBuilder builder = new RequestBuilder(RequestBuilder.HEAD, URL.encode(uri.toString())); try { builder.sendRequest(null, new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { int code = response.getStatusCode(); if (code >= 200 && code < 300) { callback.onSuccess(true); } else { callback.onSuccess(false); } } @Override public void onError(Request request, Throwable exception) { callback.onFailure(exception); } }); } catch (RequestException e) { e.printStackTrace(); } } }