From 62a852ca4000dd00b73398871bfe52670d5b3bf9 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 22 Jan 2020 17:35:48 +0100 Subject: [PATCH] Fixed bug on resource update --- pom.xml | 3 +-- .../gcat/persistence/ckan/CKANResource.java | 5 ++++- .../java/org/gcube/gcat/utils/HTTPCall.java | 5 +++-- .../CatalogueStorageHubManagement.java | 14 ++++++++++++-- src/test/java/org/gcube/gcat/ContextTest.java | 2 +- .../persistence/ckan/CKANResourceTest.java | 19 +++++++++++++++++++ .../CatalogueStorageHubManagementTest.java | 2 +- 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 87d5929..e2930a9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.data-publishing gcat war - 1.4.1 + 1.4.2-SNAPSHOT gCube Catalogue (gCat) Service This service allows any client to publish on the gCube Catalogue. @@ -163,7 +163,6 @@ ch.qos.logback logback-classic - 1.2.3 test diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANResource.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANResource.java index 20d504b..9faf620 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANResource.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANResource.java @@ -297,7 +297,7 @@ public class CKANResource extends CKAN { urlToCheck = getFinalURL(url); } catch(Exception e) { // TODO Evaluate if we want to validate the URL. If the URL does not exists the service - // could decide refuse the Resource Creation + // could decide to refuse the Resource Creation } if(urlToCheck.getHost().compareTo(URI_RESOLVER_STORAGE_HUB_HOST) == 0) { if(urlToCheck.getPath().startsWith(URI_RESOLVER_STORAGE_HUB_PATH)) { @@ -400,6 +400,9 @@ public class CKANResource extends CKAN { String newURL = resourceNode.get(CKANResource.URL_KEY).asText(); if(oldURL.compareTo(newURL) == 0) { logger.trace("The URL of the resource with id {} was not changed", resourceID); + storageHubManagement = new CatalogueStorageHubManagement(); + this.mimeType = previousRepresentation.get(CKANResource.MIME_TYPE_KEY).asText(); + storageHubManagement.getPersistedFile(resourceID, mimeType); } else { logger.trace("The URL of resource with id {} has been changed the old URL was {}, the new URL is {}", resourceID, oldURL, newURL); diff --git a/src/main/java/org/gcube/gcat/utils/HTTPCall.java b/src/main/java/org/gcube/gcat/utils/HTTPCall.java index 31da9cd..dd9a06c 100644 --- a/src/main/java/org/gcube/gcat/utils/HTTPCall.java +++ b/src/main/java/org/gcube/gcat/utils/HTTPCall.java @@ -67,8 +67,9 @@ public class HTTPCall { || responseCode == HttpURLConnection.HTTP_SEE_OTHER || responseCode == Status.TEMPORARY_REDIRECT.getStatusCode() || responseCode == 308) { - finalURL = getURL(connection.getHeaderField("Location")); - finalURL = getFinalURL(finalURL); + URL newURL = getURL(connection.getHeaderField("Location")); + connection.disconnect(); + finalURL = getFinalURL(newURL); } return finalURL; diff --git a/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java b/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java index 8bab6e8..d27052a 100644 --- a/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java +++ b/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java @@ -75,7 +75,7 @@ public class CatalogueStorageHubManagement { } protected void internalAddRevisionID(String resourceID, String revisionID) throws Exception { - FileContainer fileContainer = storageHubManagement.getCreatedFile(); + FileContainer fileContainer = storageHubManagement.getPersistedFile(); Metadata metadata = fileContainer.get().getMetadata(); Map map = metadata.getMap(); map.put(CatalogueMetadata.CATALOGUE_RESOURCE_ID, resourceID); @@ -88,7 +88,7 @@ public class CatalogueStorageHubManagement { ApplicationMode applicationMode = new ApplicationMode(Constants.getCatalogueApplicationToken()); try { applicationMode.start(); - FileContainer createdfile = storageHubManagement.getCreatedFile(); + FileContainer createdfile = storageHubManagement.getPersistedFile(); createdfile.rename(resourceID); internalAddRevisionID(resourceID, revisionID); } finally { @@ -106,5 +106,15 @@ public class CatalogueStorageHubManagement { applicationMode.end(); } } + + public void getPersistedFile(String id, String mimeType) throws Exception { + ApplicationMode applicationMode = new ApplicationMode(Constants.getCatalogueApplicationToken()); + try { + applicationMode.start(); + storageHubManagement.getPersistedFile(id, mimeType); + } finally { + applicationMode.end(); + } + } } diff --git a/src/test/java/org/gcube/gcat/ContextTest.java b/src/test/java/org/gcube/gcat/ContextTest.java index 1666889..9d66a0b 100644 --- a/src/test/java/org/gcube/gcat/ContextTest.java +++ b/src/test/java/org/gcube/gcat/ContextTest.java @@ -45,7 +45,7 @@ public class ContextTest { } //DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE"; - DEFAULT_TEST_SCOPE_NAME = "/gcube/devNext/NextNext"; + DEFAULT_TEST_SCOPE_NAME = "/gcube/devsec/devVRE"; } public static String getCurrentScope(String token) throws ObjectNotFound, Exception { diff --git a/src/test/java/org/gcube/gcat/persistence/ckan/CKANResourceTest.java b/src/test/java/org/gcube/gcat/persistence/ckan/CKANResourceTest.java index 3ceb319..c06e3dd 100644 --- a/src/test/java/org/gcube/gcat/persistence/ckan/CKANResourceTest.java +++ b/src/test/java/org/gcube/gcat/persistence/ckan/CKANResourceTest.java @@ -73,6 +73,25 @@ public class CKANResourceTest extends ContextTest { ckanResource.create(objectNode); } + @Test + public void testCreateUpdate() throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + ObjectNode objectNode = objectMapper.createObjectNode(); + objectNode.put(CKANResource.NAME_KEY, "MyTestTy_rest_upload"); + objectNode.put(CKANResource.URL_KEY, "https://data-dev.d4science.net/C1G2"); + objectNode.put("description", "File uploaded using the REST API"); + // objectNode.put(CKANResource.ID_KEY, "ba7ab7e8-c268-4219-98cd-c73470870999"); + + String id = "5795a7ce-4444-439e-b77d-1df3beaa8a42"; // name = my_restful + CKANResource ckanResource = new CKANResource(id); + String json = ckanResource.getAsString(objectNode); + logger.debug("Going to create Resource {}", json); + String createdJson = ckanResource.create(objectNode); + + ckanResource = new CKANResource(id); + ckanResource.update(createdJson); + } + // @Test public void testDelete() throws Exception { CKANResource ckanResource = new CKANResource("f0326fec-d8ac-42c7-abff-c7905b4d938e"); diff --git a/src/test/java/org/gcube/gcat/workspace/CatalogueStorageHubManagementTest.java b/src/test/java/org/gcube/gcat/workspace/CatalogueStorageHubManagementTest.java index cebb5f5..6bd92c3 100644 --- a/src/test/java/org/gcube/gcat/workspace/CatalogueStorageHubManagementTest.java +++ b/src/test/java/org/gcube/gcat/workspace/CatalogueStorageHubManagementTest.java @@ -102,7 +102,7 @@ public class CatalogueStorageHubManagementTest extends ContextTest { Assert.assertTrue(catalogueStorageHubManagement.getMimeType().compareTo(MIME_TYPE) == 0); - FileContainer createdFileContainer = storageHubManagement.getCreatedFile(); + FileContainer createdFileContainer = storageHubManagement.getPersistedFile(); String version = "2"; catalogueStorageHubManagement.renameFile(RESOURCE_ID, version);