From 7d6de07bacdd568b044c31d90879247ecb4f9794 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 15 Feb 2022 21:19:29 +0100 Subject: [PATCH] Added support for configuration management --- pom.xml | 4 + .../org/gcube/gcat/api/GCatConstants.java | 1 - .../configuration/CatalogueConfiguration.java | 187 ++++++++++++++++++ .../gcat/api/interfaces/Configuration.java | 26 +++ .../java/org/gcube/gcat/api/roles/Role.java | 4 +- 5 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/gcube/gcat/api/configuration/CatalogueConfiguration.java create mode 100644 src/main/java/org/gcube/gcat/api/interfaces/Configuration.java diff --git a/pom.xml b/pom.xml index 7025cbb..cb5aceb 100644 --- a/pom.xml +++ b/pom.xml @@ -48,5 +48,9 @@ org.gcube.common gcube-jackson-databind + + org.gcube.core + common-scope + \ No newline at end of file diff --git a/src/main/java/org/gcube/gcat/api/GCatConstants.java b/src/main/java/org/gcube/gcat/api/GCatConstants.java index 16a376b..7e52480 100644 --- a/src/main/java/org/gcube/gcat/api/GCatConstants.java +++ b/src/main/java/org/gcube/gcat/api/GCatConstants.java @@ -26,7 +26,6 @@ public class GCatConstants { public static final String REFER_ONLY_RESOURCE_QUERY_PARAMETER = "refers_only"; - public static final String ORGANIZATION_FILTER_TEMPLATE = ORGANIZATION_PARAMETER + ":%s"; } diff --git a/src/main/java/org/gcube/gcat/api/configuration/CatalogueConfiguration.java b/src/main/java/org/gcube/gcat/api/configuration/CatalogueConfiguration.java new file mode 100644 index 0000000..e94cb02 --- /dev/null +++ b/src/main/java/org/gcube/gcat/api/configuration/CatalogueConfiguration.java @@ -0,0 +1,187 @@ +package org.gcube.gcat.api.configuration; + +import java.util.HashSet; +import java.util.Set; + +import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore; +import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; +import org.gcube.com.fasterxml.jackson.annotation.JsonSetter; +import org.gcube.com.fasterxml.jackson.core.JsonProcessingException; +import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; +import org.gcube.com.fasterxml.jackson.databind.node.ObjectNode; +import org.gcube.common.scope.impl.ScopeBean; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class CatalogueConfiguration { + + public static final String CONTEXT_KEY = "context"; + public static final String CKAN_URL_KEY = "ckanURL"; + public static final String SOLR_URL_KEY = "solrURL"; + + protected String id; + + protected String context; + protected ScopeBean scopeBean; + protected String defaultOrganization; + protected Set supportedOrganizations; + + protected String ckanURL; + protected String sysAdminToken; + + protected String solrURL; + + protected boolean socialPostEnabled; + protected boolean notificationToUsersEnabled; + + protected boolean moderationEnabled; + + private ObjectMapper mapper; + + /* + * Return the CKAN organization name using the current context name + */ + public static String getOrganizationName(String context) { + ScopeBean scopeBean = new ScopeBean(context); + return getOrganizationName(scopeBean); + } + + public static String getOrganizationName(ScopeBean scopeBean) { + String contextName = scopeBean.name(); + return contextName.toLowerCase().replace(" ", "_"); + } + + private CatalogueConfiguration() { + this.supportedOrganizations = new HashSet<>(); + + /* CKAN URL and sysAdminToken can only be retrieved from the IS*/ + this.ckanURL = null; + this.sysAdminToken = null; + + this.socialPostEnabled = true; // default is true + this.notificationToUsersEnabled = false; // default is false + + this.moderationEnabled = false; // default is false + } + + public CatalogueConfiguration(String context) { + this(); + setContext(context); + this.defaultOrganization = CatalogueConfiguration.getOrganizationName(context); + this.supportedOrganizations.add(defaultOrganization); + } + + @JsonProperty(value = CKAN_URL_KEY) + public String getCkanURL() { + return ckanURL; + } + + public void setCkanURL(String ckanURL) { + this.ckanURL = ckanURL; + } + + @JsonIgnore + public String getSysAdminToken() { + return sysAdminToken; + } + + public void setSysAdminToken(String sysAdminToken) { + this.sysAdminToken = sysAdminToken; + } + + @JsonProperty(value = SOLR_URL_KEY) + public String getSolrURL() { + return solrURL; + } + + public void setSolrURL(String solrURL) { + this.solrURL = solrURL; + } + + public boolean isSocialPostEnabled() { + return socialPostEnabled; + } + + public void setSocialPostEnabled(boolean socialPostEnabled) { + this.socialPostEnabled = socialPostEnabled; + } + + public boolean isNotificationToUsersEnabled() { + return notificationToUsersEnabled; + } + + public void setNotificationToUsersEnabled(boolean notificationToUsersEnabled) { + this.notificationToUsersEnabled = notificationToUsersEnabled; + } + + public boolean isModerationEnabled() { + return moderationEnabled; + } + + public void setModerationEnabled(boolean moderationEnabled) { + this.moderationEnabled = moderationEnabled; + } + + @JsonProperty(value = CONTEXT_KEY) + public String getContext() { + return context; + } + + @JsonSetter + private void setContext(String context) { + this.context = context; + this.scopeBean = new ScopeBean(context); + } + + public String getDefaultOrganization() { + if(defaultOrganization == null) { + defaultOrganization = CatalogueConfiguration.getOrganizationName(context); + } + return defaultOrganization; + } + + public void setDefaultOrganization(String defaultOrganization) { + this.defaultOrganization = defaultOrganization; + } + + public Set getSupportedOrganizations() { + if(supportedOrganizations.isEmpty()) { + supportedOrganizations.add(getDefaultOrganization()); + } + return supportedOrganizations; + } + + public void setSupportedOrganizations(Set supportedOrganizations) { + this.supportedOrganizations = supportedOrganizations; + } + + public String getID() { + return id; + } + + public void setID(String id) { + this.id = id; + } + + @JsonIgnore + public ScopeBean getScopeBean() { + return scopeBean; + } + + public ObjectNode toObjetNode() throws JsonProcessingException { + if(mapper==null) { + mapper = new ObjectMapper(); + } + return mapper.valueToTree(this); + } + + public String toJsonString() throws JsonProcessingException { + if(mapper==null) { + mapper = new ObjectMapper(); + } + return mapper.writeValueAsString(this); + } + + +} diff --git a/src/main/java/org/gcube/gcat/api/interfaces/Configuration.java b/src/main/java/org/gcube/gcat/api/interfaces/Configuration.java new file mode 100644 index 0000000..4356895 --- /dev/null +++ b/src/main/java/org/gcube/gcat/api/interfaces/Configuration.java @@ -0,0 +1,26 @@ +package org.gcube.gcat.api.interfaces; + +import javax.xml.ws.WebServiceException; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public interface Configuration { + + public static final String CONFIGURATION = "configuration"; + + public static final String CURRENT_CONTEXT_PATH_PARAMETER = "CURRENT_CONTEXT"; + + public C create(String json) throws WebServiceException; + + public String read() throws WebServiceException ; + + public String update(String json) throws WebServiceException; + + public String patch(String json) throws WebServiceException; + + public D delete() throws WebServiceException; + + public D purge() throws WebServiceException; + +} diff --git a/src/main/java/org/gcube/gcat/api/roles/Role.java b/src/main/java/org/gcube/gcat/api/roles/Role.java index 764d259..30bc75f 100644 --- a/src/main/java/org/gcube/gcat/api/roles/Role.java +++ b/src/main/java/org/gcube/gcat/api/roles/Role.java @@ -10,11 +10,13 @@ public enum Role { MEMBER(Role.CATALOGUE_MEMBER, "member"), EDITOR(Role.CATALOGUE_EDITOR, "editor"), - ADMIN(Role.CATALOGUE_ADMIN, "admin"); + ADMIN(Role.CATALOGUE_ADMIN, "admin"), + MANAGER(Role.CATALOGUE_MANAGER, "admin"); private static final String CATALOGUE_ADMIN = "Catalogue-Admin"; private static final String CATALOGUE_EDITOR = "Catalogue-Editor"; private static final String CATALOGUE_MEMBER = "Catalogue-Member"; + private static final String CATALOGUE_MANAGER = "Catalogue-Manager"; private final String portalRole; private final String ckanRole;