From 0fd2f53a5dfde2f16ca9c65be3ac7941a4d522aa Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 6 Dec 2022 18:29:31 +0100 Subject: [PATCH] Reorganizing code --- .../org/gcube/gcat/GCatInitializator.java | 83 +++++++++++++++++++ .../CatalogueConfigurationFactory.java | 11 ++- .../FacetBasedISConfigurationProxy.java | 83 +++++++++++++------ .../isproxies/GCoreISConfigurationProxy.java | 30 +++---- .../isproxies/ISConfigurationProxy.java | 10 ++- .../ISConfigurationProxyFactory.java | 35 ++++++++ 6 files changed, 201 insertions(+), 51 deletions(-) create mode 100644 src/main/java/org/gcube/gcat/GCatInitializator.java create mode 100644 src/main/java/org/gcube/gcat/configuration/isproxies/ISConfigurationProxyFactory.java diff --git a/src/main/java/org/gcube/gcat/GCatInitializator.java b/src/main/java/org/gcube/gcat/GCatInitializator.java new file mode 100644 index 0000000..df99e89 --- /dev/null +++ b/src/main/java/org/gcube/gcat/GCatInitializator.java @@ -0,0 +1,83 @@ +package org.gcube.gcat; + +import java.io.IOException; + +import org.gcube.common.authorization.utils.manager.SecretManagerProvider; +import org.gcube.gcat.rest.RequestFilter; +import org.gcube.smartgears.ApplicationManager; +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); + + + 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); + + logger.trace( + "\n-------------------------------------------------------\n" + + "GCat Stopped Successfully on context {}\n" + + "-------------------------------------------------------", + context); + } +} diff --git a/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java b/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java index cc57ed9..5aa2cdc 100644 --- a/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java +++ b/src/main/java/org/gcube/gcat/configuration/CatalogueConfigurationFactory.java @@ -5,6 +5,7 @@ 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.ISConfigurationProxyFactory; import org.gcube.gcat.configuration.isproxies.FacetBasedISConfigurationProxy; import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration; import org.gcube.gcat.persistence.ckan.CKANUserCache; @@ -21,7 +22,7 @@ public class CatalogueConfigurationFactory { } private static ServiceCatalogueConfiguration load(String context) { - FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context); + FacetBasedISConfigurationProxy restISConfigurationProxy = ISConfigurationProxyFactory.getInstance(context); ServiceCatalogueConfiguration serviceCatalogueConfiguration = restISConfigurationProxy.getCatalogueConfiguration(); if(serviceCatalogueConfiguration == null) { GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context); @@ -31,16 +32,18 @@ public class CatalogueConfigurationFactory { } private static void purgeFromIS(String context) { - FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context); + FacetBasedISConfigurationProxy restISConfigurationProxy = ISConfigurationProxyFactory.getInstance(context); restISConfigurationProxy.delete(); GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context); gCoreISConfigurationProxy.delete(); } private static void createOrUpdateOnIS(String context, ServiceCatalogueConfiguration catalogueConfiguration) throws Exception { - FacetBasedISConfigurationProxy restISConfigurationProxy = new FacetBasedISConfigurationProxy(context,catalogueConfiguration); + FacetBasedISConfigurationProxy restISConfigurationProxy = ISConfigurationProxyFactory.getInstance(context); + restISConfigurationProxy.setCatalogueConfiguration(catalogueConfiguration); restISConfigurationProxy.createOrUpdateOnIS(); - GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context, catalogueConfiguration); + GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context); + gCoreISConfigurationProxy.setCatalogueConfiguration(catalogueConfiguration); gCoreISConfigurationProxy.createOrUpdateOnIS(); } diff --git a/src/main/java/org/gcube/gcat/configuration/isproxies/FacetBasedISConfigurationProxy.java b/src/main/java/org/gcube/gcat/configuration/isproxies/FacetBasedISConfigurationProxy.java index f7c7a51..0659d25 100644 --- a/src/main/java/org/gcube/gcat/configuration/isproxies/FacetBasedISConfigurationProxy.java +++ b/src/main/java/org/gcube/gcat/configuration/isproxies/FacetBasedISConfigurationProxy.java @@ -22,6 +22,7 @@ import org.gcube.gcat.configuration.service.ServiceCatalogueConfiguration; 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.relations.ConsistsOf; import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClient; import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClientFactory; @@ -119,14 +120,20 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy 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; } @@ -295,13 +326,13 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy co = new ConsistsOfImpl<>(gcatConfiguration, configurationSimpleFacet); co = resourceRegistryPublisher.create(co); configurationSimpleFacet = co.getTarget(); - setGcatConfiguration(catalogueConfiguration); + setConfigurationInfoFromSimpleFacet(configurationSimpleFacet, catalogueConfiguration); } return catalogueConfiguration; } @@ -355,13 +386,15 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy accessPoints = profile.accessPoints(); Iterator accessPointIterator = accessPoints.iterator(); @@ -169,13 +158,15 @@ public class GCoreISConfigurationProxy extends ISConfigurationProxy 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 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 { } 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 { 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 { protected abstract ServiceCatalogueConfiguration readFromIS(); - protected abstract ServiceCatalogueConfiguration updateOnIS(ISResource isResource) throws Exception; + protected abstract ServiceCatalogueConfiguration updateOnIS() throws Exception; public abstract void delete(); diff --git a/src/main/java/org/gcube/gcat/configuration/isproxies/ISConfigurationProxyFactory.java b/src/main/java/org/gcube/gcat/configuration/isproxies/ISConfigurationProxyFactory.java new file mode 100644 index 0000000..ba9679e --- /dev/null +++ b/src/main/java/org/gcube/gcat/configuration/isproxies/ISConfigurationProxyFactory.java @@ -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 ISConfigurationProxyFactory { + + private static final Map 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); + } + +}