diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANInstance.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANInstance.java index 6c6419f..4c73654 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANInstance.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANInstance.java @@ -13,6 +13,9 @@ import java.util.Set; import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.WebApplicationException; +import org.gcube.com.fasterxml.jackson.databind.JsonNode; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; +import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; import org.gcube.common.authorization.utils.manager.SecretManager; import org.gcube.common.encryption.encrypter.StringEncrypter; import org.gcube.common.resources.gcore.GenericResource; @@ -25,7 +28,6 @@ import org.gcube.resources.discovery.client.queries.api.SimpleQuery; import org.gcube.resources.discovery.icclient.ICFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.w3c.dom.NodeList; /** * @author Luca Frosini (ISTI - CNR) @@ -199,8 +201,7 @@ public class CKANInstance { public static final String GENERIC_RESOURCE_SECONDARY_TYPE_FOR_ORGANIZATIONS = "ApplicationProfile"; public static final String GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS = "Supported CKAN Organizations"; - public static final String GENERIC_RESOURCE_TAG_NAME = "CKANOrganization"; - public static final String GENERIC_RESOURCE_TAG_NAME_PLURAL = "CKANOrganizations"; + public static final String GENERIC_RESOURCE_CKAN_ORGANIZATIONS = "CKANOrganizations"; protected Set getSupportedOrganizationsFromIS() { Set supportedOrganizations = new HashSet<>(); @@ -221,14 +222,19 @@ public class CKANInstance { GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS, currentOrganizationName); supportedOrganizations.add(currentOrganizationName); } else { - GenericResource genericResource = resources.get(0); - NodeList nodeList = genericResource.profile().body().getChildNodes(); - if(nodeList != null && nodeList.getLength() > 0) { - for(int i = 0; i < nodeList.getLength(); i++) { - NodeList nl = nodeList.item(i).getChildNodes(); - String organization = nl.item(0).getNodeValue(); + try { + GenericResource genericResource = resources.get(0); + String body = genericResource.profile().body().getTextContent(); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(body); + ArrayNode array = (ArrayNode) jsonNode.get(GENERIC_RESOURCE_CKAN_ORGANIZATIONS); + for(int i = 0; i < array.size(); i++) { + String organization = array.get(i).asText(); supportedOrganizations.add(organization); } + }catch (Exception e) { + supportedOrganizations.clear(); + supportedOrganizations.add(currentOrganizationName); } } diff --git a/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java b/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java index f9d456a..2c64e13 100644 --- a/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java +++ b/src/test/java/org/gcube/gcat/persistence/ckan/CKANPackageTest.java @@ -278,32 +278,22 @@ public class CKANPackageTest extends ContextTest { genericResource.id(), stringWriter.toString()); } - protected String createXMLFragment(List organizations) throws Exception { + protected String createGRBody(List organizations) throws Exception { if(organizations==null || organizations.size()<1) { - throw new Exception("Unable to create the XML fragment for the generic resource with empty organization list"); + throw new Exception("Unable to create the body for the generic resource with empty organization list"); } - StringWriter stringWriter = new StringWriter(); - stringWriter.append("<"); - stringWriter.append(CKANInstance.GENERIC_RESOURCE_TAG_NAME_PLURAL); - stringWriter.append(">"); + ObjectMapper objectMapper = new ObjectMapper(); + ObjectNode objectNode = objectMapper.createObjectNode(); + ArrayNode arrayNode = objectNode.putArray(CKANInstance.GENERIC_RESOURCE_CKAN_ORGANIZATIONS); for(String organizationName : organizations) { - stringWriter.append("<"); - stringWriter.append(CKANInstance.GENERIC_RESOURCE_TAG_NAME); - stringWriter.append(">"); - stringWriter.append(organizationName); - stringWriter.append(""); + arrayNode.add(organizationName); } - stringWriter.append(""); - return stringWriter.toString(); + return objectMapper.writeValueAsString(objectNode); } protected void createGenericResourceForSupportedOrganizations(List organizations) throws Exception { - String xml = createXMLFragment(organizations); - createGenericResource(xml); + String json = createGRBody(organizations); + createGenericResource(json); } // @Test @@ -629,7 +619,7 @@ public class CKANPackageTest extends ContextTest { @Ignore // @Test - public void deleteAllTest() { + public void deleteAllInASpecificOrganization() { CKANPackage ckanPackage = new CKANPackage(); MultivaluedMap mvm = new MultivaluedHashMap(); mvm.add(GCatConstants.Q_KEY, "organization:devvre");