diff --git a/CHANGELOG.md b/CHANGELOG.md index ab3e002..e0b2517 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Added support for moderation [#21342] - Added support for IAM authz [#21628] - Added items bulk delete/purge [#21685] +- Using UriResolverManager to get item URL in place of direct HTTP call [22549] -## [v2.0.0] +## [v2.0.0] [r5.2.0] - 2021-05-04 - Fixed retrieving of filename from content-disposition http header used to persist a resource [#21216] - Fixed author and maintainer name and email [#21059] [#21189] @@ -20,14 +21,15 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Switched JSON management to gcube-jackson [#19735] - Added support to publish an item organizations not matching the current context [#19365] -## [v1.4.5] + +## [v1.4.5] [r5.1.0] - 2021-03-31 - Removed 'owner_org' field from result when reading an item [#20919] - Dirty patched item validator [#20965] - Improved error message return with message got from CKAN [#19516] -## [v1.4.4] +## [v1.4.4] [r5.0.0] - 2021-02-24 - Added count method for Item collection [#20627] - Added count method for Organization, Group and Profile collection [#20629] diff --git a/pom.xml b/pom.xml index 3e98ed6..4b1af99 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,11 @@ - + + org.gcube.portlets.user + uri-resolver-manager + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + org.glassfish.jersey.containers jersey-container-servlet diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java index 2ef0478..816eeb6 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -665,8 +665,7 @@ public class CKANPackage extends CKAN implements Moderated { protected String addItemURLViaResolver(JsonNode jsonNode) { // Adding Item URL via Resolver - URIResolver uriResolver = new URIResolver(); - String catalogueItemURL = uriResolver.getCatalogueItemURL(name); + String catalogueItemURL = URIResolver.getCatalogueItemURL(name); addExtraField(jsonNode, EXTRAS_ITEM_URL_KEY, catalogueItemURL); return catalogueItemURL; } diff --git a/src/main/java/org/gcube/gcat/utils/URIResolver.java b/src/main/java/org/gcube/gcat/utils/URIResolver.java index 4c998e7..2b8cf2f 100644 --- a/src/main/java/org/gcube/gcat/utils/URIResolver.java +++ b/src/main/java/org/gcube/gcat/utils/URIResolver.java @@ -1,24 +1,14 @@ package org.gcube.gcat.utils; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; +import java.util.HashMap; +import java.util.Map; -import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; import org.gcube.common.authorization.utils.manager.SecretManager; -import org.gcube.common.gxhttp.request.GXHTTPStringRequest; -import org.gcube.gcat.persistence.ckan.CKANInstance; +import org.gcube.portlets.user.uriresolvermanager.UriResolverManager; -import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; -import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; - -public class URIResolver { +public abstract class URIResolver { private static final String CATALOGUE_CONTEXT = "gcube_scope"; private static final String ENTITY_TYPE = "entity_context"; @@ -26,47 +16,16 @@ public class URIResolver { private static final String DATASET = "dataset"; - protected ObjectMapper mapper; - public URIResolver() { - this.mapper = new ObjectMapper(); - } - - protected StringBuilder getStringBuilder(InputStream inputStream) throws IOException { - StringBuilder result = new StringBuilder(); - try(BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while((line = reader.readLine()) != null) { - result.append(line); - } - } - return result; - } - - public String getCatalogueItemURL(String name) { + public static String getCatalogueItemURL(String name) { try { - String uriResolverURL = CKANInstance.getInstance().getUriResolverURL(); - - ObjectNode requestContent = mapper.createObjectNode(); String context = SecretManager.instance.get().getContext(); - requestContent.put(CATALOGUE_CONTEXT, context); - - requestContent.put(ENTITY_TYPE, DATASET); - requestContent.put(ENTITY_NAME, name); - - GXHTTPStringRequest gxhttpStringRequest = GXHTTPStringRequest.newRequest(uriResolverURL); - gxhttpStringRequest.from(Constants.CATALOGUE_NAME); - gxhttpStringRequest.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); - gxhttpStringRequest.isExternalCall(true); - String body = mapper.writeValueAsString(requestContent); - HttpURLConnection httpURLConnection = gxhttpStringRequest.post(body); - - if(httpURLConnection.getResponseCode() != 200) { - throw new InternalServerErrorException("Unable to get Item URL via URI Resolver"); - } - - String url = getStringBuilder(httpURLConnection.getInputStream()).toString(); - + UriResolverManager uriResolverManager = new UriResolverManager("CTLG"); + Map params = new HashMap<>(); + params.put(CATALOGUE_CONTEXT, context); + params.put(ENTITY_TYPE, DATASET); + params.put(ENTITY_NAME, name); + String url = uriResolverManager.getLink(params, false); return url; } catch(WebApplicationException e) { throw e; diff --git a/src/test/java/org/gcube/gcat/utils/URIResolverTest.java b/src/test/java/org/gcube/gcat/utils/URIResolverTest.java index dc4ccb8..8696262 100644 --- a/src/test/java/org/gcube/gcat/utils/URIResolverTest.java +++ b/src/test/java/org/gcube/gcat/utils/URIResolverTest.java @@ -11,8 +11,7 @@ public class URIResolverTest extends ContextTest { @Test public void getURL() { - URIResolver uriResolver = new URIResolver(); - String catalogueItemURL = uriResolver.getCatalogueItemURL("my_first_restful_transaction_model"); + String catalogueItemURL = URIResolver.getCatalogueItemURL("my_first_restful_transaction_model"); logger.debug("Item URL is {}", catalogueItemURL); }