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.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 SYS_ADMIN_TOKEN_KEY = "sysAdminToken"; public static final String SOLR_URL_KEY = "solrURL"; public static final String CKAN_DB_KEY = "ckanDB"; 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; protected CKANDB ckanDB; /* * 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(" ", "_"); } protected 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; } 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; } public CKANDB getCkanDB() { return ckanDB; } public void setCkanDB(CKANDB ckanDB) { this.ckanDB = ckanDB; } @JsonIgnore public ScopeBean getScopeBean() { return scopeBean; } }