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);
}
+
}