diff --git a/pom.xml b/pom.xml
index 5c23c2b..d04821b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,6 +51,10 @@
org.gcube.core
common-scope
+
+ org.gcube.core
+ common-smartgears-app
+
org.gcube.data-catalogue
gcat-api
diff --git a/src/main/java/org/gcube/gcat/configuration/GCoreISConfigurationProxy.java b/src/main/java/org/gcube/gcat/configuration/GCoreISConfigurationProxy.java
index c5076d7..7418482 100644
--- a/src/main/java/org/gcube/gcat/configuration/GCoreISConfigurationProxy.java
+++ b/src/main/java/org/gcube/gcat/configuration/GCoreISConfigurationProxy.java
@@ -6,12 +6,14 @@ import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.UUID;
import javax.ws.rs.InternalServerErrorException;
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;
@@ -19,13 +21,22 @@ import org.gcube.common.encryption.encrypter.StringEncrypter;
import org.gcube.common.resources.gcore.GenericResource;
import org.gcube.common.resources.gcore.ServiceEndpoint;
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
+import org.gcube.common.resources.gcore.ServiceEndpoint.Profile;
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.configuration.CatalogueConfiguration;
import org.gcube.informationsystem.publisher.RegistryPublisher;
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
import org.gcube.resources.discovery.client.api.DiscoveryClient;
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
import org.gcube.resources.discovery.icclient.ICFactory;
+import org.gcube.smartgears.ContextProvider;
+import org.gcube.smartgears.configuration.application.ApplicationConfiguration;
+import org.gcube.smartgears.configuration.container.ContainerConfiguration;
+import org.gcube.smartgears.context.application.ApplicationContext;
+import org.gcube.smartgears.context.container.ContainerContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,14 +47,16 @@ public class GCoreISConfigurationProxy {
// property to retrieve the master service endpoint into the /root scope
private final static String IS_MASTER_ROOT_KEY_PROPERTY = "IS_ROOT_MASTER"; // true, false.. missing means false as
+ private final static String DEFAULT_ORGANIZATION_PROPERTY = "DEFAULT_ORGANIZATION";
+ private final static String SUPPORTED_ORGANIZATION_PROPERTY = "SUPPORTED_ORGANIZATION";
private final static String API_KEY_PROPERTY = "API_KEY";
- private final static String SOCIAL_POST = "SOCIAL_POST";
- private final static String ALERT_USERS_ON_POST_CREATION = "ALERT_USERS_ON_POST_CREATION";
- private final static String MODERATION_ENABLED_KEY = "MODERATION_ENABLED";
+ private final static String SOCIAL_POST_PROPERTY = "SOCIAL_POST";
+ private final static String ALERT_USERS_ON_POST_CREATION_PROPERTY = "ALERT_USERS_ON_POST_CREATION";
+ private final static String MODERATION_ENABLED_KEY_PROPERTY = "MODERATION_ENABLED";
// CKAN Instance info
- private final static String RUNTIME_CATALOGUE_RESOURCE_NAME = "CKanDataCatalogue";
- private final static String PLATFORM_CATALOGUE_NAME = "Tomcat";
+ private final static String CATEGORY = "Application";
+ private final static String NAME = "CKanDataCatalogue";
protected final String context;
protected CatalogueConfiguration catalogueConfiguration;
@@ -60,13 +73,22 @@ public class GCoreISConfigurationProxy {
public CatalogueConfiguration getCatalogueConfiguration() {
if (catalogueConfiguration == null) {
- loadFromIS();
+ getCatalogueConfigurationFromIS();
}
return catalogueConfiguration;
}
- protected CatalogueConfiguration loadFromIS() {
+ protected AccessPoint getAccessPoint(Profile profile) {
+ Group accessPoints = profile.accessPoints();
+ Iterator accessPointIterator = accessPoints.iterator();
+ AccessPoint accessPoint = accessPointIterator.next();
+ return accessPoint;
+ }
+
+ protected CatalogueConfiguration getCatalogueConfigurationFromIS() {
try {
+ boolean mustBeUpdated = false;
+
catalogueConfiguration = new CatalogueConfiguration(context);
ServiceEndpoint serviceEndpoint = getServiceEndpoint();
@@ -76,53 +98,87 @@ public class GCoreISConfigurationProxy {
catalogueConfiguration.setID(serviceEndpoint.id());
- Iterator accessPointIterator = serviceEndpoint.profile().accessPoints().iterator();
- while (accessPointIterator.hasNext()) {
- AccessPoint accessPoint = accessPointIterator.next();
+ Profile profile = serviceEndpoint.profile();
+ AccessPoint accessPoint = getAccessPoint(profile);
+
+ // add this host
+ String ckanURL = accessPoint.address();
+ catalogueConfiguration.setCkanURL(ckanURL);
+
+ Map propertyMap = accessPoint.propertyMap();
+
+ // retrieve sys admin token
+ String sysAdminToken = propertyMap.get(API_KEY_PROPERTY).value();
+ sysAdminToken = StringEncrypter.getEncrypter().decrypt(sysAdminToken);
+ catalogueConfiguration.setSysAdminToken(sysAdminToken);
- // add this host
- String ckanURL = accessPoint.address();
- catalogueConfiguration.setCkanURL(ckanURL);
-
- // retrieve sys admin token
- String sysAdminToken = accessPoint.propertyMap().get(API_KEY_PROPERTY).value();
- sysAdminToken = StringEncrypter.getEncrypter().decrypt(sysAdminToken);
- catalogueConfiguration.setSysAdminToken(sysAdminToken);
-
- // retrieve option to check if the social post has to be made
- Boolean socialPostEnabled = true;
- if (accessPoint.propertyMap().containsKey(SOCIAL_POST)) {
- if (accessPoint.propertyMap().get(SOCIAL_POST).value().trim().equalsIgnoreCase("false")) {
- socialPostEnabled = false;
- }
+
+ String organization = CatalogueConfiguration.getOrganizationName(context);
+ if (propertyMap.containsKey(DEFAULT_ORGANIZATION_PROPERTY)) {
+ String org = propertyMap.get(DEFAULT_ORGANIZATION_PROPERTY).value().trim();
+ if(org!=null && org.compareTo("")==0) {
+ mustBeUpdated = true;
+ }else {
+ organization = org;
+
}
- catalogueConfiguration.setSocialPostEnabled(socialPostEnabled);
-
- // retrieve option for user alert
- boolean notificationToUsersEnabled = false; // default is false
- if (accessPoint.propertyMap().containsKey(ALERT_USERS_ON_POST_CREATION)) {
- if (accessPoint.propertyMap().get(ALERT_USERS_ON_POST_CREATION).value().trim()
- .equalsIgnoreCase("true")) {
- notificationToUsersEnabled = true;
- }
- }
- catalogueConfiguration.setNotificationToUsersEnabled(notificationToUsersEnabled);
-
- boolean moderationEnabled = false; // default is false
- if (accessPoint.propertyMap().containsKey(MODERATION_ENABLED_KEY)) {
- if (accessPoint.propertyMap().get(MODERATION_ENABLED_KEY).value().trim().equalsIgnoreCase("true")) {
- moderationEnabled = true;
- }
- }
- catalogueConfiguration.setModerationEnabled(moderationEnabled);
-
+ }else {
+ mustBeUpdated = true;
}
+ catalogueConfiguration.setOrganization(organization);
+
+
+ // retrieve option to check if the social post has to be made
+ Boolean socialPostEnabled = true;
+ if (propertyMap.containsKey(SOCIAL_POST_PROPERTY)) {
+ if (propertyMap.get(SOCIAL_POST_PROPERTY).value().trim().equalsIgnoreCase("false")) {
+ socialPostEnabled = false;
+ }
+ }else {
+ mustBeUpdated = true;
+ }
+ catalogueConfiguration.setSocialPostEnabled(socialPostEnabled);
- Set supportedOrganizations = getSupportedOrganizationsFromIS();
+ // retrieve option for user alert
+ boolean notificationToUsersEnabled = false; // default is false
+ if (propertyMap.containsKey(ALERT_USERS_ON_POST_CREATION_PROPERTY)) {
+ if (propertyMap.get(ALERT_USERS_ON_POST_CREATION_PROPERTY).value().trim()
+ .equalsIgnoreCase("true")) {
+ notificationToUsersEnabled = true;
+ }
+ }else {
+ mustBeUpdated = true;
+ }
+ catalogueConfiguration.setNotificationToUsersEnabled(notificationToUsersEnabled);
+
+ boolean moderationEnabled = false; // default is false
+ if (propertyMap.containsKey(MODERATION_ENABLED_KEY_PROPERTY)) {
+ if (propertyMap.get(MODERATION_ENABLED_KEY_PROPERTY).value().trim().equalsIgnoreCase("true")) {
+ moderationEnabled = true;
+ }
+ }else {
+ mustBeUpdated = true;
+ }
+ catalogueConfiguration.setModerationEnabled(moderationEnabled);
+
+ Set supportedOrganizations = null;
+ if (propertyMap.containsKey(SUPPORTED_ORGANIZATION_PROPERTY)) {
+ String jsonArray = propertyMap.get(SUPPORTED_ORGANIZATION_PROPERTY).value();
+ supportedOrganizations = unmarshallSupportedOrganizations(jsonArray);
+ removeAllGenericResources();
+ }else {
+ supportedOrganizations = getSupportedOrganizationsFromGenericResource();
+ mustBeUpdated = true;
+ }
if (supportedOrganizations != null) {
catalogueConfiguration.setSupportedOrganizations(supportedOrganizations);
}
+ if(mustBeUpdated) {
+ // updateOnIS(serviceEndpoint);
+ logger.warn("The ServiceEndpoint with ID {} in context {} should be updated", serviceEndpoint.id(), context);
+ }
+
} catch (WebApplicationException e) {
throw e;
} catch (Exception e) {
@@ -140,8 +196,9 @@ public class GCoreISConfigurationProxy {
*/
private List getServiceEndpoints() {
SimpleQuery query = queryFor(ServiceEndpoint.class);
- query.addCondition("$resource/Profile/Name/text() eq '" + RUNTIME_CATALOGUE_RESOURCE_NAME + "'");
- query.addCondition("$resource/Profile/Platform/Name/text() eq '" + PLATFORM_CATALOGUE_NAME + "'");
+ query.addCondition("$resource/Profile/Category/Name/text() eq '" + CATEGORY + "'");
+ query.addCondition("$resource/Profile/Name/text() eq '" + NAME + "'");
+
DiscoveryClient client = clientFor(ServiceEndpoint.class);
List serviceEndpoints = client.submit(query);
return serviceEndpoints;
@@ -151,17 +208,16 @@ public class GCoreISConfigurationProxy {
List serviceEndpoints = getServiceEndpoints();
if (serviceEndpoints.size() == 0) {
- logger.error("There is no {} having name {} and Platform {} in this context.",
- ServiceEndpoint.class.getSimpleName(), RUNTIME_CATALOGUE_RESOURCE_NAME, PLATFORM_CATALOGUE_NAME);
+ logger.error("There is no {} having Category {} and Name {} in this context.",
+ ServiceEndpoint.class.getSimpleName(), CATEGORY, NAME);
return null;
}
ServiceEndpoint serviceEndpoint = null;
if (serviceEndpoints.size() > 1) {
- logger.info("Too many {} having name {} in this context. Looking for the one that has the property {}",
- ServiceEndpoint.class.getSimpleName(), RUNTIME_CATALOGUE_RESOURCE_NAME,
- IS_MASTER_ROOT_KEY_PROPERTY);
+ logger.info("Too many {} having Category {} and Name {} in this context. Looking for the one that has the property {}",
+ ServiceEndpoint.class.getSimpleName(), CATEGORY, NAME, IS_MASTER_ROOT_KEY_PROPERTY);
for (ServiceEndpoint se : serviceEndpoints) {
Iterator accessPointIterator = se.profile().accessPoints().iterator();
@@ -178,7 +234,7 @@ public class GCoreISConfigurationProxy {
// set this variable
serviceEndpoint = se;
- break;
+ return serviceEndpoint;
}
}
@@ -210,29 +266,25 @@ public class GCoreISConfigurationProxy {
List genericResources = client.submit(query);
return genericResources;
}
-
- protected Set getSupportedOrganizationsFromIS() {
- List genericResources = getGenericResources();
-
- if (genericResources == null || genericResources.size() == 0) {
- logger.trace(
- "{} with SecondaryType {} and Name %s not found. Item will be only be created in {} CKAN organization",
- GenericResource.class.getSimpleName(), GENERIC_RESOURCE_SECONDARY_TYPE_FOR_ORGANIZATIONS,
- GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS, CatalogueConfiguration.getOrganizationName(context));
- return null;
+
+ protected String marshallSupportedOrganizations() throws JsonProcessingException {
+ Set supportedOrganizations = catalogueConfiguration.getSupportedOrganizations();
+ return marshallSupportedOrganizations(supportedOrganizations);
+ }
+
+ protected String marshallSupportedOrganizations(Set supportedOrganizations) throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ ArrayNode arrayNode = objectMapper.createArrayNode();
+ for(String org : supportedOrganizations) {
+ arrayNode.add(org);
}
-
- if (genericResources.size() > 1) {
- throw new InternalServerErrorException(
- "To many generic resources to get supported organizations in context " + context);
- }
-
- GenericResource genericResource = genericResources.get(0);
-
+ return objectMapper.writeValueAsString(arrayNode);
+ }
+
+ protected Set unmarshallSupportedOrganizations(String supportedOrganizationsJsonArray){
try {
- String body = genericResource.profile().body().getTextContent();
ObjectMapper objectMapper = new ObjectMapper();
- JsonNode jsonNode = objectMapper.readTree(body);
+ JsonNode jsonNode = objectMapper.readTree(supportedOrganizationsJsonArray);
ArrayNode array = (ArrayNode) jsonNode.get(GENERIC_RESOURCE_CKAN_ORGANIZATIONS);
Set supportedOrganizations = new HashSet<>(array.size());
for (int i = 0; i < array.size(); i++) {
@@ -245,10 +297,41 @@ public class GCoreISConfigurationProxy {
return supportedOrganizations;
} catch (Exception e) {
+ return null;
+ }
+ }
+
+ protected void removeAllGenericResources() {
+ List genericResources = getGenericResources();
+ removeAllGenericResources(genericResources);
+ }
+
+ protected void removeAllGenericResources(List genericResources) {
+ RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
+ for(GenericResource genericResource : genericResources) {
+ registryPublisher.remove(genericResource);
+ }
+ }
+
+ protected Set getSupportedOrganizationsFromGenericResource() {
+ List genericResources = getGenericResources();
+ if (genericResources == null || genericResources.size() == 0) {
+ logger.trace(
+ "{} with SecondaryType {} and Name %s not found. Item will be only be created in {} CKAN organization",
+ GenericResource.class.getSimpleName(), GENERIC_RESOURCE_SECONDARY_TYPE_FOR_ORGANIZATIONS,
+ GENERIC_RESOURCE_NAME_FOR_ORGANIZATIONS, CatalogueConfiguration.getOrganizationName(context));
+ return null;
}
- return null;
+ GenericResource genericResource = genericResources.get(0);
+ String supportedOrganizationsJsonArray = genericResource.profile().body().getTextContent();
+
+ Set supportedOrganizatins = unmarshallSupportedOrganizations(supportedOrganizationsJsonArray);
+
+ removeAllGenericResources(genericResources);
+
+ return supportedOrganizatins;
}
@@ -268,39 +351,184 @@ public class GCoreISConfigurationProxy {
}
}
+ protected Property addProperty(Group properties, String name, String value) {
+ return addProperty(properties, name, value, false);
+ }
+
+ protected Property addProperty(Group properties, String name, String value, boolean encrypted) {
+ Property property = new Property();
+ property.nameAndValue(name, value);
+ property.encrypted(encrypted);
+ properties.add(property);
+ return property;
+ }
- protected ServiceEndpoint manageServiceEndpoint(ServiceEndpoint serviceEndpoint) {
+ protected AccessPoint setAccessPointProperties(AccessPoint accessPoint, 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");
+
+ Group properties = accessPoint.properties();
+ addProperty(properties, DEFAULT_ORGANIZATION_PROPERTY, catalogueConfiguration.getOrganization());
+ addProperty(properties, API_KEY_PROPERTY, catalogueConfiguration.getSysAdminToken(), true);
+ addProperty(properties, SOCIAL_POST_PROPERTY, Boolean.toString(catalogueConfiguration.isSocialPostEnabled()));
+ addProperty(properties, ALERT_USERS_ON_POST_CREATION_PROPERTY, Boolean.toString(catalogueConfiguration.isNotificationToUsersEnabled()));
+ addProperty(properties, MODERATION_ENABLED_KEY_PROPERTY, Boolean.toString(catalogueConfiguration.isModerationEnabled()));
+ addProperty(properties, SUPPORTED_ORGANIZATION_PROPERTY, marshallSupportedOrganizations());
+
+ return accessPoint;
+ }
+
+ 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;
+ }
+
+ /**
+ * Set the version of gcat so that in future implementation
+ * we can understand if the configuration must be updated.
+ * @param platform
+ * @return
+ */
+ protected Platform setVersion(Platform platform) {
+ Version version = getGcatVersion();
+ platform.version((short) version.getMajor());
+ platform.minorVersion((short) version.getMinor());
+ platform.revisionVersion((short) version.getRevision());
+ platform.buildVersion((short) 0);
+ return platform;
+ }
+
+
+ protected Platform setPlatformProperty(Platform platform) {
+ /*
+ *
+ * Tomcat
+ *
+ * The version of gcat
+ * 2
+ * 2
+ * 0
+ * 0
+ *
+ */
+
+ // TODO change to gcat ASAP
+ // platform.name("gcat");
+ platform.name(PLATFORM_NAME);
+ platform = setVersion(platform);
+ return platform;
+ }
+
+ private String getRunningOn(ContainerConfiguration containerConfiguration) {
+ return String.format("%s:%s", containerConfiguration.hostname(), containerConfiguration.port());
+ }
+
+ 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());
+ return runtime;
+ }
+
+ protected Profile setProfileProperties(Profile profile, boolean update) {
+ /*
+ *
+ * Application
+ * CKanDataCatalogue
+ * gCat Configuration created/updated by the service via REST
+ */
+ profile.category(CATEGORY);
+ profile.name(NAME);
+ profile.description(String.format("gCat configuration %s by the service via REST", update ? "updated" : "created"));
+ return profile;
+ }
+
+ protected ServiceEndpoint createServiceEndpoint(ServiceEndpoint serviceEndpoint) throws Exception {
+ boolean update = serviceEndpoint != null;
+
+ if(update) {
+ if(catalogueConfiguration.getSysAdminToken()==null) {
+ Profile profile = serviceEndpoint.profile();
+ AccessPoint accessPoint = getAccessPoint(profile);
+
+ // add this host
+ String ckanURL = accessPoint.address();
+ catalogueConfiguration.setCkanURL(ckanURL);
+
+ Map propertyMap = accessPoint.propertyMap();
+
+ // retrieve sys admin token
+ String sysAdminToken = propertyMap.get(API_KEY_PROPERTY).value();
+ sysAdminToken = StringEncrypter.getEncrypter().decrypt(sysAdminToken);
+ catalogueConfiguration.setSysAdminToken(sysAdminToken);
+ }
+ }
+
+
+ serviceEndpoint = new ServiceEndpoint();
+ serviceEndpoint.setId(catalogueConfiguration.getID());
+
+ Profile profile = serviceEndpoint.newProfile();
+ profile = setProfileProperties(profile, update);
+
+ Platform platform = profile.newPlatform();
+ setPlatformProperty(platform);
+
+ Runtime runtime = profile.newRuntime();
+ runtime = setRuntimeProperties(runtime);
+
+ Group accessPoints = profile.accessPoints();
+ AccessPoint accessPoint = accessPoints.add();
+ setAccessPointProperties(accessPoint, update);
return serviceEndpoint;
}
- public CatalogueConfiguration createOrUpdate() {
- ServiceEndpoint serviceEndpoint = getServiceEndpoint();
-
+ public CatalogueConfiguration createOnIS(ServiceEndpoint serviceEndpoint) throws Exception {
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
-
- if(serviceEndpoint!=null) {
- // It's an update
- String id = serviceEndpoint.id();
- if(catalogueConfiguration.getID().compareTo(id)!=0) {
- catalogueConfiguration.setID(id);
- }
- serviceEndpoint = manageServiceEndpoint(serviceEndpoint);
- registryPublisher.update(serviceEndpoint);
- }else {
- // It's a create
- String id = catalogueConfiguration.getID();
- if(id==null || id.compareTo("")==0) {
- id = UUID.randomUUID().toString();
- }
-
- serviceEndpoint = new ServiceEndpoint();
- serviceEndpoint = manageServiceEndpoint(serviceEndpoint);
- serviceEndpoint.setId(id);
- registryPublisher.create(serviceEndpoint);
+ String id = catalogueConfiguration.getID();
+ if(id==null || id.compareTo("")==0) {
+ id = UUID.randomUUID().toString();
+ catalogueConfiguration.setID(id);
+ }
+ serviceEndpoint = createServiceEndpoint(serviceEndpoint);
+ registryPublisher.create(serviceEndpoint);
+ return catalogueConfiguration;
+ }
+
+ public CatalogueConfiguration updateOnIS(ServiceEndpoint serviceEndpoint) throws Exception {
+ RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
+ String id = serviceEndpoint.id();
+ if(catalogueConfiguration.getID().compareTo(id)!=0) {
+ catalogueConfiguration.setID(id);
}
+ serviceEndpoint = createServiceEndpoint(serviceEndpoint);
+ registryPublisher.update(serviceEndpoint);
+ return catalogueConfiguration;
+ }
+
+ public CatalogueConfiguration createOrUpdateOnIS() throws Exception {
+ ServiceEndpoint serviceEndpoint = getServiceEndpoint();
+ if(serviceEndpoint!=null) {
+ // It's an update
+ updateOnIS(serviceEndpoint);
+ }else {
+ // It's a create
+ createOnIS(serviceEndpoint);
+ }
return catalogueConfiguration;
}
diff --git a/src/main/java/org/gcube/gcat/configuration/Version.java b/src/main/java/org/gcube/gcat/configuration/Version.java
new file mode 100644
index 0000000..de35bf6
--- /dev/null
+++ b/src/main/java/org/gcube/gcat/configuration/Version.java
@@ -0,0 +1,123 @@
+package org.gcube.gcat.configuration;
+
+import java.util.regex.Pattern;
+
+/**
+ * @author Luca Frosini (ISTI - CNR)
+ */
+public class Version implements Comparable {
+
+ /**
+ * 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,}))$";
+
+ private final static Pattern VERSION_PATTERN;
+
+ static {
+ VERSION_PATTERN = Pattern.compile(VERSION_REGEX);
+ }
+
+ protected int major;
+ protected int minor;
+ protected int revision;
+
+ protected Version(){}
+
+ public Version(String version) {
+ setVersion(version);
+ }
+
+ public Version(int major, int minor, int revision) {
+ this.major = major;
+ this.minor = minor;
+ this.revision = revision;
+ }
+
+ public void setVersion(String version) {
+ if(!VERSION_PATTERN.matcher(version).find()) {
+ throw new RuntimeException("The provided version (i.e. " + version + ") MUST comply with the regex " + VERSION_REGEX);
+ }
+ String[] parts = version.split("\\.");
+ this.major = Integer.valueOf(parts[0]);
+ this.minor = Integer.valueOf(parts[1]);
+ this.revision = Integer.valueOf(parts[2]);
+ }
+
+ public int getMajor() {
+ return major;
+ }
+
+ protected void setMajor(int major) {
+ this.major = major;
+ }
+
+ public int getMinor() {
+ return minor;
+ }
+
+ protected void setMinor(int minor) {
+ this.minor = minor;
+ }
+
+ public int getRevision() {
+ return revision;
+ }
+
+ protected void setRevision(int revision) {
+ this.revision = revision;
+ }
+
+ @Override
+ public String toString() {
+ return major + "." + minor + "." + revision;
+ }
+ @Override
+ public int compareTo(Version other) {
+ if(other == null) {
+ return 1;
+ }
+
+ int compare = Integer.compare(major, other.major);
+ if(compare!=0) {
+ return compare;
+ }
+
+ compare = Integer.compare(minor, other.minor);
+ if(compare!=0) {
+ return compare;
+ }
+
+ compare = Integer.compare(revision, other.revision);
+ return compare;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + major;
+ result = prime * result + minor;
+ result = prime * result + revision;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Version other = (Version) obj;
+ if (major != other.major)
+ return false;
+ if (minor != other.minor)
+ return false;
+ if (revision != other.revision)
+ return false;
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CatalogueConfigurationFactory.java b/src/main/java/org/gcube/gcat/persistence/ckan/CatalogueConfigurationFactory.java
index e4d1c2e..9da5593 100644
--- a/src/main/java/org/gcube/gcat/persistence/ckan/CatalogueConfigurationFactory.java
+++ b/src/main/java/org/gcube/gcat/persistence/ckan/CatalogueConfigurationFactory.java
@@ -48,11 +48,11 @@ public class CatalogueConfigurationFactory {
gCoreISConfigurationProxy.delete();
}
- public synchronized static CatalogueConfiguration createOrUpdate(CatalogueConfiguration catalogueConfiguration) {
+ public synchronized static CatalogueConfiguration createOrUpdate(CatalogueConfiguration catalogueConfiguration) throws Exception {
String context = SecretManager.instance.get().getContext();
catalogueConfigurations.remove(context);
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context, catalogueConfiguration);
- catalogueConfiguration = gCoreISConfigurationProxy.createOrUpdate();
+ catalogueConfiguration = gCoreISConfigurationProxy.createOrUpdateOnIS();
catalogueConfigurations.put(context, catalogueConfiguration);
return catalogueConfiguration;
}
diff --git a/src/test/java/org/gcube/gcat/configuration/GCoreISConfigurationProxyTest.java b/src/test/java/org/gcube/gcat/configuration/GCoreISConfigurationProxyTest.java
index b6a9ea4..b64518c 100644
--- a/src/test/java/org/gcube/gcat/configuration/GCoreISConfigurationProxyTest.java
+++ b/src/test/java/org/gcube/gcat/configuration/GCoreISConfigurationProxyTest.java
@@ -30,7 +30,7 @@ public class GCoreISConfigurationProxyTest extends ContextTest {
ContextTest.setContextByName("/gcube/devNext/NextNext");
String context = SecretManager.instance.get().getContext();
GCoreISConfigurationProxy gCoreISConfigurationProxy = new GCoreISConfigurationProxy(context);
- Set organizations = gCoreISConfigurationProxy.getSupportedOrganizationsFromIS();
+ Set organizations = gCoreISConfigurationProxy.getSupportedOrganizationsFromGenericResource();
Assert.assertTrue(organizations.size()>0);
}