Reorganizing code

This commit is contained in:
Luca Frosini 2022-12-06 18:29:31 +01:00
parent f8c9033f3c
commit 0fd2f53a5d
6 changed files with 201 additions and 51 deletions

View File

@ -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);
}
}

View File

@ -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();
}

View File

@ -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<SimpleF
objectMapper = new ObjectMapper();
resourceRegistryClient = ResourceRegistryClientFactory.create();
resourceRegistryPublisher = ResourceRegistryPublisherFactory.create();
}
public FacetBasedISConfigurationProxy(String context, ServiceCatalogueConfiguration catalogueConfiguration) {
super(context, catalogueConfiguration);
objectMapper = new ObjectMapper();
resourceRegistryClient = ResourceRegistryClientFactory.create();
resourceRegistryPublisher = ResourceRegistryPublisherFactory.create();
// public FacetBasedISConfigurationProxy(String context, ServiceCatalogueConfiguration catalogueConfiguration) {
// super(context, catalogueConfiguration);
// objectMapper = new ObjectMapper();
// resourceRegistryClient = ResourceRegistryClientFactory.create();
// resourceRegistryPublisher = ResourceRegistryPublisherFactory.create();
// }
public VirtualService getVirtualService() {
if(virtualService==null) {
virtualService = queryVirtualService();
}
return virtualService;
}
public File getJsonQueryFromFile(String filename) throws Exception {
@ -175,9 +182,13 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
return getUniqueEntity(entities, jsonQueryAsString);
}
protected VirtualService queryVirtualService() throws Exception {
VirtualService virtualService = (VirtualService) queryEntity(GET_CATALOGUE_VIRTUAL_SERVICE_FILENAME);
return virtualService;
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 Configuration queryGcatConfiguration() throws Exception {
@ -205,12 +216,12 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
return accessPointFacet;
}
protected ServiceCatalogueConfiguration setGcatConfiguration(ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
SimpleFacet configurationSimpleFacet = getISResource();
UUID uuid = configurationSimpleFacet.getHeader().getUUID();
if(uuid!=null) {
catalogueConfiguration.setID(uuid.toString());
protected ServiceCatalogueConfiguration setConfigurationInfoFromSimpleFacet(SimpleFacet configurationSimpleFacet, ServiceCatalogueConfiguration catalogueConfiguration) throws Exception {
Header header = configurationSimpleFacet.getHeader();
if(header!=null && header.getUUID()!=null) {
catalogueConfiguration.setID(header.getUUID().toString());
}
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));
@ -244,7 +255,7 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
}
if(forceUpdate) {
updateOnIS(configurationSimpleFacet);
updateOnIS();
}
return catalogueConfiguration;
@ -280,14 +291,34 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
return catalogueConfiguration;
}
protected SimpleFacet instatiateSimpleFacetUsingDefaultValues(ServiceCatalogueConfiguration 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;
}
@ -295,13 +326,13 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
protected ServiceCatalogueConfiguration readFromIS() {
try {
catalogueConfiguration = new FacetBasedISServiceCatalogueConfiguration(context, this);
virtualService = queryVirtualService();
configurationSimpleFacet = getISResource();
if(configurationSimpleFacet==null) {
configurationSimpleFacet = instatiateSimpleFacetUsingDefaultValues(catalogueConfiguration);
configurationSimpleFacet = getSimpleFacetFromConfiguration(catalogueConfiguration);
}else {
catalogueConfiguration = setGcatConfiguration(catalogueConfiguration);
catalogueConfiguration = setConfigurationInfoFromSimpleFacet(configurationSimpleFacet, catalogueConfiguration);
}
catalogueConfiguration = setCkanServiceInfo(catalogueConfiguration);
@ -337,7 +368,7 @@ public class FacetBasedISConfigurationProxy extends ISConfigurationProxy<SimpleF
ConsistsOf<Configuration, SimpleFacet> 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<SimpleF
}
@Override
protected ServiceCatalogueConfiguration updateOnIS(SimpleFacet configurationSimpleFacet) throws Exception {
UUID uuid = configurationSimpleFacet.getHeader().getUUID();
if(uuid!=null) {
this.configurationSimpleFacet = resourceRegistryPublisher.update(configurationSimpleFacet);
setGcatConfiguration(catalogueConfiguration);
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

@ -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

@ -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,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<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);
}
}