Merge branch 'feature/20225' of gitea@code-repo.d4science.org:gCubeSystem/gcat.git into feature/20225

This commit is contained in:
Luca Frosini 2022-12-22 14:54:29 +01:00
commit 1971d5f0de
20 changed files with 860 additions and 223 deletions

View File

@ -3,11 +3,11 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for gCube Catalogue (gCat) Service
## [v2.4.2-SNAPSHOT]
## [v2.5.0-SNAPSHOT]
- Switched from commons-lang3 to commons-lang to avoid duplicates
- Set resource-registry-publisher dependency scope to provided
- Switching to Facet Based IS [#20225]
## [v2.4.1] [r5.14.0] - 2022-11-04

View File

@ -3,7 +3,7 @@
Welcome to gCube Catalogue Service (aka gCat) documentation
***********************************************************
gCat is a RESTful application which exposes operations ...
gCat is a RESTful application which exposes operations via REST-API.
See the available REST-API on `its API docs <../api-docs/index.html>`_.

View File

@ -12,7 +12,7 @@
<groupId>org.gcube.data-catalogue</groupId>
<artifactId>gcat</artifactId>
<packaging>war</packaging>
<version>2.4.2-SNAPSHOT</version>
<version>2.5.0-SNAPSHOT</version>
<name>gCube Catalogue (gCat) Service</name>
<description>
This service allows any client to publish on the gCube Catalogue.
@ -98,6 +98,11 @@
<groupId>org.gcube.information-system</groupId>
<artifactId>resource-registry-publisher</artifactId>
</dependency>
<dependency>
<groupId>org.gcube.information-system</groupId>
<artifactId>resource-registry-query-template-client</artifactId>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.resources</groupId>
<artifactId>common-gcore-resources</artifactId>

View File

@ -0,0 +1,114 @@
package org.gcube.gcat;
import java.io.IOException;
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxy;
import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxyFactory;
import org.gcube.gcat.rest.RequestFilter;
import org.gcube.smartgears.ApplicationManager;
import org.gcube.smartgears.ContextProvider;
import org.gcube.smartgears.context.application.ApplicationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class GCatInitializator implements ApplicationManager {
/**
* Logger
*/
private static Logger logger = LoggerFactory.getLogger(GCatInitializator.class);
/**
* {@inheritDoc}
* The method discover the plugins available on classpath and their own
* supported capabilities and publish a ServiceEndpoint with the
* discovered information.
* Furthermore create/connect to DB
*/
@Override
public void onInit() {
RequestFilter requestFilter = new RequestFilter();
try {
requestFilter.filter(null);
} catch (IOException e) {
throw new RuntimeException(e);
}
String context = SecretManagerProvider.instance.get().getContext();
logger.trace(
"\n-------------------------------------------------------\n"
+ "GCat is Starting on context {}\n"
+ "-------------------------------------------------------",
context);
ApplicationContext applicationContext = ContextProvider.get();
String gcatEServiceID = applicationContext.id();
try {
FacetBasedISConfigurationProxy facetBasedISConfigurationProxy = FacetBasedISConfigurationProxyFactory.getInstance(context);
facetBasedISConfigurationProxy.setGcatEServiceID(gcatEServiceID);
facetBasedISConfigurationProxy.createCallsForToVirtualService();
}catch (Exception e) {
logger.warn("Gcat is not configured through the Facet Based IS in context {}. Please create/addToContext the expected resources ASAP. The Gcore IS will be used.", context, e);
}
logger.trace(
"\n-------------------------------------------------------\n"
+ "GCat Started Successfully on context {}\n"
+ "-------------------------------------------------------",
context);
}
/**
* {@inheritDoc}
* This function is invoked before the service will stop and unpublish the
* resource from the IS to maintain the infrastructure integrity.
* Furthermore close the connection to DB.
*/
@Override
public void onShutdown(){
RequestFilter requestFilter = new RequestFilter();
try {
requestFilter.filter(null);
} catch (IOException e) {
throw new RuntimeException(e);
}
String context = SecretManagerProvider.instance.get().getContext();
logger.trace(
"\n-------------------------------------------------------\n"
+ "GCat is Stopping on context {}\n"
+ "-------------------------------------------------------",
context);
/*
* We don't delete the relation.
* Thanks to the propagation constraint,
* it will be deleted when the EService will be deleted.
*
ApplicationContext applicationContext = ContextProvider.get();
String gcatEServiceID = applicationContext.id();
FacetBasedISConfigurationProxy facetBasedISConfigurationProxy = FacetBasedISConfigurationProxyFactory.getInstance(context);
facetBasedISConfigurationProxy.setGcatEServiceID(gcatEServiceID);
try {
facetBasedISConfigurationProxy.deleteCallsForToVirtualService();
}catch (Exception e) {
logger.warn("Gcat is not configured through the Facet Based IS in context {}. Please create/addToContext the expected resources ASAP. The Gcore IS will be used.", context, e);
}
*/
logger.trace(
"\n-------------------------------------------------------\n"
+ "GCat Stopped Successfully on context {}\n"
+ "-------------------------------------------------------",
context);
}
}

View File

@ -4,12 +4,14 @@ import javax.ws.rs.ApplicationPath;
import org.gcube.gcat.rest.Item;
import org.gcube.gcat.rest.administration.Configuration;
import org.gcube.smartgears.annotations.ManagedBy;
import org.glassfish.jersey.server.ResourceConfig;
/**
* @author Luca Frosini (ISTI - CNR)
*/
@ApplicationPath("/")
@ManagedBy(GCatInitializator.class)
public class ResourceInitializer extends ResourceConfig {
public ResourceInitializer() {

View File

@ -5,6 +5,8 @@ import java.util.Map;
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
import org.gcube.gcat.configuration.isproxies.GCoreISConfigurationProxy;
import org.gcube.gcat.configuration.isproxies.GCoreISConfigurationProxyFactory;
import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxyFactory;
import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxy;
import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration;
import org.gcube.gcat.persistence.ckan.CKANUserCache;
@ -21,26 +23,32 @@ public class CatalogueConfigurationFactory {
}
private static ServiceCatalogueConfiguration load(String context) {
FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context);
ServiceCatalogueConfiguration serviceCatalogueConfiguration = restISConfigurationProxy.getCatalogueConfiguration();
if(serviceCatalogueConfiguration == null) {
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context);
ServiceCatalogueConfiguration serviceCatalogueConfiguration = null;
try {
FacetBasedISConfigurationProxy facetBasedISConfigurationProxy = FacetBasedISConfigurationProxyFactory.getInstance(context);
serviceCatalogueConfiguration = facetBasedISConfigurationProxy.getCatalogueConfiguration();
} catch(Exception e){
GCoreISConfigurationProxy gCoreISConfigurationProxy = GCoreISConfigurationProxyFactory.getInstance();
serviceCatalogueConfiguration = gCoreISConfigurationProxy.getCatalogueConfiguration();
}
return serviceCatalogueConfiguration;
}
private static void purgeFromIS(String context) {
FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context);
FacetBasedISConfigurationProxy restISConfigurationProxy = FacetBasedISConfigurationProxyFactory.getInstance(context);
restISConfigurationProxy.delete();
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context);
GCoreISConfigurationProxy gCoreISConfigurationProxy = GCoreISConfigurationProxyFactory.getInstance();
gCoreISConfigurationProxy.delete();
}
private static void createOrUpdateOnIS(String context, ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context,catalogueConfiguration);
FacetBasedISConfigurationProxy restISConfigurationProxy = FacetBasedISConfigurationProxyFactory.getInstance(context);
restISConfigurationProxy.setCatalogueConfiguration(catalogueConfiguration);
restISConfigurationProxy.createOrUpdateOnIS();
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context, catalogueConfiguration);
GCoreISConfigurationProxy gCoreISConfigurationProxy = GCoreISConfigurationProxyFactory.getInstance();
gCoreISConfigurationProxy.setCatalogueConfiguration(catalogueConfiguration);
gCoreISConfigurationProxy.createOrUpdateOnIS();
}

View File

@ -1,264 +1,454 @@
package org.gcube.gcat.configuration.isproxies;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import javax.ws.rs.InternalServerErrorException;
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
import org.gcube.gcat.api.GCatConstants;
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
import org.gcube.gcat.api.configuration.CatalogueConfiguration;
import org.gcube.gcat.configuration.service.FacetBasedISServiceCatalogueConfiguration;
import org.gcube.gcat.configuration.service.ServiceCKANDB;
import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration;
import org.gcube.informationsystem.base.reference.Direction;
import org.gcube.informationsystem.model.reference.entities.Facet;
import org.gcube.informationsystem.model.reference.entities.Resource;
import org.gcube.informationsystem.model.impl.properties.HeaderImpl;
import org.gcube.informationsystem.model.impl.properties.PropagationConstraintImpl;
import org.gcube.informationsystem.model.impl.relations.ConsistsOfImpl;
import org.gcube.informationsystem.model.reference.entities.Entity;
import org.gcube.informationsystem.model.reference.properties.Encrypted;
import org.gcube.informationsystem.model.reference.properties.Header;
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint;
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint;
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint;
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
import org.gcube.informationsystem.queries.templates.reference.entities.QueryTemplate;
import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException;
import org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException;
import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClient;
import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClientFactory;
import org.gcube.informationsystem.types.TypeMapper;
import org.gcube.informationsystem.resourceregistry.publisher.ResourceRegistryPublisher;
import org.gcube.informationsystem.resourceregistry.publisher.ResourceRegistryPublisherFactory;
import org.gcube.informationsystem.resourceregistry.queries.templates.ResourceRegistryQueryTemplateClient;
import org.gcube.informationsystem.resourceregistry.queries.templates.ResourceRegistryQueryTemplateClientFactory;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.resourcemanagement.model.impl.entities.facets.SimpleFacetImpl;
import org.gcube.resourcemanagement.model.impl.entities.resources.EServiceImpl;
import org.gcube.resourcemanagement.model.impl.relations.isrelatedto.CallsForImpl;
import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SimpleFacet;
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
import org.gcube.resourcemanagement.model.reference.entities.resources.Configuration;
import org.gcube.resourcemanagement.model.reference.entities.resources.EService;
import org.gcube.resourcemanagement.model.reference.entities.resources.VirtualService;
import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.CallsFor;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.IsCustomizedBy;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Uses;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<Configuration> {
public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleFacet> {
private static Logger logger = LoggerFactory.getLogger(FacetBasedISConfigurationProxy.class);
public static final String QUERY_TEMPLATE_DIRECTORY_NAME = "query-template";
public static final String GCAT_ESERVICE_UUID_VARNAME = "$uuid";
public static final String GET_CALLS_FOR_QUERY_TEMPLATE_FILENAME = "01-get-calls-for-query-template.json";
public static final String QUERY_DIRECTORY_NAME = "query";
public static final String GET_CATALOGUE_VIRTUAL_SERVICE_FILENAME = "01-get-catalogue-virtual-service.json";
public static final String GET_GCAT_CONFIGURATION_FILENAME = "02-get-gcat-configuration.json";
public static final String GET_SIMPLE_FACET_OF_GCAT_CONFIGURATION_FILENAME = "03-get-simple-facet-of-gcat-configuration.json";
public static final String GET_ACCESS_POINT_FACET_OF_CKAN_SERVICE_FILENAME = "05-get-access-point-facet-of-ckan-service.json";
public static final String GET_ACCESS_POINT_FACET_OF_POSTGRES_CKAN_DB_FILENAME = "07-get-access-point-facet-of-postgres-ckan-db.json";
public static final String GET_ACCESS_POINT_FACET_OF_SOLR_SERVICE_FILENAME = "09-get-access-point-facet-of-solr-service.json";
private static String queryTemplateName;
static {
ResourceRegistryQueryTemplateClient rrqtc = ResourceRegistryQueryTemplateClientFactory.create();
try {
queryTemplateName = installQueryTemplate(rrqtc);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected static QueryTemplate getQueryTemplate() throws Exception {
File queryTemplateFile = getJsonQueryTemplateFromFile(GET_CALLS_FOR_QUERY_TEMPLATE_FILENAME);
QueryTemplate queryTemplate = ElementMapper.unmarshal(QueryTemplate.class, new FileReader(queryTemplateFile));
return queryTemplate;
}
protected static String installQueryTemplate(ResourceRegistryQueryTemplateClient rrqtc) throws Exception {
QueryTemplate queryTemplate = getQueryTemplate();
/*
* Going to create/update the query template.
* No need to test if exists and/or if is the last version.
*/
queryTemplate = rrqtc.update(queryTemplate);
return queryTemplate.getName();
}
protected static File getFile(String directoryName, String filename) throws Exception {
URL directoryURL = FacetBasedISConfigurationProxy.class.getClassLoader().getResource(directoryName);
File directory = new File(directoryURL.toURI());
return new File(directory, filename);
}
protected static File getJsonQueryTemplateFromFile(String filename) throws Exception {
return getFile(QUERY_TEMPLATE_DIRECTORY_NAME, filename);
}
protected static File getJsonQueryFromFile(String filename) throws Exception {
return getFile(QUERY_DIRECTORY_NAME, filename);
}
//
// Configuration
// ----------------------
// IsCustomizedBy | |
// -----------------> | gcat-configuration |
// / | |
// / ----------------------
// EService VirtualService /
// ------------ -----------------------------
// | | CallsFor | |
// | gcat | ------------> | catalogue-virtual-service |
// | | | |
// ------------ -----------------------------
// \ EService
// \ --------------------
// \ Uses | |
// \ ------------------> | postgres-ckan-db |
// \ / | |
// \ EService / --------------------
// \ -----------------
// \ CallsFor | |
// -------------> | ckan |
// | |
// ----------------- EService
// \ --------------------
// \ Uses | |
// ------------------> | solr |
// | |
// --------------------
/*
* Some resources are not needed to be queried and maintained.
* Leaving comment to remember that is not an error
* protected Configuration configuration;
*
* public static final String GET_CKAN_SERVICE_FILENAME = "04-get-ckan-service.json";
* protected EService ckanService;
*
* public static final String GET_POSTGRES_CKAN_DB_FILENAME = "06-get-postgres-ckan-db.json";
* protected EService solrService;
*
* public static final String GET_SOLR_SERVICE_FILENAME = "08-get-solr-service.json";
* protected EService ckanDB;
*
*/
protected final ObjectMapper objectMapper;
protected final ResourceRegistryClient resourceRegistryClient;
protected final ResourceRegistryPublisher resourceRegistryPublisher;
/*
* We need to keep this resource because we want to create
* an IsRelatedTo relation
* i.e. EService(gcat) --CallsFor--> VirtualService(catalogue-virtual-service)
*/
protected VirtualService virtualService;
protected Configuration configuration;
protected SimpleFacet configurationSimpleFacet;
protected EService ckanService;
protected EService solrService;
protected EService ckanDB;
protected String gcatEServiceID;
public FacetBasedISConfigurationProxy(String context) {
super(context);
objectMapper = new ObjectMapper();
resourceRegistryClient = ResourceRegistryClientFactory.create();
resourceRegistryPublisher = ResourceRegistryPublisherFactory.create();
}
public FacetBasedISConfigurationProxy(String context, ServiceCatalogueConfiguration catalogueConfiguration) {
super(context, catalogueConfiguration);
public VirtualService getVirtualService() {
if(virtualService==null) {
virtualService = queryVirtualService();
}
return virtualService;
}
protected VirtualService queryVirtualService(ResourceRegistryClient resourceRegistryClient) throws ResourceRegistryException, JsonProcessingException {
Map<String,String> facetConstraint = new HashMap<>();
facetConstraint.put(SoftwareFacet.GROUP_PROPERTY, GCatConstants.CONFIGURATION_CATEGORY);
facetConstraint.put(SoftwareFacet.NAME_PROPERTY, GCatConstants.CATALOGUE_SERVICE_VIRTUAL_SERVICE_ID);
public void setGcatEServiceID(String gcatEServiceID) {
this.gcatEServiceID = gcatEServiceID;
}
public List<CallsFor<EService, VirtualService>> getCallsForToVirtualService() throws Exception {
ResourceRegistryQueryTemplateClient rrqtc = ResourceRegistryQueryTemplateClientFactory.create();
logger.trace("Going to query for {} --{}--> ({} with {})",
VirtualService.NAME, IsIdentifiedBy.NAME, SoftwareFacet.NAME, facetConstraint);
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put(GCAT_ESERVICE_UUID_VARNAME, gcatEServiceID);
List<VirtualService> virtualServices = resourceRegistryClient.getFilteredResources(VirtualService.class, IsIdentifiedBy.class, SoftwareFacet.class, false, facetConstraint);
int size = virtualServices.size();
if(virtualServices==null || size==0) {
String message = String.format("No %s --%s--> (%s with %s) found",
VirtualService.NAME, IsIdentifiedBy.NAME, SoftwareFacet.NAME, facetConstraint.toString());
List<CallsFor<EService, VirtualService>> callsForList = rrqtc.run(queryTemplateName, objectNode);
return callsForList;
}
public List<CallsFor<EService, VirtualService>> deleteCallsForToVirtualService(List<CallsFor<EService, VirtualService>> callsForList) throws SchemaViolationException, NotFoundException, ResourceRegistryException {
for(CallsFor<EService, VirtualService> cf : callsForList) {
resourceRegistryPublisher.delete(cf);
}
return callsForList;
}
public List<CallsFor<EService, VirtualService>> deleteCallsForToVirtualService() throws Exception {
List<CallsFor<EService, VirtualService>> callsForList = getCallsForToVirtualService();
return deleteCallsForToVirtualService(callsForList);
}
public CallsFor<EService, VirtualService> createCallsForToVirtualService() throws Exception {
List<CallsFor<EService, VirtualService>> callsForList = getCallsForToVirtualService();
CallsFor<EService, VirtualService> callsFor = null;
int size = callsForList.size();
UUID gcatEServiceUUID = UUID.fromString(gcatEServiceID);
if(size>1) {
logger.warn("There are {} instances of {} relation beetween gcat Eservice with UUID {} and the {} (catalogue-virtual-service). This is very strange because there should be only one. We are going to delete them and recreated a new one.",
callsForList.size(), CallsFor.NAME, gcatEServiceID, VirtualService.NAME);
logger.trace("{} relation instances that are going to be deleted are {}",
CallsFor.NAME, ElementMapper.marshal(callsForList));
deleteCallsForToVirtualService(callsForList);
size = 0;
}
if(size==0) {
PropagationConstraint propagationConstraint = new PropagationConstraintImpl();
propagationConstraint.setAddConstraint(AddConstraint.unpropagate);
propagationConstraint.setRemoveConstraint(RemoveConstraint.keep);
EService gcatEService = new EServiceImpl();
gcatEService.setHeader(new HeaderImpl(gcatEServiceUUID));
VirtualService virtualService = queryVirtualService();
callsFor = new CallsForImpl<EService, VirtualService>(gcatEService, virtualService, propagationConstraint);
callsFor = resourceRegistryPublisher.create(callsFor);
}else if(size==1){
callsFor = callsForList.get(0);
}
return callsFor;
}
protected List<Entity> queryListOfEntities(String query) throws Exception {
logger.trace("Going to request the following query:\n{}", query);
String result = resourceRegistryClient.jsonQuery(query);
logger.trace("The query:\n{}\nproduced the following result:\n{}", query, result);
List<Entity> entities = ElementMapper.unmarshalList(Entity.class, result);
return entities;
}
protected JsonNode getQuery(File jsonQueryFile) throws Exception {
JsonNode query = objectMapper.readTree(jsonQueryFile);
return query;
}
protected <E extends Entity> E getUniqueEntity(List<E> entities, String originalQuery) throws JsonProcessingException {
int size = entities.size();
if(entities==null || size==0) {
String message = String.format("No instance found with query:\n%s", originalQuery);
logger.error(message);
throw new InternalServerErrorException(message);
}
if(size>1) {
String message = String.format(
"Too many %s --%s--> (%s with %s) found (i.e. expected 1, found %d)). %s",
VirtualService.NAME, IsIdentifiedBy.NAME, SoftwareFacet.NAME,
facetConstraint.toString(), size, ElementMapper.marshal(virtualServices));
"Too many instances found (i.e. expected 1, found %d) with query:\n%s\nthe obtained result is:\n%s",
size, originalQuery, ElementMapper.marshal(entities));
logger.error(message);
throw new InternalServerErrorException(message);
}
return virtualServices.get(0);
return entities.get(0);
}
protected Configuration queryConfiguration(ResourceRegistryClient resourceRegistryClient, VirtualService virtualService) throws ResourceRegistryException, JsonProcessingException {
List<Configuration> configurations = resourceRegistryClient.getRelatedResourcesFromReferenceResource(
Configuration.class, IsCustomizedBy.class, virtualService, Direction.IN, true);
int size = configurations.size();
if(configurations==null || size==0) {
String message = String.format(
"No %s <--%s-- (%s uuid:%s) found",
Configuration.NAME, IsCustomizedBy.NAME, VirtualService.NAME,
virtualService.getHeader().getUUID());
logger.error(message);
throw new InternalServerErrorException(message);
}
if(size>1) {
String message = String.format(
"Too many %s <--%s-- (%s uuid:%s) found (i.e. expected 1, found %d)). %s",
Configuration.NAME, IsCustomizedBy.NAME, VirtualService.NAME,
virtualService.getHeader().getUUID(), size, ElementMapper.marshal(configurations));
logger.error(message);
throw new InternalServerErrorException(message);
}
return configurations.get(0);
protected Entity queryEntity(String filename) throws Exception{
File jsonQueryFile = getJsonQueryFromFile(filename);
JsonNode query = getQuery(jsonQueryFile);
String jsonQueryAsString = objectMapper.writeValueAsString(query);
List<Entity> entities = queryListOfEntities(jsonQueryAsString);
return getUniqueEntity(entities, jsonQueryAsString);
}
protected <F extends Facet, C extends ConsistsOf<? extends Resource, F>> F getFacetFromResource(Resource resource, Class<C> coClz, Class<F> fClz) throws JsonProcessingException {
List<F> facets = resource.getFacets(coClz, fClz);
int size = facets.size();
if(facets==null || size==0) {
String message = String.format(
"No %s <--%s-- %s found",
TypeMapper.getType(fClz), TypeMapper.getType(coClz), TypeMapper.getType(resource.getClass()));
logger.error(message);
throw new InternalServerErrorException(message);
}
if(size>1) {
String message = String.format(
"Too many %s <--%s-- %s found (i.e. expected 1, found %d)). %s",
TypeMapper.getType(fClz), TypeMapper.getType(coClz), TypeMapper.getType(resource.getClass()),
size, ElementMapper.marshal(facets));
logger.error(message);
throw new InternalServerErrorException(message);
}
return facets.get(0);
}
@SuppressWarnings("unchecked")
protected SimpleFacet getConfigurationSimpleFacet() throws JsonProcessingException {
return getFacetFromResource(configuration, ConsistsOf.class, SimpleFacet.class);
}
protected EService queryCkanService(ResourceRegistryClient resourceRegistryClient, VirtualService virtualService) throws ResourceRegistryException, JsonProcessingException {
List<EService> eServices = resourceRegistryClient.getRelatedResourcesFromReferenceResource(
EService.class, CallsFor.class, virtualService, Direction.IN, true);
int size = eServices.size();
if(eServices==null || size==0) {
String message = String.format(
"No %s <--%s-- (%s uuid:%s) found",
EService.NAME, Uses.NAME, VirtualService.NAME,
virtualService.getHeader().getUUID());
logger.error(message);
throw new InternalServerErrorException(message);
}
if(size>1) {
String message = String.format(
"Too many %s <--%s-- (%s uuid:%s) found (i.e. expected 1, found %d)). %s",
EService.NAME, CallsFor.NAME, VirtualService.NAME,
virtualService.getHeader().getUUID(), size, ElementMapper.marshal(eServices));
logger.error(message);
throw new InternalServerErrorException(message);
}
return eServices.get(0);
}
protected List<EService> queryEServicesUsedByCkanService(ResourceRegistryClient resourceRegistryClient, EService ckanService) throws ResourceRegistryException, JsonProcessingException {
List<EService> eServices = resourceRegistryClient.getRelatedResourcesFromReferenceResource(
EService.class, Uses.class, ckanService, Direction.IN, true);
int size = eServices.size();
if(eServices==null || size==0) {
String message = String.format(
"No %s <--%s-- (%s uuid:%s) found",
EService.NAME, Uses.NAME, EService.NAME,
ckanService.getHeader().getUUID());
logger.error(message);
throw new InternalServerErrorException(message);
}
return eServices;
}
protected void getSolrServiceAndCKanDB(List<EService> eServices) throws JsonProcessingException {
for(EService eService : eServices) {
SoftwareFacet softwareFacet = getFacetFromResource(eService, IsIdentifiedBy.class, SoftwareFacet.class);
String group = softwareFacet.getGroup();
String name = softwareFacet.getName();
// TODO
// if(group.compareTo()==0 && name.compareTo()==0) {
// // TODO
// }
//
// if(group.compareTo()==0 && name.compareTo()==0) {
// // TODO
// }
}
if(solrService==null) {
// TODO
}
if(ckanDB==null) {
// TODO
protected VirtualService queryVirtualService() throws InternalServerErrorException {
try {
VirtualService virtualService = (VirtualService) queryEntity(GET_CATALOGUE_VIRTUAL_SERVICE_FILENAME);
return virtualService;
}catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
protected ServiceCatalogueConfiguration createServiceCatalogueConfiguration() {
ServiceCatalogueConfiguration serviceCatalogueConfiguration = new ServiceCatalogueConfiguration(context);
protected Configuration queryGcatConfiguration() throws Exception {
Configuration configuration = (Configuration) queryEntity(GET_GCAT_CONFIGURATION_FILENAME);
return configuration;
}
protected SimpleFacet queryConfigurationSimpleFacet() throws Exception {
SimpleFacet configurationSimpleFacet = (SimpleFacet) queryEntity(GET_SIMPLE_FACET_OF_GCAT_CONFIGURATION_FILENAME);
return configurationSimpleFacet;
}
protected AccessPointFacet queryCkanServiceAccessPointFacet() throws Exception {
AccessPointFacet accessPointFacet = (AccessPointFacet) queryEntity(GET_ACCESS_POINT_FACET_OF_CKAN_SERVICE_FILENAME);
return accessPointFacet;
}
protected AccessPointFacet queryPostgresCkanDBAccessPointFacet() throws Exception {
AccessPointFacet accessPointFacet = (AccessPointFacet) queryEntity(GET_ACCESS_POINT_FACET_OF_POSTGRES_CKAN_DB_FILENAME);
return accessPointFacet;
}
public AccessPointFacet querySolrServiceAccessPointFacet() throws Exception {
AccessPointFacet accessPointFacet = (AccessPointFacet) queryEntity(GET_ACCESS_POINT_FACET_OF_SOLR_SERVICE_FILENAME);
return accessPointFacet;
}
protected ServiceCatalogueConfiguration setConfigurationInfoFromSimpleFacet(SimpleFacet configurationSimpleFacet, ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
Header header = configurationSimpleFacet.getHeader();
if(header!=null && header.getUUID()!=null) {
catalogueConfiguration.setID(header.getUUID().toString());
}
serviceCatalogueConfiguration.setID(configuration.getHeader().getUUID().toString());
serviceCatalogueConfiguration.setModerationEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.MODERATION_ENABLED_KEY));
serviceCatalogueConfiguration.setNotificationToUsersEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.NOTIFICATION_TO_USER_ENABLED_KEY));
serviceCatalogueConfiguration.setSocialPostEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.SOCIAL_POST_ENABLED_KEY));
catalogueConfiguration.setModerationEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.MODERATION_ENABLED_KEY));
catalogueConfiguration.setNotificationToUsersEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.NOTIFICATION_TO_USER_ENABLED_KEY));
catalogueConfiguration.setSocialPostEnabled((boolean) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.SOCIAL_POST_ENABLED_KEY));
serviceCatalogueConfiguration.setDefaultOrganization((String) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.DEFAULT_ORGANIZATION_KEY));
catalogueConfiguration.setDefaultOrganization((String) configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.DEFAULT_ORGANIZATION_KEY));
Object supportedOrganizationsObj = configurationSimpleFacet.getAdditionalProperty(CatalogueConfiguration.SUPPORTED_ORGANIZATIONS_KEY);
Set<String> supportedOrganizations = new HashSet<>();
if(supportedOrganizationsObj instanceof Collection) {
supportedOrganizations = new HashSet<String>((Collection<String>) supportedOrganizationsObj);
boolean forceUpdate = false;
if(supportedOrganizationsObj!=null && supportedOrganizationsObj instanceof Collection) {
@SuppressWarnings("unchecked")
Set<String> supportedOrganizations = new HashSet<String>((Collection<String>) supportedOrganizationsObj);
catalogueConfiguration.setSupportedOrganizations(supportedOrganizations);
}else {
Set<String> supportedOrganizations = new HashSet<>();
supportedOrganizations.add(catalogueConfiguration.getDefaultOrganization());
configurationSimpleFacet.setAdditionalProperty(CatalogueConfiguration.SUPPORTED_ORGANIZATIONS_KEY, supportedOrganizations);
forceUpdate = true;
catalogueConfiguration.setSupportedOrganizations(supportedOrganizations);
}
supportedOrganizations.add(serviceCatalogueConfiguration.getDefaultOrganization());
serviceCatalogueConfiguration.setSupportedOrganizations(supportedOrganizations);
Map<String,Object> additionalProperties = new HashMap<>(configurationSimpleFacet.getAdditionalProperties());
for(String key : additionalProperties.keySet()) {
if(!CatalogueConfiguration.KNOWN_PROPERTIES.contains(key)) {
serviceCatalogueConfiguration.setAdditionalProperty(key, additionalProperties.get(key));
if(key.startsWith("@")) {
continue;
}
Object value = additionalProperties.get(key);
catalogueConfiguration.setAdditionalProperty(key, value);
}
}
return serviceCatalogueConfiguration;
if(forceUpdate) {
updateOnIS();
}
return catalogueConfiguration;
}
public ServiceCatalogueConfiguration setCkanServiceInfo(ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
AccessPointFacet ckanServiceAccessPointFacet = queryCkanServiceAccessPointFacet();
catalogueConfiguration.setCkanURL(ckanServiceAccessPointFacet.getEndpoint().toString());
Encrypted encrypted = (Encrypted) ckanServiceAccessPointFacet.getAdditionalProperty(CatalogueConfiguration.SYS_ADMIN_TOKEN_KEY);
String encryptedPassword = encrypted.getEncryptedValue();
catalogueConfiguration.setSysAdminToken(encryptedPassword);
return catalogueConfiguration;
}
public ServiceCatalogueConfiguration setCkanDBInfo(ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
AccessPointFacet postgresCkanDBAccessPointFacet = queryPostgresCkanDBAccessPointFacet();
ServiceCKANDB ckanDB = new ServiceCKANDB();
String ckanDbURL = postgresCkanDBAccessPointFacet.getEndpoint().toString();
ckanDB.setUrl(ckanDbURL);
Encrypted encrypted = (Encrypted) postgresCkanDBAccessPointFacet.getAdditionalProperty(ServiceCKANDB.PASSWORD_KEY);
String encryptedPassword = encrypted.getEncryptedValue();
ckanDB.setEncryptedPassword(encryptedPassword);
String username = (String) postgresCkanDBAccessPointFacet.getAdditionalProperty(ServiceCKANDB.USERNAME_KEY);
ckanDB.setUsername(username);
catalogueConfiguration.setCkanDB(ckanDB);
return catalogueConfiguration;
}
public ServiceCatalogueConfiguration setSolrServiceInfo(ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
AccessPointFacet solrServiceAccessPointFacet = querySolrServiceAccessPointFacet();
String solrURL = solrServiceAccessPointFacet.getEndpoint().toString();
catalogueConfiguration.setSolrURL(solrURL);
return catalogueConfiguration;
}
protected SimpleFacet getSimpleFacetFromConfiguration(ServiceCatalogueConfiguration catalogueConfiguration) {
SimpleFacet simpleFacet = new SimpleFacetImpl();
if(catalogueConfiguration.getID()!=null) {
UUID uuid = null;
try {
uuid = UUID.fromString(catalogueConfiguration.getID());
simpleFacet.getHeader().setUUID(uuid);
}catch (Exception e) {
}
}
simpleFacet.setAdditionalProperty(CatalogueConfiguration.MODERATION_ENABLED_KEY, catalogueConfiguration.isModerationEnabled());
simpleFacet.setAdditionalProperty(CatalogueConfiguration.NOTIFICATION_TO_USER_ENABLED_KEY, catalogueConfiguration.isNotificationToUsersEnabled());
simpleFacet.setAdditionalProperty(CatalogueConfiguration.SOCIAL_POST_ENABLED_KEY, catalogueConfiguration.isSocialPostEnabled());
simpleFacet.setAdditionalProperty(CatalogueConfiguration.DEFAULT_ORGANIZATION_KEY, catalogueConfiguration.getDefaultOrganization());
simpleFacet.setAdditionalProperty(CatalogueConfiguration.SUPPORTED_ORGANIZATIONS_KEY, catalogueConfiguration.getSupportedOrganizations());
Map<String,Object> additionalProperties = new HashMap<>(catalogueConfiguration.getAdditionalProperties());
for(String key : additionalProperties.keySet()) {
if(!CatalogueConfiguration.KNOWN_PROPERTIES.contains(key)) {
Object value = additionalProperties.get(key);
simpleFacet.setAdditionalProperty(key, value);
}
}
return simpleFacet;
}
@Override
protected ServiceCatalogueConfiguration readFromIS() {
try {
ResourceRegistryClient resourceRegistryClient = ResourceRegistryClientFactory.create();
catalogueConfiguration = new FacetBasedISServiceCatalogueConfiguration(context, this);
virtualService = queryVirtualService(resourceRegistryClient);
configuration = queryConfiguration(resourceRegistryClient, virtualService);
configurationSimpleFacet = getConfigurationSimpleFacet();
ckanService = queryCkanService(resourceRegistryClient, virtualService);
List<EService> eServices = queryEServicesUsedByCkanService(resourceRegistryClient, ckanService);
getSolrServiceAndCKanDB(eServices);
catalogueConfiguration = createServiceCatalogueConfiguration();
configurationSimpleFacet = getISResource();
if(configurationSimpleFacet==null) {
configurationSimpleFacet = getSimpleFacetFromConfiguration(catalogueConfiguration);
}else {
catalogueConfiguration = setConfigurationInfoFromSimpleFacet(configurationSimpleFacet, catalogueConfiguration);
}
catalogueConfiguration = setCkanServiceInfo(catalogueConfiguration);
catalogueConfiguration = setCkanDBInfo(catalogueConfiguration);
catalogueConfiguration = setSolrServiceInfo(catalogueConfiguration);
}catch (InternalServerErrorException e) {
throw e;
@ -271,25 +461,51 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<Configu
@Override
public void delete() {
// TODO Auto-generated method stub
SimpleFacet simpleFacet = getISResource();
if(simpleFacet!=null) {
try {
resourceRegistryPublisher.delete(simpleFacet);
} catch (Exception e) {
throw new InternalServerErrorException("Unable to delete SimpleFacet with UUID " + simpleFacet.getHeader().getUUID().toString(), e);
}
}
}
@Override
protected ServiceCatalogueConfiguration createOnIS() throws Exception {
// TODO Auto-generated method stub
return null;
UUID uuid = configurationSimpleFacet.getHeader().getUUID();
if(uuid==null) {
Configuration gcatConfiguration = queryGcatConfiguration();
ConsistsOf<Configuration, SimpleFacet> co = new ConsistsOfImpl<>(gcatConfiguration, configurationSimpleFacet);
co = resourceRegistryPublisher.create(co);
configurationSimpleFacet = co.getTarget();
setConfigurationInfoFromSimpleFacet(configurationSimpleFacet, catalogueConfiguration);
}
return catalogueConfiguration;
}
@Override
protected Configuration getISResource() {
// TODO Auto-generated method stub
return null;
protected SimpleFacet getISResource() {
if(configurationSimpleFacet==null) {
try {
configurationSimpleFacet = queryConfigurationSimpleFacet();
}catch (Exception e) {
return null;
}
}
return configurationSimpleFacet;
}
@Override
protected ServiceCatalogueConfiguration updateOnIS(Configuration configuration) throws Exception {
// TODO Auto-generated method stub
return null;
protected ServiceCatalogueConfiguration updateOnIS() throws Exception {
Header header = configurationSimpleFacet.getHeader();
if(header!=null && header.getUUID()!=null) {
configurationSimpleFacet = getSimpleFacetFromConfiguration(catalogueConfiguration);
configurationSimpleFacet = resourceRegistryPublisher.update(configurationSimpleFacet);
setConfigurationInfoFromSimpleFacet(configurationSimpleFacet, catalogueConfiguration);
}
return catalogueConfiguration;
}
}

View File

@ -0,0 +1,35 @@
package org.gcube.gcat.configuration.isproxies;
import java.util.HashMap;
import java.util.Map;
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
public class FacetBasedISConfigurationProxyFactory {
private static final Map<String, FacetBasedISConfigurationProxy> isConfigurationProxies;
static {
isConfigurationProxies = new HashMap<>();
}
private static FacetBasedISConfigurationProxy find(String context) {
FacetBasedISConfigurationProxy isConfigurationProxy = new FacetBasedISConfigurationProxy(context);
return isConfigurationProxy;
}
public synchronized static FacetBasedISConfigurationProxy getInstance(String context) {
FacetBasedISConfigurationProxy isConfigurationProxy = isConfigurationProxies.get(context);
if(isConfigurationProxy == null) {
isConfigurationProxy = find(context);
isConfigurationProxies.put(context, isConfigurationProxy);
}
return isConfigurationProxy;
}
public static FacetBasedISConfigurationProxy getInstance() {
String context = SecretManagerProvider.instance.get().getContext();
return getInstance(context);
}
}

View File

@ -91,24 +91,13 @@ public class GCoreISConfigurationProxy extends ISConfigurationProxy<ServiceEndpo
private final static String OLD_NAME = "CKanDataCatalogue";
protected ObjectMapper mapper;
protected ServiceEndpoint serviceEndpoint;
public GCoreISConfigurationProxy(String context) {
super(context);
this.mapper = new ObjectMapper();
}
public GCoreISConfigurationProxy(String context, ServiceCatalogueConfiguration catalogueConfiguration) {
super(context, catalogueConfiguration);
this.mapper = new ObjectMapper();
}
public ServiceCatalogueConfiguration getCatalogueConfiguration() throws WebApplicationException {
if (catalogueConfiguration == null) {
catalogueConfiguration = readFromIS();
}
return catalogueConfiguration;
}
protected AccessPoint getAccessPoint(Profile profile) {
Group<AccessPoint> accessPoints = profile.accessPoints();
Iterator<AccessPoint> accessPointIterator = accessPoints.iterator();
@ -169,13 +158,15 @@ public class GCoreISConfigurationProxy extends ISConfigurationProxy<ServiceEndpo
@Override
protected ServiceEndpoint getISResource() {
List<ServiceEndpoint> serviceEndpoints = getServiceEndpoints(GCatConstants.CONFIGURATION_CATEGORY, GCatConstants.CONFIGURATION_NAME);
if (serviceEndpoints==null || serviceEndpoints.size() == 0) {
logger.error("There is no {} having Category {} and Name {} in this context.",
ServiceEndpoint.class.getSimpleName(), GCatConstants.CONFIGURATION_CATEGORY, GCatConstants.CONFIGURATION_NAME);
return null;
if(serviceEndpoint==null) {
List<ServiceEndpoint> serviceEndpoints = getServiceEndpoints(GCatConstants.CONFIGURATION_CATEGORY, GCatConstants.CONFIGURATION_NAME);
if (serviceEndpoints==null || serviceEndpoints.size() == 0) {
logger.error("There is no {} having Category {} and Name {} in this context.",
ServiceEndpoint.class.getSimpleName(), GCatConstants.CONFIGURATION_CATEGORY, GCatConstants.CONFIGURATION_NAME);
return null;
}
serviceEndpoint = serviceEndpoints.get(0);
}
ServiceEndpoint serviceEndpoint = serviceEndpoints.get(0);
return serviceEndpoint;
}
@ -671,8 +662,9 @@ public class GCoreISConfigurationProxy extends ISConfigurationProxy<ServiceEndpo
}
@Override
protected ServiceCatalogueConfiguration updateOnIS(ServiceEndpoint serviceEndpoint) throws Exception {
protected ServiceCatalogueConfiguration updateOnIS() throws Exception {
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
ServiceEndpoint serviceEndpoint = getISResource();
String id = serviceEndpoint.id();
catalogueConfiguration.setID(id);
serviceEndpoint = createServiceEndpoint(serviceEndpoint);

View File

@ -0,0 +1,35 @@
package org.gcube.gcat.configuration.isproxies;
import java.util.HashMap;
import java.util.Map;
import org.gcube.common.authorization.utils.manager.SecretManagerProvider;
public class GCoreISConfigurationProxyFactory {
private static final Map<String, GCoreISConfigurationProxy> isConfigurationProxies;
static {
isConfigurationProxies = new HashMap<>();
}
private static GCoreISConfigurationProxy find(String context) {
GCoreISConfigurationProxy isConfigurationProxy = new GCoreISConfigurationProxy(context);
return isConfigurationProxy;
}
public synchronized static GCoreISConfigurationProxy getInstance(String context) {
GCoreISConfigurationProxy isConfigurationProxy = isConfigurationProxies.get(context);
if(isConfigurationProxy == null) {
isConfigurationProxy = find(context);
isConfigurationProxies.put(context, isConfigurationProxy);
}
return isConfigurationProxy;
}
public static GCoreISConfigurationProxy getInstance() {
String context = SecretManagerProvider.instance.get().getContext();
return getInstance(context);
}
}

View File

@ -31,12 +31,16 @@ public abstract class ISConfigurationProxy<ISResource extends Object> {
}
return catalogueConfiguration;
}
public void setCatalogueConfiguration(ServiceCatalogueConfiguration catalogueConfiguration) {
this.catalogueConfiguration = catalogueConfiguration;
}
public ServiceCatalogueConfiguration createOrUpdateOnIS() throws Exception {
ISResource isResource = getISResource();
if(isResource!=null) {
// It's an update
catalogueConfiguration = updateOnIS(isResource);
catalogueConfiguration = updateOnIS();
}else {
// It's a create
catalogueConfiguration = createOnIS();
@ -51,7 +55,7 @@ public abstract class ISConfigurationProxy<ISResource extends Object> {
Version version = new Version(applicationConfiguration.version());
return version;
}catch (Exception e) {
return new Version("2.2.0");
return new Version("2.4.2");
}
}
@ -61,7 +65,7 @@ public abstract class ISConfigurationProxy<ISResource extends Object> {
protected abstract ServiceCatalogueConfiguration readFromIS();
protected abstract ServiceCatalogueConfiguration updateOnIS(ISResource isResource) throws Exception;
protected abstract ServiceCatalogueConfiguration updateOnIS() throws Exception;
public abstract void delete();

View File

@ -0,0 +1,86 @@
package org.gcube.gcat.configuration.service;
import javax.ws.rs.InternalServerErrorException;
import org.gcube.com.fasterxml.jackson.annotation.JsonGetter;
import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore;
import org.gcube.com.fasterxml.jackson.annotation.JsonProperty;
import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class FacetBasedISServiceCatalogueConfiguration extends ServiceCatalogueConfiguration {
private static Logger logger = LoggerFactory.getLogger(FacetBasedISServiceCatalogueConfiguration.class);
protected final FacetBasedISConfigurationProxy facetBasedISConfigurationProxy;
public FacetBasedISServiceCatalogueConfiguration(String context, FacetBasedISConfigurationProxy facetBasedISConfigurationProxy) {
super(context);
this.facetBasedISConfigurationProxy = facetBasedISConfigurationProxy;
}
@JsonProperty(value = CKAN_URL_KEY)
public String getCkanURL() {
if(ckanURL==null) {
try {
facetBasedISConfigurationProxy.setCkanServiceInfo(this);
} catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
return ckanURL;
}
@JsonIgnore
public String getSysAdminToken() {
if(sysAdminToken==null) {
try {
facetBasedISConfigurationProxy.setCkanServiceInfo(this);
} catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
return sysAdminToken;
}
@JsonGetter(value=SYS_ADMIN_TOKEN_KEY)
public String getEncryptedSysAdminToken() {
if(encryptedSysAdminToken==null) {
try {
facetBasedISConfigurationProxy.setCkanServiceInfo(this);
} catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
return encryptedSysAdminToken;
}
@JsonGetter(value = CKAN_DB_KEY)
public ServiceCKANDB getCkanDB() {
if(ckanDB==null) {
try {
facetBasedISConfigurationProxy.setCkanDBInfo(this);
} catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
return (ServiceCKANDB) ckanDB;
}
@JsonProperty(value = SOLR_URL_KEY)
public String getSolrURL() {
if(solrURL==null) {
try {
facetBasedISConfigurationProxy.setSolrServiceInfo(this);
} catch (Exception e) {
throw new InternalServerErrorException(e);
}
}
return solrURL;
}
}

View File

@ -14,6 +14,7 @@ import org.gcube.gcat.api.configuration.CKANDB;
*/
public class ServiceCKANDB extends CKANDB {
public static final String USERNAME_KEY = "username";
public static final String PASSWORD_KEY = "password";
protected String encryptedPassword;

View File

@ -43,7 +43,7 @@ public class ServiceCatalogueConfiguration extends CatalogueConfiguration {
@JsonIgnore
public String getPlainSysAdminToken() {
return sysAdminToken;
return getSysAdminToken();
}
@JsonGetter(value=SYS_ADMIN_TOKEN_KEY)

View File

@ -0,0 +1,41 @@
{
"@class" : "QueryTemplate",
"name" : "GCat-Get-CallsFor-to-VirtualService",
"description" : "The following query return all CallsFor relation from the EService of gcat identified by the UUID provided as parameter to the Virtual Service with name 'catalogue-virtual-service'. The content of the request to run this query template will be something like {\"$uuid\": \"335580b6-c164-4506-980a-21e5bcf8dbcf\"}",
"template" : {
"@class" : "CallsFor",
"source" : {
"@class" : "EService",
"header" : {
"uuid" : "$uuid"
},
"consistsOf" : [ {
"@class" : "IsIdentifiedBy",
"target" : {
"@class" : "SoftwareFacet",
"group" : "org.gcube.data-catalogue",
"name" : "gcat"
}
} ]
},
"target" : {
"@class" : "VirtualService",
"consistsOf" : [ {
"@class" : "IsIdentifiedBy",
"target" : {
"@class" : "SoftwareFacet",
"group" : "org.gcube.data-catalogue",
"name" : "catalogue-virtual-service"
}
} ]
}
},
"templateVariables" : {
"$uuid" : {
"@class": "TemplateVariable",
"name": "$uuid",
"description": "The uuid of the gCat EService, e.g. 335580b6-c164-4506-980a-21e5bcf8dbcf. Please note that the default value has no meaning but we need a valid value so that the query can be tested by the resource-registry service.",
"defaultValue": "335580b6-c164-4506-980a-21e5bcf8dbcf"
}
}
}

View File

@ -0,0 +1,30 @@
Configuration
----------------------
IsCustomizedBy | |
-----------------> | gcat-configuration |
/ | |
/ ----------------------
EService VirtualService /
------------ -----------------------------
| | CallsFor | |
| gcat | ------------> | catalogue-virtual-service |
| | | |
------------ -----------------------------
\ EService
\ --------------------
\ Uses | |
\ ------------------> | postgres-ckan-db |
\ / | |
\ EService / --------------------
\ -----------------
\ CallsFor | |
-------------> | ckan |
| |
----------------- EService
\ --------------------
\ Uses | |
------------------> | solr |
| |
--------------------

View File

@ -0,0 +1,23 @@
package org.gcube.gcat.configuration;
import org.gcube.gcat.ContextTest;
import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class CatalogueConfigurationFactoryTest extends ContextTest {
private static Logger logger = LoggerFactory.getLogger(CatalogueConfigurationFactoryTest.class);
@Test
public void testConf() throws Exception {
ServiceCatalogueConfiguration serviceCatalogueConfiguration = CatalogueConfigurationFactory.getInstance();
logger.debug("{}", serviceCatalogueConfiguration.toJsonString());
logger.debug("{}", serviceCatalogueConfiguration.toJsonString(true));
}
}

View File

@ -0,0 +1,43 @@
package org.gcube.gcat.configuration.isproxies;
import java.util.List;
import org.gcube.gcat.ContextTest;
import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.resourcemanagement.model.reference.entities.facets.SimpleFacet;
import org.gcube.resourcemanagement.model.reference.entities.resources.EService;
import org.gcube.resourcemanagement.model.reference.entities.resources.VirtualService;
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.CallsFor;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class FacetBasedISConfigurationProxyTest extends ContextTest {
private static Logger logger = LoggerFactory.getLogger(FacetBasedISConfigurationProxyTest.class);
@Ignore
@Test
public void test() throws Exception {
FacetBasedISConfigurationProxy fbiscp = FacetBasedISConfigurationProxyFactory.getInstance();
fbiscp.setGcatEServiceID("f00bbacd-92b8-46d7-b41c-828f71a78753");
CallsFor<EService, VirtualService> callsFor = fbiscp.createCallsForToVirtualService();
logger.debug("Created {}", ElementMapper.marshal(callsFor));
SimpleFacet simpleFacet = fbiscp.getISResource();
logger.debug("{}", ElementMapper.marshal(simpleFacet));
ServiceCatalogueConfiguration catalogueConfiguration = fbiscp.getCatalogueConfiguration();
logger.debug("{}", catalogueConfiguration.toJsonString());
logger.debug("{}", catalogueConfiguration.toJsonString(true));
List<CallsFor<EService, VirtualService>> callsForList = fbiscp.deleteCallsForToVirtualService();
logger.debug("Deleted {} {} relations {}", callsForList.size(), CallsFor.NAME, ElementMapper.marshal(callsForList));
}
}

View File

@ -75,7 +75,8 @@ public class GCoreISConfigurationProxyTest extends ContextTest {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(DEVVRE_CONFIG_JSON);
String json = new BufferedReader(new InputStreamReader(inputStream)).lines().collect(Collectors.joining("\n"));
ServiceCatalogueConfiguration catalogueConfiguration = ServiceCatalogueConfiguration.getServiceCatalogueConfiguration(json);
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context, catalogueConfiguration);
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context);
gCoreISConfigurationProxy.setCatalogueConfiguration(catalogueConfiguration);
gCoreISConfigurationProxy.createOnIS();
}

View File

@ -6,3 +6,4 @@
/config.properties.old
/config.properties-new-authz
/devvre.conf.json
/config.ini