This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463-2 in repository observe. See http://git.codelutin.com/observe.git commit a396ef28f522416e07f70030055f9a3b1833cedc Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Sep 4 09:20:49 2015 +0200 Changement de l'API de DataSourceService pour quelle renvoie le résultat de la connexion à la source de données --- .../ObserveWebApplicationConfiguration.java | 7 ++++ .../ObserveWebApplicationConfigurationOption.java | 2 + .../controller/v1/DataSourceServiceController.java | 43 ++++++++++++++++++---- .../ObserveWebSecurityApplicationContext.java | 21 ++++++++++- .../services/service/DataSourceService.java | 5 ++- .../ObserveDataSourceConnectionRest.java | 14 +++---- .../ObserveDataSourceConnectionTopia.java | 4 +- .../ObserveDataSourceConfigurationMainFactory.java | 9 ++--- .../services/service/DataSourceServiceTopia.java | 28 +++++++++++++- 9 files changed, 103 insertions(+), 30 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java index 794f34d..a7c9633 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfiguration.java @@ -15,6 +15,7 @@ import org.nuiton.config.ArgumentsParserException; import java.io.BufferedReader; import java.io.File; import java.io.IOException; +import java.net.URL; import java.nio.file.Files; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; @@ -83,6 +84,12 @@ public class ObserveWebApplicationConfiguration { public String getAdminApiKey() { return applicationConfig.getOption(ObserveWebApplicationConfigurationOption.ADMIN_API_KEY.getKey()); } + + public URL getApiUrl() { + return applicationConfig.getOptionAsURL(ObserveWebApplicationConfigurationOption.API_URL.getKey()); + } + + public void init(String... args) { if (log.isInfoEnabled()) { diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfigurationOption.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfigurationOption.java index 3783ac2..a904603 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfigurationOption.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/configuration/ObserveWebApplicationConfigurationOption.java @@ -7,6 +7,7 @@ import org.nuiton.config.ConfigOptionDef; import org.nuiton.util.version.Version; import java.io.File; +import java.net.URL; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -26,6 +27,7 @@ public enum ObserveWebApplicationConfigurationOption implements ConfigOptionDef BUILD_DATE("observeweb.build.date", n("observeweb.build.date.description"), "", String.class), BUILD_NUMBER("observeweb.build.number", n("observeweb.build.number.description"), "", String.class), ADMIN_API_KEY("observeweb.adminApiKey", n("observeweb.adminApiKey.description"), "changeme", String.class), + API_URL("observeweb.apiUrl", n("observeweb.apiUrl.description"), "http://localhost:8080/observeweb/api/v1", URL.class), DEV_MODE("observeweb.devMode", n("observeweb.devMode.description"), "true", boolean.class), BASE_DIRECTORY("observeweb.baseDirectory", n("observeweb.baseDirectory.description"), "/var/local/observeweb", File.class), diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index 7de27ab..745c66e 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -3,7 +3,11 @@ package fr.ird.observe.application.web.controller.v1; import com.google.common.base.Optional; import fr.ird.observe.application.web.request.ObserveWebRequestContext; import fr.ird.observe.application.web.security.DataSourceConfigurationAlreadyRegistredException; +import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationContext; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; +import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.configuration.ObserveDataSourceConnectionRest; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -45,20 +49,24 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport } @Override - public void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { + public ObserveDataSourceConnection create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { - service.create(dataSourceCreateConfiguration); + ObserveDataSourceConnection observeDataSourceConnection = service.create(dataSourceCreateConfiguration); - registerDataSourceConfiguration(); + String authenticationToken = registerDataSourceConfiguration(); + ObserveDataSourceConnection dataSourceConnection = createDataSourceConnection(observeDataSourceConnection, authenticationToken); + return dataSourceConnection; } @Override - public void open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { + public ObserveDataSourceConnection open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { - service.open(); + ObserveDataSourceConnection observeDataSourceConnection = service.open(); - registerDataSourceConfiguration(); + String authenticationToken = registerDataSourceConfiguration(); + ObserveDataSourceConnection dataSourceConnection = createDataSourceConnection(observeDataSourceConnection, authenticationToken); + return dataSourceConnection; } @@ -83,7 +91,7 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport service.destroy(); } - protected void registerDataSourceConfiguration() { + protected String registerDataSourceConfiguration() { ObserveWebRequestContext requestContext = getRequestContext(); @@ -98,7 +106,26 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport throw new RuntimeException("DataSource already registred", e); } - getContext().getResponse().addHeader("authenticationToken", authenticationToken); + return authenticationToken; + + } + + protected ObserveDataSourceConnection createDataSourceConnection(ObserveDataSourceConnection observeDataSourceConnection, String authenticationToken) { + + ObserveWebSecurityApplicationContext securityApplicationContext = getSecurityApplicationContext(); + + ObserveDataSourceConfigurationRestAuthenticated dataSourceConfiguration = + securityApplicationContext.createDataSourceConnection(getApplicationConfiguration().getApiUrl(), + authenticationToken); + + ObserveDataSourceConnectionRest dataSourceConnection = new ObserveDataSourceConnectionRest( + dataSourceConfiguration, + observeDataSourceConnection.canReadReferential(), + observeDataSourceConnection.canWriteReferential(), + observeDataSourceConnection.canReadData(), + observeDataSourceConnection.canWriteData()); + + return dataSourceConnection; } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java index 260a437..a659779 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/security/ObserveWebSecurityApplicationContext.java @@ -11,10 +11,12 @@ import fr.ird.observe.application.web.configuration.user.ObserveWebUserPermissio import fr.ird.observe.application.web.configuration.user.ObserveWebUsers; import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.Closeable; +import java.net.URL; import java.util.Objects; /** @@ -35,6 +37,11 @@ public class ObserveWebSecurityApplicationContext implements Closeable { protected final ObserveWebSecurityAuthenticationTokenCache authenticateCache; /** + * L'usine de configuration de sources de données. + */ + protected final ObserveDataSourceConfigurationMainFactory dataSourceConfigurationFactory; + + /** * Le cache des configurations disponibles pour les couple (utilisateur#base) connus du système. * * @see #getUserKey(String, String) @@ -54,6 +61,17 @@ public class ObserveWebSecurityApplicationContext implements Closeable { public ObserveWebSecurityApplicationContext() { this.authenticateCache = new ObserveWebSecurityAuthenticationTokenCache(); + this.dataSourceConfigurationFactory = new ObserveDataSourceConfigurationMainFactory(); + } + + public ObserveDataSourceConfigurationRestAuthenticated createDataSourceConnection(URL apiUrl, String authenticationToken) { + ObserveDataSourceConfigurationRestAuthenticated dataSourceConfiguration = + dataSourceConfigurationFactory.createObserveDataSourceConfigurationRestAuthenticated( + "TODO", //FIXME + apiUrl, + authenticationToken + ); + return dataSourceConfiguration; } public synchronized void init(ObserveWebDatabases<?> databases, ObserveWebUsers<?> users) { @@ -67,7 +85,6 @@ public class ObserveWebSecurityApplicationContext implements Closeable { ImmutableMap.Builder<String, ObserveDataSourceConfiguration> dataSourceConfigurationsCacheBuilder = new ImmutableMap.Builder<>(); - ObserveDataSourceConfigurationMainFactory configurationFactory = new ObserveDataSourceConfigurationMainFactory(); for (ObserveWebUser<?> observeWebUser : users.getUsers()) { for (ObserveWebUserPermission observeWebUserPermission : observeWebUser.getPermissions()) { @@ -89,7 +106,7 @@ public class ObserveWebSecurityApplicationContext implements Closeable { String userKey = getUserKey(observeWebUser.getLogin(), databaseName); // Create DataSourceConfiguration - ObserveDataSourceConfiguration configuration = configurationFactory.createObserveDataSourceConfigurationTopiaPG( + ObserveDataSourceConfiguration configuration = dataSourceConfigurationFactory.createObserveDataSourceConfigurationTopiaPG( userKey, jdbcUrl, login, diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index 319d81e..a0e9a5e 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -1,6 +1,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -20,10 +21,10 @@ public interface DataSourceService extends ObserveService { boolean canConnect(); @NoDataAccess - void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException; + ObserveDataSourceConnection create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException; @NoDataAccess - void open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; + ObserveDataSourceConnection open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException; void close(); diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionRest.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionRest.java index bd02e75..9948a4f 100644 --- a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionRest.java +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionRest.java @@ -7,19 +7,15 @@ package fr.ird.observe.services.configuration; */ public class ObserveDataSourceConnectionRest extends ObserveDataSourceConnectionSupport<ObserveDataSourceConfigurationRestAuthenticated> { - /** - * Le jeton d'authentification. - */ - protected final String authenticationToken; - public ObserveDataSourceConnectionRest(ObserveDataSourceConfigurationRestAuthenticated dataSourceConfiguration, - String authenticationToken, - boolean writeData, boolean readReferential, boolean writeReferential, - boolean readData) { + boolean readData, + boolean writeData) { super(dataSourceConfiguration, readReferential, writeReferential, readData, writeData); - this.authenticationToken = authenticationToken; } + public String getAuthenticationToken() { + return getDataSourceConfiguration().getAuthenticationToken(); + } } diff --git a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionTopia.java b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionTopia.java index b607dee..86385a3 100644 --- a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionTopia.java +++ b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConnectionTopia.java @@ -8,10 +8,10 @@ package fr.ird.observe.services.configuration; public class ObserveDataSourceConnectionTopia extends ObserveDataSourceConnectionSupport<ObserveDataSourceConfigurationTopiaSupport> { public ObserveDataSourceConnectionTopia(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, - boolean writeData, boolean readReferential, boolean writeReferential, - boolean readData) { + boolean readData, + boolean writeData) { super(dataSourceConfiguration, readReferential, writeReferential, readData, writeData); } diff --git a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java index d7e7453..d4ad6a7 100644 --- a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java +++ b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveDataSourceConfigurationMainFactory.java @@ -1,6 +1,5 @@ package fr.ird.observe.services; -import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestAuthenticated; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestNotAuthenticated; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; @@ -16,7 +15,7 @@ import java.net.URL; */ public class ObserveDataSourceConfigurationMainFactory { - public ObserveDataSourceConfiguration createObserveDataSourceConfigurationTopiaPG(String label, + public ObserveDataSourceConfigurationTopiaPG createObserveDataSourceConfigurationTopiaPG(String label, String jdbcUrl, String username, char[] password, @@ -37,7 +36,7 @@ public class ObserveDataSourceConfigurationMainFactory { } - public ObserveDataSourceConfiguration createObserveDataSourceConfigurationTopiaH2(String label, + public ObserveDataSourceConfigurationTopiaH2 createObserveDataSourceConfigurationTopiaH2(String label, File directory, String databaseName, String username, @@ -58,7 +57,7 @@ public class ObserveDataSourceConfigurationMainFactory { } - public ObserveDataSourceConfiguration createObserveDataSourceConfigurationRestNotAuthenticated(String label, + public ObserveDataSourceConfigurationRestNotAuthenticated createObserveDataSourceConfigurationRestNotAuthenticated(String label, URL serverUrl, String login, char... password) { @@ -73,7 +72,7 @@ public class ObserveDataSourceConfigurationMainFactory { } - public ObserveDataSourceConfiguration createObserveDataSourceConfigurationRestAuthenticated(String label, + public ObserveDataSourceConfigurationRestAuthenticated createObserveDataSourceConfigurationRestAuthenticated(String label, URL serverUrl, String authenticationToken) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 077a688..ff22891 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -8,6 +8,7 @@ import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; +import fr.ird.observe.services.configuration.ObserveDataSourceConnectionTopia; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -38,7 +39,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } @Override - public void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { + public ObserveDataSourceConnectionTopia create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { dataSourceCreateConfiguration.validateConfiguration(); @@ -143,10 +144,13 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + //FIXME A remplir apèrs avoir lue les droits sur le schema + return createDataSourceConnection(dataSourceConfiguration); + } @Override - public void open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { + public ObserveDataSourceConnectionTopia open() throws DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException { ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); @@ -159,6 +163,8 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(dataSourceConfiguration); + return createDataSourceConnection(dataSourceConfiguration); + } @@ -203,4 +209,22 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + protected ObserveDataSourceConnectionTopia createDataSourceConnection(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + //FIXME A remplir apèrs avoir lue les droits sur le schema + boolean readReferential = true; + //FIXME A remplir apèrs avoir lue les droits sur le schema + boolean writeReferential = true; + //FIXME A remplir apèrs avoir lue les droits sur le schema + boolean readData = true; + //FIXME A remplir apèrs avoir lue les droits sur le schema + boolean writeData = true; + ObserveDataSourceConnectionTopia dataSourceConnection = new ObserveDataSourceConnectionTopia( + dataSourceConfiguration, + readReferential, + writeReferential, + readData, + writeData); + return dataSourceConnection; + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.