Fixing new config creation/update
This commit is contained in:
parent
b0e6aff70c
commit
1a4f5e81a4
|
@ -2,7 +2,7 @@
|
|||
<!DOCTYPE xml>
|
||||
<application mode='online'>
|
||||
<name>${project.artifactId}</name>
|
||||
<group>${project.groupId}</group>
|
||||
<group>${serviceClass}</group>
|
||||
<version>${project.version}</version>
|
||||
<description>${project.description}</description>
|
||||
</application>
|
1
pom.xml
1
pom.xml
|
@ -21,6 +21,7 @@
|
|||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<webappDirectory>${project.basedir}${file.separator}src${file.separator}main${file.separator}webapp${file.separator}WEB-INF</webappDirectory>
|
||||
<serviceClass>data-catalogue</serviceClass>
|
||||
</properties>
|
||||
|
||||
<scm>
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.gcube.gcat.configuration;
|
|||
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
||||
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
@ -12,13 +13,14 @@ import java.util.Set;
|
|||
import java.util.UUID;
|
||||
|
||||
import javax.ws.rs.InternalServerErrorException;
|
||||
import javax.ws.rs.NotFoundException;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
|
||||
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import org.gcube.common.encryption.encrypter.StringEncrypter;
|
||||
import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.gcube.common.resources.gcore.GenericResource;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
||||
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
||||
|
@ -27,6 +29,7 @@ import org.gcube.common.resources.gcore.ServiceEndpoint.Property;
|
|||
import org.gcube.common.resources.gcore.ServiceEndpoint.Runtime;
|
||||
import org.gcube.common.resources.gcore.common.Platform;
|
||||
import org.gcube.common.resources.gcore.utils.Group;
|
||||
import org.gcube.gcat.api.GCatConstants;
|
||||
import org.gcube.gcat.api.configuration.CatalogueConfiguration;
|
||||
import org.gcube.informationsystem.publisher.RegistryPublisher;
|
||||
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
|
||||
|
@ -85,16 +88,18 @@ public class GCoreISConfigurationProxy {
|
|||
private final static String OLD_NAME = "CKanDataCatalogue";
|
||||
|
||||
protected final String context;
|
||||
protected ObjectMapper mapper;
|
||||
protected ServiceCatalogueConfiguration catalogueConfiguration;
|
||||
|
||||
public GCoreISConfigurationProxy(String context) {
|
||||
this.context = context;
|
||||
this.mapper = new ObjectMapper();
|
||||
}
|
||||
|
||||
public GCoreISConfigurationProxy(String context, ServiceCatalogueConfiguration catalogueConfiguration) {
|
||||
this(context);
|
||||
this.catalogueConfiguration = catalogueConfiguration;
|
||||
|
||||
this.mapper = new ObjectMapper();
|
||||
}
|
||||
|
||||
public ServiceCatalogueConfiguration getCatalogueConfiguration() {
|
||||
|
@ -119,10 +124,122 @@ public class GCoreISConfigurationProxy {
|
|||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
protected ServiceCatalogueConfiguration getCatalogueConfigurationFromIS() {
|
||||
return getOLDCatalogueConfigurationFromIS();
|
||||
protected ObjectNode setValue(ObjectNode node, String key, String value) throws IOException {
|
||||
if(value.toLowerCase().compareTo("true")==0 || value.toLowerCase().compareTo("false")==0) {
|
||||
node.put(key, Boolean.parseBoolean(value));
|
||||
return node;
|
||||
}
|
||||
|
||||
if(value.startsWith("{") || value.startsWith("[")){
|
||||
JsonNode n = mapper.readTree(value);
|
||||
node.set(key, n);
|
||||
return node;
|
||||
|
||||
}
|
||||
|
||||
node.put(key, value);
|
||||
return node;
|
||||
}
|
||||
|
||||
protected ServiceCatalogueConfiguration getConfiguration(ServiceEndpoint serviceEndpoint) throws IOException {
|
||||
Profile profile = serviceEndpoint.profile();
|
||||
AccessPoint accessPoint = getAccessPoint(profile);
|
||||
Map<String, Property> propertyMap = accessPoint.propertyMap();
|
||||
|
||||
ObjectNode node = mapper.createObjectNode();
|
||||
node.put(CatalogueConfiguration.ID_KEY, serviceEndpoint.id());
|
||||
|
||||
for(String key : propertyMap.keySet()) {
|
||||
String value = propertyMap.get(key).value().trim();
|
||||
setValue(node, key, value);
|
||||
}
|
||||
|
||||
return mapper.treeToValue(node, ServiceCatalogueConfiguration.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve endpoints information from IS for DataCatalogue URL
|
||||
*
|
||||
* @return list of endpoints for ckan data catalogue
|
||||
* @throws Exception
|
||||
*/
|
||||
private List<ServiceEndpoint> getServiceEndpoints(String category, String name) {
|
||||
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||
query.addCondition("$resource/Profile/Category/text() eq '" + category + "'");
|
||||
query.addCondition("$resource/Profile/Name/text() eq '" + name + "'");
|
||||
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||
List<ServiceEndpoint> serviceEndpoints = client.submit(query);
|
||||
return serviceEndpoints;
|
||||
}
|
||||
|
||||
protected ServiceEndpoint getServiceEndpoint() {
|
||||
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 serviceEndpoint = serviceEndpoints.get(0);
|
||||
return serviceEndpoint;
|
||||
}
|
||||
|
||||
protected ServiceCatalogueConfiguration getCatalogueConfigurationFromIS() throws IOException {
|
||||
ServiceEndpoint serviceEndpoint = getServiceEndpoint();
|
||||
if(serviceEndpoint==null) {
|
||||
return getOLDCatalogueConfigurationFromIS();
|
||||
}
|
||||
return getConfiguration(serviceEndpoint);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
private ServiceEndpoint getOldServiceEndpoint() {
|
||||
List<ServiceEndpoint> serviceEndpoints = getServiceEndpoints(OLD_CATEGORY, OLD_NAME);
|
||||
|
||||
if (serviceEndpoints.size() == 0) {
|
||||
logger.error("There is no {} having Category {} and Name {} in this context.",
|
||||
ServiceEndpoint.class.getSimpleName(), OLD_CATEGORY, OLD_NAME);
|
||||
return null;
|
||||
}
|
||||
|
||||
ServiceEndpoint serviceEndpoint = null;
|
||||
|
||||
if (serviceEndpoints.size() > 1) {
|
||||
logger.info("Too many {} having Category {} and Name {} in this context. Looking for the one that has the property {}",
|
||||
ServiceEndpoint.class.getSimpleName(), OLD_CATEGORY, OLD_NAME, IS_ROOT_MASTER_PROPERTY_KEY);
|
||||
|
||||
for (ServiceEndpoint se : serviceEndpoints) {
|
||||
Iterator<AccessPoint> accessPointIterator = se.profile().accessPoints().iterator();
|
||||
while (accessPointIterator.hasNext()) {
|
||||
ServiceEndpoint.AccessPoint accessPoint = accessPointIterator.next();
|
||||
|
||||
// get the is master property
|
||||
Property entry = accessPoint.propertyMap().get(IS_ROOT_MASTER_PROPERTY_KEY);
|
||||
String isMaster = entry != null ? entry.value() : null;
|
||||
|
||||
if (isMaster == null || !isMaster.equals("true")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// set this variable
|
||||
serviceEndpoint = se;
|
||||
return serviceEndpoint;
|
||||
}
|
||||
}
|
||||
|
||||
// if none of them was master, throw an exception
|
||||
if (serviceEndpoint == null) {
|
||||
throw new InternalServerErrorException(
|
||||
"Too many catalogue configuration on IS and no one with MASTER property");
|
||||
}
|
||||
|
||||
} else {
|
||||
serviceEndpoint = serviceEndpoints.get(0);
|
||||
}
|
||||
|
||||
return serviceEndpoint;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected ServiceCatalogueConfiguration getOLDCatalogueConfigurationFromIS() {
|
||||
ServiceCatalogueConfiguration catalogueConfiguration = new ServiceCatalogueConfiguration(context);
|
||||
try {
|
||||
|
@ -130,7 +247,7 @@ public class GCoreISConfigurationProxy {
|
|||
|
||||
ServiceEndpoint serviceEndpoint = getOldServiceEndpoint();
|
||||
if (serviceEndpoint == null) {
|
||||
throw new InternalServerErrorException("No CKAN configuration on IS");
|
||||
throw new NotFoundException("No configuration found in this context");
|
||||
}
|
||||
|
||||
catalogueConfiguration.setID(serviceEndpoint.id());
|
||||
|
@ -208,87 +325,23 @@ public class GCoreISConfigurationProxy {
|
|||
return catalogueConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve endpoints information from IS for DataCatalogue URL
|
||||
*
|
||||
* @return list of endpoints for ckan data catalogue
|
||||
* @throws Exception
|
||||
*/
|
||||
private List<ServiceEndpoint> getServiceEndpoints(String category, String name) {
|
||||
SimpleQuery query = queryFor(ServiceEndpoint.class);
|
||||
query.addCondition("$resource/Profile/Category/text() eq '" + category + "'");
|
||||
query.addCondition("$resource/Profile/Name/text() eq '" + name + "'");
|
||||
|
||||
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
||||
List<ServiceEndpoint> serviceEndpoints = client.submit(query);
|
||||
if(serviceEndpoints.size() == 0) {
|
||||
String error = String.format("There is no %s having category '%s' and name '%s' in this context.",
|
||||
ServiceEndpoint.class.getSimpleName(), category, name);
|
||||
logger.error(error);
|
||||
throw new InternalServerErrorException(error);
|
||||
}
|
||||
return serviceEndpoints;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve endpoints information from IS for DataCatalogue URL
|
||||
* @return list of endpoints for ckan data catalogue
|
||||
* @throws Exception
|
||||
*/
|
||||
private ServiceEndpoint getOldServiceEndpoint() {
|
||||
List<ServiceEndpoint> serviceEndpoints = getServiceEndpoints(OLD_CATEGORY, OLD_NAME);
|
||||
|
||||
if (serviceEndpoints.size() == 0) {
|
||||
logger.error("There is no {} having Category {} and Name {} in this context.",
|
||||
ServiceEndpoint.class.getSimpleName(), OLD_CATEGORY, OLD_NAME);
|
||||
return null;
|
||||
}
|
||||
|
||||
ServiceEndpoint serviceEndpoint = null;
|
||||
|
||||
if (serviceEndpoints.size() > 1) {
|
||||
logger.info("Too many {} having Category {} and Name {} in this context. Looking for the one that has the property {}",
|
||||
ServiceEndpoint.class.getSimpleName(), OLD_CATEGORY, OLD_NAME, IS_ROOT_MASTER_PROPERTY_KEY);
|
||||
|
||||
for (ServiceEndpoint se : serviceEndpoints) {
|
||||
Iterator<AccessPoint> accessPointIterator = se.profile().accessPoints().iterator();
|
||||
while (accessPointIterator.hasNext()) {
|
||||
ServiceEndpoint.AccessPoint accessPoint = accessPointIterator.next();
|
||||
|
||||
// get the is master property
|
||||
Property entry = accessPoint.propertyMap().get(IS_ROOT_MASTER_PROPERTY_KEY);
|
||||
String isMaster = entry != null ? entry.value() : null;
|
||||
|
||||
if (isMaster == null || !isMaster.equals("true")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// set this variable
|
||||
serviceEndpoint = se;
|
||||
return serviceEndpoint;
|
||||
}
|
||||
}
|
||||
|
||||
// if none of them was master, throw an exception
|
||||
if (serviceEndpoint == null) {
|
||||
throw new InternalServerErrorException(
|
||||
"Too many catalogue configuration on IS and no one with MASTER property");
|
||||
}
|
||||
|
||||
} else {
|
||||
serviceEndpoint = serviceEndpoints.get(0);
|
||||
}
|
||||
|
||||
return serviceEndpoint;
|
||||
}
|
||||
|
||||
// CKAN Instance info
|
||||
@Deprecated
|
||||
private final static String CKAN_DB_SERVICE_ENDPOINT_CATEGORY= "Database";
|
||||
@Deprecated
|
||||
private final static String CKAN_DB_SERVICE_ENDPOINT_NAME = "CKanDatabase";
|
||||
|
||||
|
||||
@Deprecated
|
||||
protected ServiceCKANDB getCKANDBFromIS() {
|
||||
try {
|
||||
List<ServiceEndpoint> serviceEndpoints = getServiceEndpoints(CKAN_DB_SERVICE_ENDPOINT_CATEGORY, CKAN_DB_SERVICE_ENDPOINT_NAME);
|
||||
if(serviceEndpoints.size() == 0) {
|
||||
String error = String.format("There is no %s having category '%s' and name '%s' in this context.",
|
||||
ServiceEndpoint.class.getSimpleName(), CKAN_DB_SERVICE_ENDPOINT_CATEGORY, CKAN_DB_SERVICE_ENDPOINT_NAME);
|
||||
logger.error(error);
|
||||
throw new InternalServerErrorException(error);
|
||||
}
|
||||
|
||||
ServiceEndpoint serviceEndpoint = null;
|
||||
|
||||
if(serviceEndpoints.size() > 1) {
|
||||
|
@ -349,10 +402,14 @@ public class GCoreISConfigurationProxy {
|
|||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static final String GENERIC_RESOURCE_SECONDARY_TYPE_FOR_ORGANIZATIONS = "ApplicationProfile";
|
||||
@Deprecated
|
||||
public static final String GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS = "Supported CKAN Organizations";
|
||||
@Deprecated
|
||||
public static final String GENERIC_RESOURCE_CKAN_ORGANIZATIONS = "CKANOrganizations";
|
||||
|
||||
@Deprecated
|
||||
private List<GenericResource> getGenericResources() {
|
||||
SimpleQuery query = ICFactory.queryFor(GenericResource.class);
|
||||
query.addCondition(String.format("$resource/Profile/SecondaryType/text() eq '%s'",
|
||||
|
@ -379,6 +436,7 @@ public class GCoreISConfigurationProxy {
|
|||
return objectMapper.writeValueAsString(arrayNode);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected Set<String> unmarshallSupportedOrganizations(String supportedOrganizationsJsonArray){
|
||||
try {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
@ -399,18 +457,7 @@ public class GCoreISConfigurationProxy {
|
|||
}
|
||||
}
|
||||
|
||||
protected void removeAllGenericResources() {
|
||||
List<GenericResource> genericResources = getGenericResources();
|
||||
removeAllGenericResources(genericResources);
|
||||
}
|
||||
|
||||
protected void removeAllGenericResources(List<GenericResource> genericResources) {
|
||||
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
|
||||
for(GenericResource genericResource : genericResources) {
|
||||
registryPublisher.remove(genericResource);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected Set<String> getSupportedOrganizationsFromGenericResource() {
|
||||
List<GenericResource> genericResources = getGenericResources();
|
||||
|
||||
|
@ -427,15 +474,17 @@ public class GCoreISConfigurationProxy {
|
|||
|
||||
Set<String> supportedOrganizatins = unmarshallSupportedOrganizations(supportedOrganizationsJsonArray);
|
||||
|
||||
removeAllGenericResources(genericResources);
|
||||
|
||||
return supportedOrganizatins;
|
||||
}
|
||||
|
||||
|
||||
public void delete() {
|
||||
@Deprecated
|
||||
public void deleteOldConfiguration() {
|
||||
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
|
||||
|
||||
deleteOldConfiguration(registryPublisher);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
protected void deleteOldConfiguration(RegistryPublisher registryPublisher) {
|
||||
ServiceEndpoint serviceEndpoint = getOldServiceEndpoint();
|
||||
if(serviceEndpoint!=null) {
|
||||
registryPublisher.remove(serviceEndpoint);
|
||||
|
@ -449,6 +498,17 @@ public class GCoreISConfigurationProxy {
|
|||
}
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
|
||||
|
||||
ServiceEndpoint serviceEndpoint = getServiceEndpoint();
|
||||
if(serviceEndpoint!=null) {
|
||||
registryPublisher.remove(serviceEndpoint);
|
||||
}
|
||||
|
||||
deleteOldConfiguration();
|
||||
}
|
||||
|
||||
protected Property addProperty(Group<Property> properties, String name, String value) {
|
||||
return addProperty(properties, name, value, false);
|
||||
}
|
||||
|
@ -456,38 +516,41 @@ public class GCoreISConfigurationProxy {
|
|||
protected Property addProperty(Group<Property> properties, String name, String value, boolean encrypted) {
|
||||
Property property = new Property();
|
||||
property.nameAndValue(name, value);
|
||||
property.encrypted(encrypted);
|
||||
if(encrypted) {
|
||||
property.encrypted(encrypted);
|
||||
}
|
||||
properties.add(property);
|
||||
return property;
|
||||
}
|
||||
|
||||
protected Group<Property> setAccessPointProperties(AccessPoint accessPoint, boolean update) throws JsonProcessingException {
|
||||
protected Group<Property> setAccessPointProperties(AccessPoint accessPoint, String address, boolean update) throws JsonProcessingException {
|
||||
accessPoint.description(String.format("Access Point %s by gcat %s", update ? "updated" : "created", getGcatVersion().toString()));
|
||||
accessPoint.address(catalogueConfiguration.getCkanURL());
|
||||
|
||||
// TODO Change ASAP
|
||||
//accessPoint.name("gcat Configuration");
|
||||
accessPoint.name("CKan Data Catalogue");
|
||||
accessPoint.address(address);
|
||||
accessPoint.name(GCatConstants.CONFIGURATION_NAME);
|
||||
|
||||
Group<Property> properties = accessPoint.properties();
|
||||
addProperty(properties, SOLR_INDEX_ADDRESS_PROPERTY_KEY, catalogueConfiguration.getSolrURL());
|
||||
addProperty(properties, DEFAULT_ORGANIZATION_PROPERTY_KEY, catalogueConfiguration.getDefaultOrganization());
|
||||
addProperty(properties, API_KEY_PROPERTY_KEY, catalogueConfiguration.getSysAdminToken(), true);
|
||||
addProperty(properties, SOCIAL_POST_PROPERTY_KEY, Boolean.toString(catalogueConfiguration.isSocialPostEnabled()));
|
||||
addProperty(properties, ALERT_USERS_ON_POST_CREATION_PROPERTY_KEY, Boolean.toString(catalogueConfiguration.isNotificationToUsersEnabled()));
|
||||
addProperty(properties, MODERATION_ENABLED_KEY_PROPERTY_KEY, Boolean.toString(catalogueConfiguration.isModerationEnabled()));
|
||||
addProperty(properties, SUPPORTED_ORGANIZATION_PROPERTY_KEY, marshallSupportedOrganizations());
|
||||
|
||||
JsonNode jsonNode = mapper.valueToTree(catalogueConfiguration);
|
||||
Iterator<String> iterator = jsonNode.fieldNames();
|
||||
while (iterator.hasNext()) {
|
||||
String key = iterator.next();
|
||||
JsonNode valueJsonNode = jsonNode.get(key);
|
||||
|
||||
String value = valueJsonNode.toString();
|
||||
addProperty(properties, key, value);
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
|
||||
private final static String PLATFORM_NAME = "Tomcat";
|
||||
|
||||
protected Version getGcatVersion() {
|
||||
ApplicationContext applicationContext = ContextProvider.get();
|
||||
ApplicationConfiguration applicationConfiguration = applicationContext.configuration();
|
||||
Version version = new Version(applicationConfiguration.version());
|
||||
return version;
|
||||
try {
|
||||
ApplicationContext applicationContext = ContextProvider.get();
|
||||
ApplicationConfiguration applicationConfiguration = applicationContext.configuration();
|
||||
Version version = new Version(applicationConfiguration.version());
|
||||
return version;
|
||||
}catch (Exception e) {
|
||||
return new Version("2.2.0");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -509,19 +572,15 @@ public class GCoreISConfigurationProxy {
|
|||
protected Platform setPlatformProperty(Platform platform) {
|
||||
/*
|
||||
* <Platform>
|
||||
* <Name>Tomcat</Name>
|
||||
*
|
||||
* The version of gcat
|
||||
* <Name>gcat</Name>
|
||||
* <!-- The version of gcat -->
|
||||
* <Version>2</Version>
|
||||
* <MinorVersion>2</MinorVersion>
|
||||
* <RevisionVersion>0</RevisionVersion>
|
||||
* <BuildVersion>0</BuildVersion>
|
||||
* </Platform>
|
||||
*/
|
||||
|
||||
// TODO change to gcat ASAP
|
||||
// platform.name("gcat");
|
||||
platform.name(PLATFORM_NAME);
|
||||
platform.name(GCatConstants.SERVICE_NAME);
|
||||
platform = setVersion(platform);
|
||||
return platform;
|
||||
}
|
||||
|
@ -531,13 +590,19 @@ public class GCoreISConfigurationProxy {
|
|||
}
|
||||
|
||||
protected Runtime setRuntimeProperties(Runtime runtime) {
|
||||
ApplicationContext applicationContext = ContextProvider.get();
|
||||
ContainerContext containerContext = applicationContext.container();
|
||||
ContainerConfiguration containerConfiguration = containerContext.configuration();
|
||||
String runningOn = getRunningOn(containerConfiguration);
|
||||
runtime.hostedOn(runningOn);
|
||||
runtime.ghnId(containerContext.id());
|
||||
runtime.status(applicationContext.configuration().mode().toString());
|
||||
try {
|
||||
ApplicationContext applicationContext = ContextProvider.get();
|
||||
ContainerContext containerContext = applicationContext.container();
|
||||
ContainerConfiguration containerConfiguration = containerContext.configuration();
|
||||
String runningOn = getRunningOn(containerConfiguration);
|
||||
runtime.hostedOn(runningOn);
|
||||
runtime.ghnId(containerContext.id());
|
||||
runtime.status(applicationContext.configuration().mode().toString());
|
||||
}catch (Exception e) {
|
||||
runtime.hostedOn("localhost");
|
||||
runtime.ghnId("");
|
||||
runtime.status("READY");
|
||||
}
|
||||
return runtime;
|
||||
}
|
||||
|
||||
|
@ -548,47 +613,27 @@ public class GCoreISConfigurationProxy {
|
|||
* <Name>CKanDataCatalogue</Name>
|
||||
* <Description>gCat Configuration created/updated by the service via REST</Description>
|
||||
*/
|
||||
profile.category(OLD_CATEGORY);
|
||||
profile.name(OLD_NAME);
|
||||
profile.category(GCatConstants.CONFIGURATION_CATEGORY);
|
||||
profile.name(GCatConstants.CONFIGURATION_NAME);
|
||||
profile.description(String.format("gCat configuration %s by the service via REST", update ? "updated" : "created"));
|
||||
return profile;
|
||||
}
|
||||
|
||||
protected boolean isRootMaster(ServiceEndpoint serviceEndpoint) {
|
||||
Profile profile = serviceEndpoint.profile();
|
||||
AccessPoint accessPoint = getAccessPoint(profile);
|
||||
Map<String, Property> propertyMap = accessPoint.propertyMap();
|
||||
if (propertyMap.containsKey(IS_ROOT_MASTER_PROPERTY_KEY)) {
|
||||
if (propertyMap.get(IS_ROOT_MASTER_PROPERTY_KEY).value().trim().equalsIgnoreCase("true")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// @Deprecated
|
||||
// protected boolean isRootMaster(ServiceEndpoint serviceEndpoint) {
|
||||
// Profile profile = serviceEndpoint.profile();
|
||||
// AccessPoint accessPoint = getAccessPoint(profile);
|
||||
// Map<String, Property> propertyMap = accessPoint.propertyMap();
|
||||
// if (propertyMap.containsKey(IS_ROOT_MASTER_PROPERTY_KEY)) {
|
||||
// if (propertyMap.get(IS_ROOT_MASTER_PROPERTY_KEY).value().trim().equalsIgnoreCase("true")) {
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
|
||||
protected ServiceEndpoint createServiceEndpoint(ServiceEndpoint serviceEndpoint) throws Exception {
|
||||
boolean update = serviceEndpoint != null;
|
||||
boolean rootMaster = false;
|
||||
|
||||
if(update) {
|
||||
if(catalogueConfiguration.getSysAdminToken()==null) {
|
||||
Profile profile = serviceEndpoint.profile();
|
||||
AccessPoint accessPoint = getAccessPoint(profile);
|
||||
Map<String, Property> propertyMap = accessPoint.propertyMap();
|
||||
|
||||
// add this host
|
||||
String ckanURL = accessPoint.address();
|
||||
catalogueConfiguration.setCkanURL(ckanURL);
|
||||
|
||||
// retrieve sys admin token
|
||||
String encryptedSysAdminToken = propertyMap.get(API_KEY_PROPERTY_KEY).value();
|
||||
catalogueConfiguration.setSysAdminToken(StringEncrypter.getEncrypter().decrypt(encryptedSysAdminToken));
|
||||
}
|
||||
|
||||
rootMaster = isRootMaster(serviceEndpoint);
|
||||
|
||||
}
|
||||
|
||||
|
||||
serviceEndpoint = new ServiceEndpoint();
|
||||
serviceEndpoint.setId(catalogueConfiguration.getID());
|
||||
|
@ -604,12 +649,8 @@ public class GCoreISConfigurationProxy {
|
|||
|
||||
Group<AccessPoint> accessPoints = profile.accessPoints();
|
||||
AccessPoint accessPoint = accessPoints.add();
|
||||
Group<Property> properties = setAccessPointProperties(accessPoint, update);
|
||||
|
||||
if(rootMaster) {
|
||||
addProperty(properties, IS_ROOT_MASTER_PROPERTY_KEY, Boolean.toString(rootMaster));
|
||||
}
|
||||
|
||||
setAccessPointProperties(accessPoint, runtime.hostedOn(), update);
|
||||
|
||||
return serviceEndpoint;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.gcube.gcat.configuration;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
|
@ -10,7 +11,7 @@ public class Version implements Comparable<Version> {
|
|||
/**
|
||||
* Regex validating the version
|
||||
*/
|
||||
public final static String VERSION_REGEX = "^[1-9][0-9]{0,}\\.(0|([1-9][0-9]{0,}))\\.(0|([1-9][0-9]{0,}))$";
|
||||
public final static String VERSION_REGEX = "^[1-9][0-9]{0,}\\.(0|([1-9][0-9]{0,}))\\.(0|([1-9][0-9]{0,}))";
|
||||
|
||||
private final static Pattern VERSION_PATTERN;
|
||||
|
||||
|
@ -35,10 +36,13 @@ public class Version implements Comparable<Version> {
|
|||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
if(!VERSION_PATTERN.matcher(version).find()) {
|
||||
Matcher matcher = VERSION_PATTERN.matcher(version);
|
||||
if(!matcher.find()) {
|
||||
throw new RuntimeException("The provided version (i.e. " + version + ") MUST comply with the regex " + VERSION_REGEX);
|
||||
}
|
||||
String[] parts = version.split("\\.");
|
||||
|
||||
String matched = matcher.group(0);
|
||||
String[] parts = matched.split("\\.");
|
||||
this.major = Integer.valueOf(parts[0]);
|
||||
this.minor = Integer.valueOf(parts[1]);
|
||||
this.revision = Integer.valueOf(parts[2]);
|
||||
|
|
|
@ -15,6 +15,7 @@ import javax.ws.rs.Path;
|
|||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.ResponseBuilder;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
@ -82,7 +83,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
String configuration = gotCatalogueConfiguration.toJsonString();
|
||||
logger.debug("The new configuration in context {} is {}", catalogueConfiguration.getContext(), configuration);
|
||||
return configuration;
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -103,7 +104,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
responseBuilder.entity(ret).type(GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
|
||||
}
|
||||
return responseBuilder.build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -117,7 +118,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
try {
|
||||
checkContext(context);
|
||||
return read();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -135,7 +136,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
responseBuilder.entity(configuration).type(GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
|
||||
}
|
||||
return responseBuilder.build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -151,7 +152,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
ServiceCatalogueConfiguration catalogueConfiguration = ServiceCatalogueConfiguration.getServiceCatalogueConfiguration(json);
|
||||
checkContext(context, catalogueConfiguration);
|
||||
return createOrUpdate(catalogueConfiguration);
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -171,7 +172,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
responseBuilder.entity(configuration).type(GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
|
||||
}
|
||||
return responseBuilder.build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -186,7 +187,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
try {
|
||||
checkContext(context);
|
||||
return patch(json);
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -226,7 +227,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
responseBuilder.entity(ret).type(GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
|
||||
}
|
||||
return responseBuilder.build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -234,7 +235,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
}
|
||||
|
||||
@DELETE
|
||||
@PathParam(CONTEXT_FULLNAME_PARAMETER)
|
||||
@Path("/{" + CONTEXT_FULLNAME_PARAMETER + "}")
|
||||
public Response delete(@PathParam(CONTEXT_FULLNAME_PARAMETER) String context,
|
||||
@QueryParam(GCatConstants.PURGE_QUERY_PARAMETER) @DefaultValue("false") Boolean purge) throws WebServiceException {
|
||||
try {
|
||||
|
@ -244,7 +245,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
}else {
|
||||
return delete();
|
||||
}
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -257,7 +258,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
try {
|
||||
CatalogueConfigurationFactory.renew();
|
||||
return Response.status(Status.NO_CONTENT).build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -265,12 +266,12 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
}
|
||||
|
||||
@PURGE
|
||||
@PathParam(CONTEXT_FULLNAME_PARAMETER)
|
||||
@Path("/{" + CONTEXT_FULLNAME_PARAMETER + "}")
|
||||
public Response purge(@PathParam(CONTEXT_FULLNAME_PARAMETER) String context) throws WebServiceException {
|
||||
try {
|
||||
checkContext(context);
|
||||
return purge();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
@ -283,7 +284,7 @@ public class Configuration extends BaseREST implements org.gcube.gcat.api.interf
|
|||
try {
|
||||
CatalogueConfigurationFactory.purge();
|
||||
return Response.status(Status.NO_CONTENT).build();
|
||||
}catch (WebServiceException e) {
|
||||
}catch (WebApplicationException e) {
|
||||
throw e;
|
||||
}catch (Exception e) {
|
||||
throw new InternalServerErrorException(e);
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
package org.gcube.gcat.configuration;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.gcube.common.authorization.utils.manager.SecretManager;
|
||||
import org.gcube.gcat.ContextTest;
|
||||
import org.gcube.smartgears.ContextProvider;
|
||||
import org.gcube.smartgears.configuration.application.ApplicationConfiguration;
|
||||
import org.gcube.smartgears.configuration.application.DefaultApplicationConfiguration;
|
||||
import org.gcube.smartgears.context.application.ApplicationContext;
|
||||
import org.gcube.smartgears.context.application.DefaultApplicationContext;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -41,7 +50,7 @@ public class GCoreISConfigurationProxyTest extends ContextTest {
|
|||
logger.info("All as JsonArray [{},{},{},{}]", json, secondJson, decryptedJson, thirdJson);
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void updateConfigurationToNewVersion() throws Exception {
|
||||
ContextTest.setContextByName("/gcube/devsec/devVRE");
|
||||
String context = SecretManager.instance.get().getContext();
|
||||
|
@ -54,6 +63,18 @@ public class GCoreISConfigurationProxyTest extends ContextTest {
|
|||
logger.debug("Updated configuration {}", json);
|
||||
}
|
||||
|
||||
public static String DEVVRE_CONFIG_JSON = "devvre.conf.json";
|
||||
|
||||
@Test
|
||||
public void createConfiguration() throws Exception {
|
||||
ContextTest.setContextByName("/gcube/devsec/devVRE");
|
||||
String context = SecretManager.instance.get().getContext();
|
||||
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.createOnIS(null);
|
||||
}
|
||||
|
||||
|
||||
// protected GenericResource instantiateGenericResource(String secondaryType, String name, String xml) throws Exception {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package org.gcube.gcat.configuration;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author Luca Frosini (ISTI - CNR)
|
||||
*/
|
||||
public class VersionTest {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(VersionTest.class);
|
||||
|
||||
@Test
|
||||
public void testVersions() {
|
||||
String[] versions = new String[]{"2.2.0-SNAPSHOT", "1.3.5", "1.4.5-beta", "1.5.6-gcore"};
|
||||
for(String v : versions) {
|
||||
Version version = new Version(v);
|
||||
logger.debug("Version is {}", version);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -5,3 +5,4 @@
|
|||
/config.properties.old-authz
|
||||
/config.properties.old
|
||||
/config.properties-new-authz
|
||||
/devvre.conf.json
|
||||
|
|
Loading…
Reference in New Issue