diff --git a/pom.xml b/pom.xml index 750d372..5795212 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + org.gcube.information-system + information-system-model + + org.slf4j slf4j-api diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/client/plugin/ResourceRegistryClientPlugin.java b/src/main/java/org/gcube/informationsystem/resourceregistry/client/plugin/ResourceRegistryClientPlugin.java index 8e70b62..0eca067 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/client/plugin/ResourceRegistryClientPlugin.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/client/plugin/ResourceRegistryClientPlugin.java @@ -10,6 +10,7 @@ import org.gcube.common.clients.delegates.ProxyDelegate; import org.gcube.informationsystem.resourceregistry.Constants; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.client.proxy.ResourceRegistryClient; +import org.gcube.informationsystem.resourceregistry.client.proxy.ResourceRegistryClientImpl; /** * @author Luca Frosini (ISTI - CNR) @@ -48,7 +49,7 @@ public class ResourceRegistryClientPlugin extends AbstractPlugin delegate) { - return new ResourceRegistryClient(delegate); + return new ResourceRegistryClientImpl(delegate); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClient.java b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClient.java index e08a2dc..fa7bd46 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClient.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClient.java @@ -1,135 +1,41 @@ -/** - * - */ package org.gcube.informationsystem.resourceregistry.client.proxy; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLEncoder; +import java.util.UUID; -import javax.xml.ws.EndpointReference; - -import org.gcube.common.authorization.client.Constants; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.clients.Call; -import org.gcube.common.clients.delegates.AsyncProxyDelegate; -import org.gcube.common.clients.delegates.ProxyDelegate; -import org.gcube.common.clients.exceptions.ServiceException; -import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.informationsystem.model.entity.Facet; +import org.gcube.informationsystem.model.entity.Resource; import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException; -import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException; /** * @author Luca Frosini (ISTI - CNR) */ -public class ResourceRegistryClient { +public interface ResourceRegistryClient { - private static Logger logger = LoggerFactory - .getLogger(ResourceRegistryClient.class); + public Facet getFacet(UUID uuid) + throws FacetNotFoundException, ResourceRegistryException; - private final AsyncProxyDelegate delegate; - - public ResourceRegistryClient(ProxyDelegate config) { - this.delegate = new AsyncProxyDelegate(config); - } - - protected HttpURLConnection makeRequest(URL url, String method) throws Exception { - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - if (SecurityTokenProvider.instance.get()==null) { - if(ScopeProvider.instance.get()==null){ - throw new RuntimeException("Null Token and Scope. Please set your token first."); - } - connection.setRequestProperty("gcube-scope", ScopeProvider.instance.get()); - }else{ - connection.setRequestProperty(Constants.TOKEN_HEADER_ENTRY, SecurityTokenProvider.instance.get()); - } - connection.setDoOutput(true); - connection.setDoInput(true); - connection.setRequestProperty("Content-type", "text/plain"); - connection.setRequestMethod(method); - return connection; - } - - protected void appendQueryParameter(StringBuilder builder, String name, - String value) throws UnsupportedEncodingException { - builder.append("?").append(name).append("="); - String encodedValue = URLEncoder.encode(value, "UTF-8"); - builder.append(encodedValue).append("&"); - } + public F getFacet(Class clazz, UUID uuid) + throws FacetNotFoundException, ResourceRegistryException; - protected void appendQueryParameter(StringBuilder builder, String name, - int value) throws UnsupportedEncodingException { - builder.append("?").append(name).append("="); - String encodedValue = URLEncoder.encode(String.valueOf(value), "UTF-8"); - builder.append(encodedValue).append("&"); - } + public String getFacetSchema(String facetType) + throws SchemaNotFoundException; + - public String query(final String query, final int limit, final String fetchPlan) - throws InvalidQueryException { + public Resource getResource(UUID uuid) + throws ResourceNotFoundException, ResourceRegistryException; + + public R getResource(Class clazz, UUID uuid) + throws ResourceNotFoundException, ResourceRegistryException; + + public String getResourceSchema(String resourceType) + throws SchemaNotFoundException; - Call call = new Call() { - - private String getURLStringFromEndpointReference(EndpointReference endpoint) throws IOException { - JaxRSEndpointReference jaxRSEndpointReference = new JaxRSEndpointReference(endpoint); - return jaxRSEndpointReference.toString(); - } - - public String call(EndpointReference endpoint) throws Exception { - - String urlFromEndpointReference = getURLStringFromEndpointReference(endpoint); - - StringBuilder callUrl = new StringBuilder(urlFromEndpointReference); - callUrl.append("/").append(AccessPath.ACCESS_PATH_PART) - .append("/"); - appendQueryParameter(callUrl, AccessPath.QUERY_PARAM, query); - - appendQueryParameter(callUrl, AccessPath.LIMIT_PARAM, limit); - - if (fetchPlan != null) { - appendQueryParameter(callUrl, - AccessPath.FETCH_PLAN_PARAM, fetchPlan); - } - - URL url = new URL(callUrl.toString()); - HttpURLConnection connection = makeRequest(url, "GET"); - - logger.debug("Response code for {} is {} : {}", - callUrl.toString(), connection.getResponseCode(), - connection.getResponseMessage()); - - if (connection.getResponseCode() != 200) { - throw new Exception( - "Error Querying Resource Registry Service"); - } - - StringBuilder result = new StringBuilder(); - try (BufferedReader reader = new BufferedReader( - new InputStreamReader( - (InputStream) connection.getContent()))) { - String line; - while ((line = reader.readLine()) != null) { - result.append(line); - } - } - - return result.toString(); - } - - }; - - try { - return delegate.make(call); - } catch (Exception e) { - throw new ServiceException(e); - } - - } + + public String query(final String query, final int limit, + final String fetchPlan) throws InvalidQueryException; } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientFactory.java b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientFactory.java new file mode 100644 index 0000000..47f5e60 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientFactory.java @@ -0,0 +1,24 @@ +package org.gcube.informationsystem.resourceregistry.client.proxy; + +import javax.xml.ws.EndpointReference; + +import org.gcube.common.clients.fw.builders.StatelessBuilderImpl; +import org.gcube.informationsystem.resourceregistry.client.plugin.ResourceRegistryClientPlugin; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class ResourceRegistryClientFactory { + + protected static ResourceRegistryClient singleton; + + public static ResourceRegistryClient create(){ + if(singleton==null){ + ResourceRegistryClientPlugin plugin = new ResourceRegistryClientPlugin(); + singleton = new StatelessBuilderImpl(plugin).build(); + + } + return singleton; + } + +} diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientImpl.java b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientImpl.java new file mode 100644 index 0000000..51cbbc7 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientImpl.java @@ -0,0 +1,386 @@ +/** + * + */ +package org.gcube.informationsystem.resourceregistry.client.proxy; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.xml.ws.EndpointReference; + +import org.gcube.common.authorization.client.Constants; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.clients.Call; +import org.gcube.common.clients.delegates.AsyncProxyDelegate; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.informationsystem.impl.utils.Entities; +import org.gcube.informationsystem.model.entity.Facet; +import org.gcube.informationsystem.model.entity.Resource; +import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.FacetNotFoundException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.ResourceNotFoundException; +import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaNotFoundException; +import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + * + */ +public class ResourceRegistryClientImpl implements ResourceRegistryClient { + + private static final Logger logger = LoggerFactory + .getLogger(ResourceRegistryClientImpl.class); + + private final AsyncProxyDelegate delegate; + + public static final String PATH_SEPARATOR = "/"; + + public final class RREntry implements Map.Entry { + + private final K key; + private V value; + + public RREntry(K key, V value) { + this.key = key; + this.value = value; + } + + @Override + public K getKey() { + return key; + } + + @Override + public V getValue() { + return value; + } + + @Override + public V setValue(V value) { + V old = this.value; + this.value = value; + return old; + } + } + + public ResourceRegistryClientImpl(ProxyDelegate config) { + this.delegate = new AsyncProxyDelegate(config); + } + + protected enum HTTPMETHOD { + GET, POST, PUT, DELETE; + + @Override + public String toString(){ + return this.name(); + } + } + + class HTTPInputs { + + public static final String PARAM_STARTER = "?"; + public static final String PARAM_EQUALS = "="; + public static final String PARAM_SEPARATOR = "&"; + public static final String UTF8 = "UTF-8"; + + + protected final String path; + protected final HTTPMETHOD method; + protected final String urlParameters; + + protected String getParametersDataString(List> parameters) throws UnsupportedEncodingException { + if(parameters==null){ + return null; + } + + StringBuilder result = new StringBuilder(); + boolean first = true; + for(Map.Entry entry : parameters){ + if (first) { + first = false; + } else { + result.append(PARAM_SEPARATOR); + } + + result.append(URLEncoder.encode(entry.getKey(), UTF8)); + result.append(PARAM_EQUALS); + result.append(URLEncoder.encode(entry.getValue(), UTF8)); + + } + + return result.toString(); + } + + /** + * @param path + * @param method + * @param requestProperties + * @throws UnsupportedEncodingException + */ + public HTTPInputs(String path, HTTPMETHOD method, + List> parameters) throws UnsupportedEncodingException { + super(); + this.path = path; + this.method = method; + this.urlParameters = getParametersDataString(parameters); + } + + /** + * @return the path + */ + public String getPath() { + return path; + } + + /** + * @return the method + */ + public HTTPMETHOD getMethod() { + return method; + } + + /** + * @return the urlParameters + */ + public String getUrlParameters() { + return urlParameters; + } + + } + + class ResourceRegistryCall implements Call { + + protected final Class clazz; + protected final HTTPInputs httpInputs; + + public ResourceRegistryCall(Class clazz, HTTPInputs httpInputs) { + this.clazz = clazz; + this.httpInputs = httpInputs; + } + + protected String getURLStringFromEndpointReference( + EndpointReference endpoint) throws IOException { + JaxRSEndpointReference jaxRSEndpointReference = new JaxRSEndpointReference( + endpoint); + return jaxRSEndpointReference.toString(); + } + + protected HttpURLConnection getConnection(URL url, HTTPMETHOD method) + throws Exception { + /* + if(method!=HTTPMETHOD.POST && httpInputs.getUrlParameters()!=null){ + */ + url = new URL(url + "?" + httpInputs.getUrlParameters()); + //} + + HttpURLConnection connection = (HttpURLConnection) url + .openConnection(); + if (SecurityTokenProvider.instance.get() == null) { + if (ScopeProvider.instance.get() == null) { + throw new RuntimeException( + "Null Token and Scope. Please set your token first."); + } + connection.setRequestProperty("gcube-scope", + ScopeProvider.instance.get()); + } else { + connection.setRequestProperty(Constants.TOKEN_HEADER_ENTRY, + SecurityTokenProvider.instance.get()); + } + connection.setDoOutput(true); + + connection.setRequestProperty("Content-type", "text/plain"); + connection.setRequestProperty("User-Agent", ResourceRegistryClient.class.getSimpleName()); + + connection.setRequestMethod(method.toString()); + + /* + if(method==HTTPMETHOD.POST){ + connection.setDoOutput(true); + DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + wr.writeBytes(httpInputs.getUrlParameters()); + wr.flush(); + wr.close(); + }*/ + + + return connection; + } + + @SuppressWarnings("unchecked") + @Override + public C call(EndpointReference endpoint) throws Exception { + String urlFromEndpointReference = getURLStringFromEndpointReference(endpoint); + StringBuilder callUrl = new StringBuilder(urlFromEndpointReference); + callUrl.append(httpInputs.getPath()); + + URL url = new URL(callUrl.toString()); + HttpURLConnection connection = getConnection(url, httpInputs.method); + + logger.debug("Response code for {} is {} : {}", + connection.getURL(), + connection.getResponseCode(), + connection.getResponseMessage()); + + if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { + throw new Exception( + "Error Contacting Resource Registry Service"); + } + + StringBuilder result = new StringBuilder(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader((InputStream) connection.getContent()))) { + String line; + while ((line = reader.readLine()) != null) { + result.append(line); + } + } + + String res = result.toString(); + logger.trace("Server returned content : {}", res); + + if(String.class.isAssignableFrom(clazz)){ + return (C) res; + } + + return Entities.unmarshal(clazz, res); + } + + } + + @Override + public Facet getFacet(UUID uuid) + throws FacetNotFoundException, ResourceRegistryException { + return getFacet(Facet.class, uuid); + } + + @Override + public F getFacet(Class clazz, UUID uuid) + throws FacetNotFoundException, ResourceRegistryException { + try { + StringWriter stringWriter = new StringWriter(); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.ACCESS_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.FACET_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.INSTANCE_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(uuid.toString()); + + HTTPInputs httpInputs = new HTTPInputs(stringWriter.toString(), HTTPMETHOD.GET, null); + + ResourceRegistryCall call = new ResourceRegistryCall<>(clazz, httpInputs); + + return delegate.make(call); + } catch (Exception e) { + logger.error("Error getting {} with UUID {}", Facet.class.getSimpleName(), uuid, e); + throw new ResourceRegistryException(e); + } + } + + @Override + public String getFacetSchema(String facetType) + throws SchemaNotFoundException { + try { + StringWriter stringWriter = new StringWriter(); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.ACCESS_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.FACET_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.SCHEMA_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(facetType); + + HTTPInputs httpInputs = new HTTPInputs(stringWriter.toString(), HTTPMETHOD.GET, null); + + ResourceRegistryCall call = new ResourceRegistryCall<>(String.class, httpInputs); + + return delegate.make(call); + } catch (Exception e) { + logger.error("Error getting {} Schema for {}", Facet.class.getSimpleName(), facetType, e); + throw new SchemaNotFoundException(e); + } + } + + @Override + public Resource getResource(UUID uuid) + throws ResourceNotFoundException, ResourceRegistryException { + return getResource(Resource.class, uuid); + } + + @Override + public R getResource(Class clazz, UUID uuid) + throws ResourceNotFoundException, ResourceRegistryException { + try { + StringWriter stringWriter = new StringWriter(); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.ACCESS_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.RESOURCE_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.INSTANCE_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(uuid.toString()); + + HTTPInputs httpInputs = new HTTPInputs(stringWriter.toString(), HTTPMETHOD.GET, null); + + ResourceRegistryCall call = new ResourceRegistryCall<>(clazz, httpInputs); + + return delegate.make(call); + } catch (Exception e) { + logger.error("Error getting {} with UUID {}", Resource.class.getSimpleName(), uuid, e); + throw new ResourceRegistryException(e); + } + } + + @Override + public String getResourceSchema(String resourceType) + throws SchemaNotFoundException { + try { + StringWriter stringWriter = new StringWriter(); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.ACCESS_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.RESOURCE_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(AccessPath.SCHEMA_PATH_PART); + stringWriter.append(PATH_SEPARATOR); + stringWriter.append(resourceType); + + HTTPInputs httpInputs = new HTTPInputs(stringWriter.toString(), HTTPMETHOD.GET, null); + + ResourceRegistryCall call = new ResourceRegistryCall<>(String.class, httpInputs); + + return delegate.make(call); + } catch (Exception e) { + logger.error("Error getting {} Schema for {}", Resource.class.getSimpleName(), resourceType, e); + throw new SchemaNotFoundException(e); + } + } + + /* (non-Javadoc) + * @see org.gcube.informationsystem.resourceregistry.client.proxy.ResourceRegistryClient#query(java.lang.String, int, java.lang.String) + */ + @Override + public String query(String query, int limit, String fetchPlan) + throws InvalidQueryException { + ResourceRegistryQuery rrq = new ResourceRegistryQuery(delegate); + return rrq.query(query, limit, fetchPlan); + } + +} diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryQuery.java b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryQuery.java new file mode 100644 index 0000000..38b4fe7 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryQuery.java @@ -0,0 +1,136 @@ +/** + * + */ +package org.gcube.informationsystem.resourceregistry.client.proxy; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +import javax.xml.ws.EndpointReference; + +import org.gcube.common.authorization.client.Constants; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.clients.Call; +import org.gcube.common.clients.delegates.AsyncProxyDelegate; +import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.clients.exceptions.ServiceException; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException; +import org.gcube.informationsystem.resourceregistry.api.rest.AccessPath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +class ResourceRegistryQuery { + + private static Logger logger = LoggerFactory + .getLogger(ResourceRegistryQuery.class); + + + private final AsyncProxyDelegate delegate; + + public ResourceRegistryQuery(ProxyDelegate config) { + this.delegate = new AsyncProxyDelegate(config); + } + + protected HttpURLConnection makeRequest(URL url, String method) throws Exception { + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + if (SecurityTokenProvider.instance.get()==null) { + if(ScopeProvider.instance.get()==null){ + throw new RuntimeException("Null Token and Scope. Please set your token first."); + } + connection.setRequestProperty("gcube-scope", ScopeProvider.instance.get()); + }else{ + connection.setRequestProperty(Constants.TOKEN_HEADER_ENTRY, SecurityTokenProvider.instance.get()); + } + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setRequestProperty("Content-type", "text/plain"); + connection.setRequestMethod(method); + return connection; + } + + protected void appendQueryParameter(StringBuilder builder, String name, + String value) throws UnsupportedEncodingException { + builder.append("?").append(name).append("="); + String encodedValue = URLEncoder.encode(value, "UTF-8"); + builder.append(encodedValue).append("&"); + } + + protected void appendQueryParameter(StringBuilder builder, String name, + int value) throws UnsupportedEncodingException { + builder.append("?").append(name).append("="); + String encodedValue = URLEncoder.encode(String.valueOf(value), "UTF-8"); + builder.append(encodedValue).append("&"); + } + + public String query(final String query, final int limit, final String fetchPlan) + throws InvalidQueryException { + + Call call = new Call() { + + private String getURLStringFromEndpointReference(EndpointReference endpoint) throws IOException { + JaxRSEndpointReference jaxRSEndpointReference = new JaxRSEndpointReference(endpoint); + return jaxRSEndpointReference.toString(); + } + + public String call(EndpointReference endpoint) throws Exception { + + String urlFromEndpointReference = getURLStringFromEndpointReference(endpoint); + + StringBuilder callUrl = new StringBuilder(urlFromEndpointReference); + callUrl.append("/").append(AccessPath.ACCESS_PATH_PART) + .append("/"); + appendQueryParameter(callUrl, AccessPath.QUERY_PARAM, query); + + appendQueryParameter(callUrl, AccessPath.LIMIT_PARAM, limit); + + if (fetchPlan != null) { + appendQueryParameter(callUrl, + AccessPath.FETCH_PLAN_PARAM, fetchPlan); + } + + URL url = new URL(callUrl.toString()); + HttpURLConnection connection = makeRequest(url, "GET"); + + logger.debug("Response code for {} is {} : {}", + callUrl.toString(), connection.getResponseCode(), + connection.getResponseMessage()); + + if (connection.getResponseCode() != 200) { + throw new Exception( + "Error Querying Resource Registry Service"); + } + + StringBuilder result = new StringBuilder(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader( + (InputStream) connection.getContent()))) { + String line; + while ((line = reader.readLine()) != null) { + result.append(line); + } + } + + return result.toString(); + } + + }; + + try { + return delegate.make(call); + } catch (Exception e) { + throw new ServiceException(e); + } + + } + +} diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientTest.java index 1b08023..94673f2 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/client/proxy/ResourceRegistryClientTest.java @@ -3,12 +3,9 @@ */ package org.gcube.informationsystem.resourceregistry.client.proxy; -import javax.xml.ws.EndpointReference; - -import org.gcube.common.clients.fw.builders.StatelessBuilderImpl; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.informationsystem.resourceregistry.api.exceptions.InvalidQueryException; -import org.gcube.informationsystem.resourceregistry.client.plugin.ResourceRegistryClientPlugin; +import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -22,15 +19,18 @@ public class ResourceRegistryClientTest { private static Logger logger = LoggerFactory .getLogger(ResourceRegistryClientTest.class); + protected ResourceRegistryClient resourceRegistryClient; + + @Before + public void before(){ + ScopeProvider.instance.set("/gcube/devNext/NextNext"); + resourceRegistryClient = ResourceRegistryClientFactory.create(); + } + @Test public void testQuery() throws InvalidQueryException{ - - ScopeProvider.instance.set("/gcube/devNext"); - ResourceRegistryClientPlugin plugin = new ResourceRegistryClientPlugin(); - - ResourceRegistryClient rrc = new StatelessBuilderImpl(plugin).build(); - - String res = rrc.query("SELECT FROM V", 0, null); + String res = resourceRegistryClient.query("SELECT FROM V", 0, null); logger.debug(res); } + }