2022-11-29 14:42:20 +01:00
package org.gcube.gcat.configuration.isproxies ;
2022-12-06 14:05:43 +01:00
import java.io.File ;
2022-12-07 17:21:14 +01:00
import java.io.FileReader ;
2022-12-06 14:05:43 +01:00
import java.net.URL ;
2022-12-01 17:26:46 +01:00
import java.util.Collection ;
import java.util.HashMap ;
import java.util.HashSet ;
import java.util.List ;
import java.util.Map ;
import java.util.Set ;
2022-12-06 14:05:43 +01:00
import java.util.UUID ;
2022-12-01 17:26:46 +01:00
import javax.ws.rs.InternalServerErrorException ;
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException ;
2022-12-06 14:05:43 +01:00
import org.gcube.com.fasterxml.jackson.databind.JsonNode ;
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper ;
2022-12-07 17:21:14 +01:00
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode ;
2022-12-01 17:26:46 +01:00
import org.gcube.gcat.api.configuration.CatalogueConfiguration ;
2022-12-06 14:59:51 +01:00
import org.gcube.gcat.configuration.service.FacetBasedISServiceCatalogueConfiguration ;
2022-12-06 14:05:43 +01:00
import org.gcube.gcat.configuration.service.ServiceCKANDB ;
2022-11-29 14:42:20 +01:00
import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration ;
2022-12-07 17:21:14 +01:00
import org.gcube.informationsystem.model.impl.properties.HeaderImpl ;
import org.gcube.informationsystem.model.impl.properties.PropagationConstraintImpl ;
2022-12-06 14:05:43 +01:00
import org.gcube.informationsystem.model.impl.relations.ConsistsOfImpl ;
import org.gcube.informationsystem.model.reference.entities.Entity ;
import org.gcube.informationsystem.model.reference.properties.Encrypted ;
2022-12-06 18:29:31 +01:00
import org.gcube.informationsystem.model.reference.properties.Header ;
2022-12-07 17:21:14 +01:00
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint ;
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint ;
2023-02-02 21:19:42 +01:00
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.DeleteConstraint ;
2022-12-07 17:21:14 +01:00
import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint ;
2022-12-01 17:26:46 +01:00
import org.gcube.informationsystem.model.reference.relations.ConsistsOf ;
2022-12-07 17:21:14 +01:00
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 ;
2022-12-01 17:26:46 +01:00
import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClient ;
import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClientFactory ;
2022-12-06 14:05:43 +01:00
import org.gcube.informationsystem.resourceregistry.publisher.ResourceRegistryPublisher ;
import org.gcube.informationsystem.resourceregistry.publisher.ResourceRegistryPublisherFactory ;
2022-12-07 17:21:14 +01:00
import org.gcube.informationsystem.resourceregistry.queries.templates.ResourceRegistryQueryTemplateClient ;
import org.gcube.informationsystem.resourceregistry.queries.templates.ResourceRegistryQueryTemplateClientFactory ;
2022-12-01 17:26:46 +01:00
import org.gcube.informationsystem.utils.ElementMapper ;
2022-12-06 14:05:43 +01:00
import org.gcube.resourcemanagement.model.impl.entities.facets.SimpleFacetImpl ;
2022-12-07 17:21:14 +01:00
import org.gcube.resourcemanagement.model.impl.entities.resources.EServiceImpl ;
import org.gcube.resourcemanagement.model.impl.relations.isrelatedto.CallsForImpl ;
2022-12-06 14:05:43 +01:00
import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet ;
2022-12-01 17:26:46 +01:00
import org.gcube.resourcemanagement.model.reference.entities.facets.SimpleFacet ;
2022-11-29 14:42:20 +01:00
import org.gcube.resourcemanagement.model.reference.entities.resources.Configuration ;
2022-12-07 17:21:14 +01:00
import org.gcube.resourcemanagement.model.reference.entities.resources.EService ;
2022-12-01 17:26:46 +01:00
import org.gcube.resourcemanagement.model.reference.entities.resources.VirtualService ;
2022-12-07 17:21:14 +01:00
import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.CallsFor ;
2022-12-01 17:26:46 +01:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2022-11-29 12:33:42 +01:00
/ * *
* @author Luca Frosini ( ISTI - CNR )
* /
2022-12-06 14:05:43 +01:00
public class FacetBasedISConfigurationProxy extends ISConfigurationProxy < SimpleFacet > {
2022-11-29 12:33:42 +01:00
2022-12-05 14:31:10 +01:00
private static Logger logger = LoggerFactory . getLogger ( FacetBasedISConfigurationProxy . class ) ;
2022-12-06 14:05:43 +01:00
2022-12-07 17:21:14 +01:00
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 " ;
2022-12-06 14:05:43 +01:00
2022-12-07 17:21:14 +01:00
public static final String QUERY_DIRECTORY_NAME = " query " ;
2022-12-06 14:05:43 +01:00
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 " ;
2022-12-07 17:21:14 +01:00
private static String queryTemplateName ;
static {
2022-12-13 12:34:23 +01:00
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 ) ;
2022-12-07 17:21:14 +01:00
}
2022-12-06 14:05:43 +01:00
//
// 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 ;
*
* /
2022-12-01 17:26:46 +01:00
2022-12-06 14:05:43 +01:00
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 )
* /
2022-12-01 17:26:46 +01:00
protected VirtualService virtualService ;
2022-12-07 17:21:14 +01:00
2022-12-01 17:26:46 +01:00
protected SimpleFacet configurationSimpleFacet ;
2022-12-07 22:59:21 +01:00
protected String gcatEServiceID ;
2022-12-05 14:31:10 +01:00
public FacetBasedISConfigurationProxy ( String context ) {
2022-11-29 12:33:42 +01:00
super ( context ) ;
2022-12-06 14:05:43 +01:00
objectMapper = new ObjectMapper ( ) ;
resourceRegistryClient = ResourceRegistryClientFactory . create ( ) ;
resourceRegistryPublisher = ResourceRegistryPublisherFactory . create ( ) ;
2022-11-29 12:33:42 +01:00
}
2022-12-06 18:29:31 +01:00
public VirtualService getVirtualService ( ) {
if ( virtualService = = null ) {
virtualService = queryVirtualService ( ) ;
}
return virtualService ;
2022-12-06 14:05:43 +01:00
}
2022-12-07 22:59:21 +01:00
public void setGcatEServiceID ( String gcatEServiceID ) {
this . gcatEServiceID = gcatEServiceID ;
}
2022-12-06 14:05:43 +01:00
2022-12-07 17:21:14 +01:00
public List < CallsFor < EService , VirtualService > > getCallsForToVirtualService ( ) throws Exception {
ResourceRegistryQueryTemplateClient rrqtc = ResourceRegistryQueryTemplateClientFactory . create ( ) ;
ObjectNode objectNode = objectMapper . createObjectNode ( ) ;
objectNode . put ( GCAT_ESERVICE_UUID_VARNAME , gcatEServiceID ) ;
List < CallsFor < EService , VirtualService > > callsForList = rrqtc . run ( queryTemplateName , objectNode ) ;
return callsForList ;
}
2022-12-07 23:21:02 +01:00
public List < CallsFor < EService , VirtualService > > deleteCallsForToVirtualService ( List < CallsFor < EService , VirtualService > > callsForList ) throws SchemaViolationException , NotFoundException , ResourceRegistryException {
2022-12-07 17:21:14 +01:00
for ( CallsFor < EService , VirtualService > cf : callsForList ) {
resourceRegistryPublisher . delete ( cf ) ;
}
2022-12-07 23:21:02 +01:00
return callsForList ;
2022-12-07 17:21:14 +01:00
}
2022-12-07 23:21:02 +01:00
public List < CallsFor < EService , VirtualService > > deleteCallsForToVirtualService ( ) throws Exception {
2022-12-07 17:21:14 +01:00
List < CallsFor < EService , VirtualService > > callsForList = getCallsForToVirtualService ( ) ;
2022-12-07 23:21:02 +01:00
return deleteCallsForToVirtualService ( callsForList ) ;
2022-12-07 17:21:14 +01:00
}
public CallsFor < EService , VirtualService > createCallsForToVirtualService ( ) throws Exception {
List < CallsFor < EService , VirtualService > > callsForList = getCallsForToVirtualService ( ) ;
CallsFor < EService , VirtualService > callsFor = null ;
int size = callsForList . size ( ) ;
2022-12-07 23:21:02 +01:00
UUID gcatEServiceUUID = UUID . fromString ( gcatEServiceID ) ;
2022-12-07 17:21:14 +01:00
if ( size > 1 ) {
2022-12-07 23:21:02 +01:00
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 ) ) ;
2022-12-07 17:21:14 +01:00
deleteCallsForToVirtualService ( callsForList ) ;
size = 0 ;
}
if ( size = = 0 ) {
2022-12-15 11:35:58 +01:00
logger . info ( " Going to create {} between {} (gcat with UUID={}) and the {} " ,
CallsFor . NAME , EService . NAME , gcatEServiceID , VirtualService . NAME ) ;
2022-12-07 17:21:14 +01:00
PropagationConstraint propagationConstraint = new PropagationConstraintImpl ( ) ;
propagationConstraint . setAddConstraint ( AddConstraint . unpropagate ) ;
propagationConstraint . setRemoveConstraint ( RemoveConstraint . keep ) ;
2023-02-02 21:19:42 +01:00
propagationConstraint . setDeleteConstraint ( DeleteConstraint . keep ) ;
2022-12-07 17:21:14 +01:00
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 ) ;
2022-12-15 11:35:58 +01:00
logger . info ( " {} between {} (gcat with UUID={}) and the {} exists. \ n{} " ,
CallsFor . NAME , EService . NAME , gcatEServiceID , VirtualService . NAME , ElementMapper . marshal ( callsFor ) ) ;
2022-12-07 17:21:14 +01:00
}
return callsFor ;
}
protected List < Entity > queryListOfEntities ( String query ) throws Exception {
2022-12-06 14:05:43 +01:00
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 ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
protected JsonNode getQuery ( File jsonQueryFile ) throws Exception {
JsonNode query = objectMapper . readTree ( jsonQueryFile ) ;
return query ;
}
2022-12-01 17:26:46 +01:00
2022-12-06 14:05:43 +01:00
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 ) ;
2022-12-01 17:26:46 +01:00
logger . error ( message ) ;
throw new InternalServerErrorException ( message ) ;
}
if ( size > 1 ) {
String message = String . format (
2022-12-06 14:05:43 +01:00
" 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 ) ) ;
2022-12-01 17:26:46 +01:00
logger . error ( message ) ;
throw new InternalServerErrorException ( message ) ;
}
2022-12-06 14:05:43 +01:00
return entities . get ( 0 ) ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
protected Entity queryEntity ( String filename ) throws Exception {
File jsonQueryFile = getJsonQueryFromFile ( filename ) ;
JsonNode query = getQuery ( jsonQueryFile ) ;
String jsonQueryAsString = objectMapper . writeValueAsString ( query ) ;
2022-12-07 17:21:14 +01:00
List < Entity > entities = queryListOfEntities ( jsonQueryAsString ) ;
2022-12-06 14:05:43 +01:00
return getUniqueEntity ( entities , jsonQueryAsString ) ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 18:29:31 +01:00
protected VirtualService queryVirtualService ( ) throws InternalServerErrorException {
try {
VirtualService virtualService = ( VirtualService ) queryEntity ( GET_CATALOGUE_VIRTUAL_SERVICE_FILENAME ) ;
return virtualService ;
} catch ( Exception e ) {
throw new InternalServerErrorException ( e ) ;
}
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
protected Configuration queryGcatConfiguration ( ) throws Exception {
Configuration configuration = ( Configuration ) queryEntity ( GET_GCAT_CONFIGURATION_FILENAME ) ;
return configuration ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
protected SimpleFacet queryConfigurationSimpleFacet ( ) throws Exception {
SimpleFacet configurationSimpleFacet = ( SimpleFacet ) queryEntity ( GET_SIMPLE_FACET_OF_GCAT_CONFIGURATION_FILENAME ) ;
return configurationSimpleFacet ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
protected AccessPointFacet queryCkanServiceAccessPointFacet ( ) throws Exception {
AccessPointFacet accessPointFacet = ( AccessPointFacet ) queryEntity ( GET_ACCESS_POINT_FACET_OF_CKAN_SERVICE_FILENAME ) ;
return accessPointFacet ;
2022-12-01 17:26:46 +01:00
}
2022-12-06 14:05:43 +01:00
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 ;
}
2022-12-06 18:29:31 +01:00
protected ServiceCatalogueConfiguration setConfigurationInfoFromSimpleFacet ( SimpleFacet configurationSimpleFacet , ServiceCatalogueConfiguration catalogueConfiguration ) throws Exception {
Header header = configurationSimpleFacet . getHeader ( ) ;
if ( header ! = null & & header . getUUID ( ) ! = null ) {
catalogueConfiguration . setID ( header . getUUID ( ) . toString ( ) ) ;
2022-12-06 14:05:43 +01:00
}
2022-12-06 18:29:31 +01:00
2022-12-06 14:05:43 +01:00
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 ) ) ;
2022-12-01 17:26:46 +01:00
2022-12-06 14:05:43 +01:00
catalogueConfiguration . setDefaultOrganization ( ( String ) configurationSimpleFacet . getAdditionalProperty ( CatalogueConfiguration . DEFAULT_ORGANIZATION_KEY ) ) ;
2022-12-01 17:26:46 +01:00
Object supportedOrganizationsObj = configurationSimpleFacet . getAdditionalProperty ( CatalogueConfiguration . SUPPORTED_ORGANIZATIONS_KEY ) ;
2022-12-06 14:59:51 +01:00
boolean forceUpdate = false ;
if ( supportedOrganizationsObj ! = null & & supportedOrganizationsObj instanceof Collection ) {
2022-12-07 17:21:14 +01:00
@SuppressWarnings ( " unchecked " )
Set < String > supportedOrganizations = new HashSet < String > ( ( Collection < String > ) supportedOrganizationsObj ) ;
catalogueConfiguration . setSupportedOrganizations ( supportedOrganizations ) ;
2022-12-06 14:59:51 +01:00
} else {
2022-12-07 17:21:14 +01:00
Set < String > supportedOrganizations = new HashSet < > ( ) ;
2022-12-06 14:59:51 +01:00
supportedOrganizations . add ( catalogueConfiguration . getDefaultOrganization ( ) ) ;
configurationSimpleFacet . setAdditionalProperty ( CatalogueConfiguration . SUPPORTED_ORGANIZATIONS_KEY , supportedOrganizations ) ;
forceUpdate = true ;
2022-12-07 17:21:14 +01:00
catalogueConfiguration . setSupportedOrganizations ( supportedOrganizations ) ;
2022-12-01 17:26:46 +01:00
}
Map < String , Object > additionalProperties = new HashMap < > ( configurationSimpleFacet . getAdditionalProperties ( ) ) ;
for ( String key : additionalProperties . keySet ( ) ) {
if ( ! CatalogueConfiguration . KNOWN_PROPERTIES . contains ( key ) ) {
2022-12-06 14:59:51 +01:00
if ( key . startsWith ( " @ " ) ) {
continue ;
}
Object value = additionalProperties . get ( key ) ;
catalogueConfiguration . setAdditionalProperty ( key , value ) ;
2022-12-01 17:26:46 +01:00
}
}
2022-12-06 14:59:51 +01:00
if ( forceUpdate ) {
2022-12-06 18:29:31 +01:00
updateOnIS ( ) ;
2022-12-06 14:59:51 +01:00
}
2022-12-06 14:05:43 +01:00
return catalogueConfiguration ;
}
public ServiceCatalogueConfiguration setCkanServiceInfo ( ServiceCatalogueConfiguration catalogueConfiguration ) throws Exception {
AccessPointFacet ckanServiceAccessPointFacet = queryCkanServiceAccessPointFacet ( ) ;
catalogueConfiguration . setCkanURL ( ckanServiceAccessPointFacet . getEndpoint ( ) . toString ( ) ) ;
2022-12-06 14:59:51 +01:00
Encrypted encrypted = ( Encrypted ) ckanServiceAccessPointFacet . getAdditionalProperty ( CatalogueConfiguration . SYS_ADMIN_TOKEN_KEY ) ;
2022-12-06 14:05:43 +01:00
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 ) ;
2022-12-06 14:59:51 +01:00
Encrypted encrypted = ( Encrypted ) postgresCkanDBAccessPointFacet . getAdditionalProperty ( ServiceCKANDB . PASSWORD_KEY ) ;
2022-12-06 14:05:43 +01:00
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 ;
}
2022-12-06 18:29:31 +01:00
protected SimpleFacet getSimpleFacetFromConfiguration ( ServiceCatalogueConfiguration catalogueConfiguration ) {
2022-12-06 14:05:43 +01:00
SimpleFacet simpleFacet = new SimpleFacetImpl ( ) ;
2022-12-06 18:29:31 +01:00
if ( catalogueConfiguration . getID ( ) ! = null ) {
UUID uuid = null ;
try {
uuid = UUID . fromString ( catalogueConfiguration . getID ( ) ) ;
simpleFacet . getHeader ( ) . setUUID ( uuid ) ;
} catch ( Exception e ) {
}
}
2022-12-06 14:05:43 +01:00
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 ( ) ) ;
2022-12-06 18:29:31 +01:00
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 ) ;
}
}
2022-12-06 14:05:43 +01:00
return simpleFacet ;
2022-12-01 17:26:46 +01:00
}
2022-11-29 12:33:42 +01:00
@Override
protected ServiceCatalogueConfiguration readFromIS ( ) {
2022-12-01 17:26:46 +01:00
try {
2022-12-06 14:59:51 +01:00
catalogueConfiguration = new FacetBasedISServiceCatalogueConfiguration ( context , this ) ;
2022-12-01 17:26:46 +01:00
2022-12-06 14:05:43 +01:00
configurationSimpleFacet = getISResource ( ) ;
2022-12-06 18:29:31 +01:00
2022-12-06 14:05:43 +01:00
if ( configurationSimpleFacet = = null ) {
2022-12-06 18:29:31 +01:00
configurationSimpleFacet = getSimpleFacetFromConfiguration ( catalogueConfiguration ) ;
2022-12-06 14:05:43 +01:00
} else {
2022-12-06 18:29:31 +01:00
catalogueConfiguration = setConfigurationInfoFromSimpleFacet ( configurationSimpleFacet , catalogueConfiguration ) ;
2022-12-06 14:05:43 +01:00
}
2022-12-01 17:26:46 +01:00
2022-12-06 14:05:43 +01:00
catalogueConfiguration = setCkanServiceInfo ( catalogueConfiguration ) ;
catalogueConfiguration = setCkanDBInfo ( catalogueConfiguration ) ;
catalogueConfiguration = setSolrServiceInfo ( catalogueConfiguration ) ;
2022-12-01 17:26:46 +01:00
} catch ( InternalServerErrorException e ) {
throw e ;
} catch ( Exception e ) {
throw new InternalServerErrorException ( e ) ;
}
return catalogueConfiguration ;
2022-11-29 12:33:42 +01:00
}
@Override
2022-11-29 15:03:35 +01:00
public void delete ( ) {
2022-12-06 14:05:43 +01:00
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 ) ;
}
}
2022-11-29 12:33:42 +01:00
}
@Override
protected ServiceCatalogueConfiguration createOnIS ( ) throws Exception {
2022-12-06 14:05:43 +01:00
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 ( ) ;
2022-12-06 18:29:31 +01:00
setConfigurationInfoFromSimpleFacet ( configurationSimpleFacet , catalogueConfiguration ) ;
2022-12-06 14:05:43 +01:00
}
return catalogueConfiguration ;
2022-11-29 12:33:42 +01:00
}
@Override
2022-12-06 14:05:43 +01:00
protected SimpleFacet getISResource ( ) {
if ( configurationSimpleFacet = = null ) {
try {
configurationSimpleFacet = queryConfigurationSimpleFacet ( ) ;
} catch ( Exception e ) {
return null ;
}
}
return configurationSimpleFacet ;
2022-11-29 12:33:42 +01:00
}
@Override
2022-12-06 18:29:31 +01:00
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 ) ;
2022-12-06 14:05:43 +01:00
}
return catalogueConfiguration ;
2022-11-29 12:33:42 +01:00
}
2022-12-06 18:29:31 +01:00
2022-11-29 12:33:42 +01:00
}