package org.genmymodel.plugin.resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.logging.Logger;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
import org.genmymodel.common.account.GMMKeyStore;
import org.genmymodel.common.api.GMMAPIRestClient;
/**
*
* @author Vincent Aranega
* @author Ali Gourch
*
*/
public class GenMyModelURIConverterImpl extends ExtensibleURIConverterImpl {
private static Logger logger = Logger.getLogger(GenMyModelURIConverterImpl.class.getName());
public static final String GENMYMODEL_RESOURCE_URI_PREFIX = "genmymodel://";
/**
* {@inheritDoc}
*/
@Override
public InputStream createInputStream(URI uri) throws IOException {
return createInputStream(uri, null);
}
/**
* {@inheritDoc}
*/
@Override
public InputStream createInputStream(URI uri, Map<?, ?> options) throws IOException {
InputStream is = null;
try {
is = super.createInputStream(uri, options);
} catch (Exception e) {
logger.finest("Unable to create stream from uri = " + uri + ", loading from external source.");
is = getProjectStreamFromAPI(uri);
}
return is;
}
private InputStream getProjectStreamFromAPI(URI uri) {
try {
GMMAPIRestClient client = GMMAPIRestClient.getInstance();
GMMKeyStore keyStore = GMMKeyStore.getInstance();
return client.GETasInputstream(GMMAPIRestClient.REAL_API + "/projects/" + extractProjectID(uri) + "/xmi", keyStore.getCurrentCredential());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String extractProjectID(URI uri) {
if (uri != null) {
return uri.toString().replace(GENMYMODEL_RESOURCE_URI_PREFIX, "");
}
return null;
}
}