diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DatabaseDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DatabaseDefinition.java index 7dbdc0eefff14016f3c9491056e6bc15760556a2..09e105efdfa801b2e4f0d2f596496427d6754f59 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DatabaseDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/DatabaseDefinition.java @@ -19,28 +19,57 @@ package ch.systemsx.cisd.openbis.plugin.query.server; import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; /** - * - * * @author Franz-Josef Elmer */ public class DatabaseDefinition { + private final String key; + private final String label; + + private final String dataSpaceOrNull; + + private final String creatorMinimalRole; + private final DatabaseConfigurationContext configurationContext; - public DatabaseDefinition(String label, DatabaseConfigurationContext configurationContext) + public DatabaseDefinition(DatabaseConfigurationContext configurationContext, String key, + String label, String creatorMinimalRole, String dataSpaceOrNull) { + assert key != null; + assert label != null; + assert creatorMinimalRole != null; + assert configurationContext != null; + this.key = key; this.label = label; + this.dataSpaceOrNull = dataSpaceOrNull; + this.creatorMinimalRole = creatorMinimalRole; this.configurationContext = configurationContext; } + public String getKey() + { + return key; + } + public String getLabel() { return label; } + public String getCreatorMinimalRole() + { + return creatorMinimalRole; + } + + public String tryGetDataSpace() + { + return dataSpaceOrNull; + } + public DatabaseConfigurationContext getConfigurationContext() { return configurationContext; } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java index bf9859ad46077f1bb921f93f6964b58f91966109..bc5e44c4ba1af448a7b11c59f2cd0c0e01b8d2f5 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java @@ -30,8 +30,9 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.spring.ExposablePropertyPaceholderConfigurer; import ch.systemsx.cisd.common.spring.IInvocationLoggerContext; import ch.systemsx.cisd.common.utilities.BeanUtils; -import ch.systemsx.cisd.common.utilities.ExtendedProperties; +import ch.systemsx.cisd.common.utilities.PropertyParametersUtil; import ch.systemsx.cisd.common.utilities.PropertyUtils; +import ch.systemsx.cisd.common.utilities.PropertyParametersUtil.SectionProperties; import ch.systemsx.cisd.dbmigration.DatabaseConfigurationContext; import ch.systemsx.cisd.openbis.generic.server.AbstractServer; import ch.systemsx.cisd.openbis.generic.server.business.bo.DataAccessExceptionTranslator; @@ -57,9 +58,16 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.translator.QueryTranslator; @Component(ResourceNames.QUERY_PLUGIN_SERVER) public class QueryServer extends AbstractServer<IQueryServer> implements IQueryServer { - static final String DATABASE_PROPERTIES_PREFIX = "query-database."; + /** property with database keys/names separated by delimiter */ + private static final String DATABASE_KEYS = "query-databases"; - static final String LABEL_PROPERTY_KEY = "label"; + private static final String LABEL_PROPERTY_KEY = "label"; + + private static final String CREATOR_MINIMAL_ROLE_KEY = "creator-minimal-role"; + + private static final String DEFAULT_CREATOR_MINIMAL_ROLE = "POWER_USER"; + + private static final String DATA_SPACE_KEY = "data-space"; @Resource(name = "propertyConfigurer") private ExposablePropertyPaceholderConfigurer configurer; @@ -221,17 +229,34 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS if (databaseDefinition == null) { Properties resolvedProps = configurer.getResolvedProps(); - ExtendedProperties databaseProperties = - ExtendedProperties.getSubset(resolvedProps, - DATABASE_PROPERTIES_PREFIX, true); - if (databaseProperties.isEmpty() == false) + SectionProperties[] sectionsProperties = + PropertyParametersUtil.extractSectionProperties(resolvedProps, DATABASE_KEYS, + true); + DatabaseDefinition[] definitions = new DatabaseDefinition[sectionsProperties.length]; + for (int i = 0; i < definitions.length; i++) { - DatabaseConfigurationContext configurationContext = + final String databaseKey = sectionsProperties[i].getKey(); + final Properties databaseProperties = sectionsProperties[i].getProperties(); + + final DatabaseConfigurationContext configurationContext = BeanUtils .createBean(DatabaseConfigurationContext.class, databaseProperties); - databaseDefinition = - new DatabaseDefinition(PropertyUtils.getMandatoryProperty( - databaseProperties, LABEL_PROPERTY_KEY), configurationContext); + final String label = + PropertyUtils.getMandatoryProperty(databaseProperties, LABEL_PROPERTY_KEY); + final String creatorMinimalRole = + PropertyUtils.getProperty(databaseProperties, CREATOR_MINIMAL_ROLE_KEY, + DEFAULT_CREATOR_MINIMAL_ROLE); + final String dataSpaceOrNull = + PropertyUtils.getProperty(databaseProperties, DATA_SPACE_KEY); + + definitions[i] = + new DatabaseDefinition(configurationContext, databaseKey, label, + creatorMinimalRole, dataSpaceOrNull); + } + if (definitions.length > 0) + { + databaseDefinition = definitions[0]; + // FIXME add support for multiple DBs } } return databaseDefinition; diff --git a/openbis/source/java/service.properties b/openbis/source/java/service.properties index 9bde1d43417ca3856f9f247e88cf1f9202898ec0..9ca119fffe4ddfce644c4bd38f01f7d434b32bd4 100644 --- a/openbis/source/java/service.properties +++ b/openbis/source/java/service.properties @@ -74,10 +74,13 @@ onlinehelp.generic.page-template = https://wiki-bsse.ethz.ch/pages/createpage.ac #onlinehelp.specific.root-url = https://wiki-bsse.ethz.ch/display/CISDDoc/OnlineHelp #onlinehelp.specific.page-template = https://wiki-bsse.ethz.ch/pages/createpage.action?spaceKey=CISDDoc&title=${title}&linkCreation=true&fromPageId=40633829 -query-database.label = openBIS meta data -query-database.databaseEngineCode = ${database.engine} -query-database.basicDatabaseName = openbis -query-database.databaseKind = ${database.kind} +# Database Configurations for Query module +query-databases = 1 + +1.label = openBIS meta data +1.databaseEngineCode = ${database.engine} +1.basicDatabaseName = openbis +1.databaseKind = ${database.kind} # Comma-separated list of host names and IP addresses of clients on which an INSTANCE_ADMIN # user is allowed to change identity