/**
* Copyright (c) 2010-2011 Ed Merks and others.
* 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:
* Ed Merks - Initial API and implementation
*/
package org.eclipse.emf.ecore.resource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
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.impl.URIHandlerImpl;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* TODO
*/
public class URIServiceCallback extends URIHandlerImpl
{
protected URIServiceAsync uriService;
public URIServiceCallback(URIServiceAsync uriService)
{
this.uriService = uriService;
}
@Override
public void createInputStream(final URI uri, Map<?, ?> options, final Callback<Map<?, ?>> callback)
{
HashMap<Object, Object> massagedOptions = new HashMap<Object, Object>(options);
massagedOptions.remove(URIConverter.OPTION_URI_CONVERTER);
uriService.fetch
(uri.toString(),
massagedOptions,
new AsyncCallback<Map<?, ?>>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(Map<?, ?> result)
{
@SuppressWarnings("unchecked")
Map<String, Object> response = (Map<String, Object>)result.get(URIConverter.OPTION_RESPONSE);
Object responseResult = response.get(URIConverter.RESPONSE_RESULT);
if (responseResult == null)
{
callback.onFailure(new IOException("Stream for '" + uri + "' not found"));
}
else if (responseResult instanceof byte[])
{
byte[] bytes = (byte[])responseResult;
response.put(URIConverter.RESPONSE_RESULT, new ByteArrayInputStream(bytes));
callback.onSuccess(result);
}
else
{
callback.onFailure((IOException)responseResult);
}
}
});
}
@Override
public void store(URI uri, byte[] bytes, Map<?, ?> options, final Callback<Map<?, ?>> callback)
{
HashMap<Object, Object> massagedOptions = new HashMap<Object, Object>(options);
massagedOptions.remove(URIConverter.OPTION_URI_CONVERTER);
uriService.store
(uri.toString(),
bytes,
massagedOptions,
new AsyncCallback<Map<?, ?>>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(Map<?, ?> result)
{
@SuppressWarnings("unchecked")
Map<String, Object> response = (Map<String, Object>)result.get(URIConverter.OPTION_RESPONSE);
Object responseResult = response.get(URIConverter.RESPONSE_RESULT);
if (responseResult instanceof Throwable)
{
callback.onFailure((Throwable)responseResult);
}
else
{
callback.onSuccess(result);
}
}
});
}
@Override
public void delete(URI uri, Map<?, ?> options, final Callback<Map<?, ?>> callback)
{
HashMap<Object, Object> massagedOptions = new HashMap<Object, Object>(options);
massagedOptions.remove(URIConverter.OPTION_URI_CONVERTER);
@SuppressWarnings("unchecked")
Map<String, Object> response = (Map<String, Object>)massagedOptions.get(URIConverter.OPTION_RESPONSE);
if (response == null)
{
massagedOptions.put(URIConverter.OPTION_RESPONSE, new HashMap<Object, Object>());
}
uriService.delete
(uri.toString(),
massagedOptions,
new AsyncCallback<Map<?, ?>>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(Map<?, ?> result)
{
@SuppressWarnings("unchecked")
Map<String, Object> response = (Map<String, Object>)result.get(URIConverter.OPTION_RESPONSE);
Object responseResult = response.get(URIConverter.RESPONSE_RESULT);
if (responseResult instanceof Throwable)
{
callback.onFailure((Throwable)responseResult);
}
else
{
callback.onSuccess(result);
}
}
});
}
@Override
public void exists(URI uri, Map<?, ?> options, final Callback<Boolean> callback)
{
HashMap<Object, Object> massagedOptions = new HashMap<Object, Object>(options);
massagedOptions.remove(URIConverter.OPTION_URI_CONVERTER);
@SuppressWarnings("unchecked")
Map<String, Object> response = (Map<String, Object>)massagedOptions.get(URIConverter.OPTION_RESPONSE);
if (response == null)
{
massagedOptions.put(URIConverter.OPTION_RESPONSE, new HashMap<Object, Object>());
}
uriService.exists
(uri.toString(),
massagedOptions,
new AsyncCallback<Boolean>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(Boolean result)
{
callback.onSuccess(result);
}
});
}
}