package org.gcube.gcat.configuration; import java.util.HashMap; import java.util.Map; import org.gcube.common.authorization.utils.manager.SecretManagerProvider; import org.gcube.gcat.persistence.ckan.CKANUserCache; /** * @author Luca Frosini (ISTI - CNR) */ public class CatalogueConfigurationFactory { private static final Map catalogueConfigurations; static { catalogueConfigurations = new HashMap<>(); } protected static ServiceCatalogueConfiguration load(String context) { GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context); return gCoreISConfigurationProxy.getCatalogueConfiguration(); } public synchronized static ServiceCatalogueConfiguration getInstance() { String context = SecretManagerProvider.instance.get().getContext(); ServiceCatalogueConfiguration catalogueConfiguration = catalogueConfigurations.get(context); if(catalogueConfiguration == null) { catalogueConfiguration = load(context); catalogueConfigurations.put(context, catalogueConfiguration); } return catalogueConfiguration; } public synchronized static void renew() { String context = SecretManagerProvider.instance.get().getContext(); catalogueConfigurations.remove(context); ServiceCatalogueConfiguration catalogueConfiguration = load(context); catalogueConfigurations.put(context, catalogueConfiguration); } public synchronized static void purge() { // Remove the resource from IS String context = SecretManagerProvider.instance.get().getContext(); catalogueConfigurations.remove(context); GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context); gCoreISConfigurationProxy.delete(); } public synchronized static ServiceCatalogueConfiguration createOrUpdate(ServiceCatalogueConfiguration catalogueConfiguration) throws Exception { String context = SecretManagerProvider.instance.get().getContext(); catalogueConfigurations.remove(context); GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context, catalogueConfiguration); catalogueConfiguration = gCoreISConfigurationProxy.createOrUpdateOnIS(); catalogueConfigurations.put(context, catalogueConfiguration); // The supported organizations could be changed we need to empty the user cache for the context // to avoid to miss to add an user in an organization which has been added. CKANUserCache.emptyUserCache(); return catalogueConfiguration; } }