From 275880c428ee4515b898708703a43b06d3de9538 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 9 Dec 2020 15:33:28 +0100 Subject: [PATCH] Adding Configuration read/create to switch to the new IS --- pom.xml | 22 ++++++ .../org/gcube/gcat/profile/ISProfile.java | 73 ++++++++++++++++++- 2 files changed, 92 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 4851920..dcbef86 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,28 @@ + + org.gcube.information-system + information-system-model + provided + + + org.gcube.resource-management + gcube-model + provided + + + org.gcube.information-system + resource-registry-client + provided + + + org.gcube.information-system + resource-registry-publisher + provided + + + org.gcube.data-catalogue gcubedatacatalogue-metadata-discovery diff --git a/src/main/java/org/gcube/gcat/profile/ISProfile.java b/src/main/java/org/gcube/gcat/profile/ISProfile.java index 8b35609..c5fb919 100644 --- a/src/main/java/org/gcube/gcat/profile/ISProfile.java +++ b/src/main/java/org/gcube/gcat/profile/ISProfile.java @@ -1,7 +1,11 @@ package org.gcube.gcat.profile; import java.io.StringWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import javax.ws.rs.InternalServerErrorException; @@ -9,8 +13,11 @@ import javax.ws.rs.NotAuthorizedException; import javax.ws.rs.NotFoundException; import javax.ws.rs.WebApplicationException; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; +import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; import org.gcube.common.resources.gcore.GenericResource; import org.gcube.common.resources.gcore.Resources; +import org.gcube.datacatalogue.metadatadiscovery.DataCalogueMetadataFormatReader; import org.gcube.datacatalogue.metadatadiscovery.reader.MetadataFormatDiscovery; import org.gcube.datacatalogue.metadatadiscovery.reader.QueryForResourceUtil; import org.gcube.gcat.persistence.ckan.CKANUser; @@ -19,6 +26,20 @@ import org.gcube.gcat.persistence.ckan.CKANUserCache; import org.gcube.gcat.utils.Constants; import org.gcube.informationsystem.publisher.RegistryPublisher; import org.gcube.informationsystem.publisher.RegistryPublisherFactory; +import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClient; +import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClientFactory; +import org.gcube.resourcemanagement.model.impl.entities.facets.IdentifierFacetImpl; +import org.gcube.resourcemanagement.model.impl.entities.facets.SimpleFacetImpl; +import org.gcube.resourcemanagement.model.impl.entities.facets.XSDSchemaFacetImpl; +import org.gcube.resourcemanagement.model.impl.entities.resources.ConfigurationImpl; +import org.gcube.resourcemanagement.model.impl.relations.consistsof.IsIdentifiedByImpl; +import org.gcube.resourcemanagement.model.reference.entities.facets.IdentifierFacet; +import org.gcube.resourcemanagement.model.reference.entities.facets.IdentifierFacet.IdentificationType; +import org.gcube.resourcemanagement.model.reference.entities.facets.SimpleFacet; +import org.gcube.resourcemanagement.model.reference.entities.facets.XSDSchemaFacet; +import org.gcube.resourcemanagement.model.reference.entities.resources.Configuration; +import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy; import org.gcube.resources.discovery.client.api.DiscoveryClient; import org.gcube.resources.discovery.client.queries.api.Query; import org.gcube.resources.discovery.client.queries.impl.QueryBox; @@ -29,13 +50,24 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; -import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; - public class ISProfile { public static int PRETTY_PRINT_INDENT_FACTOR = 4; + public static final String PROFILE = "profile"; + public static final String PROFILE_SCHEMA = "profileSchema"; + + public static final String SCHEMA_URL_ADDRESS = "https://wiki.gcube-system.org/images_gcube/e/e8/Gcdcmetadataprofilev3.xsd"; + public static final URL SCHEMA_URL; + + static { + try { + SCHEMA_URL = new URL(SCHEMA_URL_ADDRESS); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + private static Logger logger = LoggerFactory.getLogger(ISProfile.class); protected ObjectMapper mapper; @@ -62,6 +94,41 @@ public class ISProfile { } } + /* + * https://wiki.gcube-system.org/gcube/Facet_Based_Resource_Model#Configuration + */ + protected Configuration instantiateConfiguration(String name, String xml) throws Exception { + Configuration configuration = new ConfigurationImpl(); + + IdentifierFacet identifierFacet = new IdentifierFacetImpl(); + identifierFacet.setValue(name); + identifierFacet.setType(IdentificationType.STRING); + IsIdentifiedBy isIdentifiedBy = new IsIdentifiedByImpl(configuration, identifierFacet); + configuration.addFacet(isIdentifiedBy); + + SimpleFacet profile = new SimpleFacetImpl(); + profile.setAdditionalProperty(PROFILE, xml); + configuration.addFacet(profile); + + XSDSchemaFacet xsdSchemaFacet = new XSDSchemaFacetImpl(); + xsdSchemaFacet.setName("gCube Item Profile"); + xsdSchemaFacet.setSchemaURL(SCHEMA_URL); + xsdSchemaFacet.setDescription("gCube Metadata Profile defines a Metadata schema XML-based for adding custom metadata fields."); + xsdSchemaFacet.setContent(DataCalogueMetadataFormatReader.getProfileSchemaString()); + configuration.addFacet(xsdSchemaFacet); + + return configuration; + } + + + protected Configuration getConfiguration(String name) throws ResourceRegistryException { + ResourceRegistryClient resourceRegistryClient = ResourceRegistryClientFactory.create(); + Map map = new HashMap<>(); + map.put(IdentifierFacet.VALUE_PROPERTY, name); + List configurations = resourceRegistryClient.getFilteredResources(Configuration.class, IsIdentifiedBy.class, IdentifierFacet.class, false, map); + return configurations.get(0); + } + /* * TODO Check the Queries because the name in the Profile differs from the name in *