This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 177d73f35d34e3f3aad8be4f0c685830b4f71ff3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Sep 1 00:12:33 2015 +0200 Suppression du ObserveServiceContext et remplacement par un object qui permet d'initialiser le service --- .../web/ObserveWebApplicationContext.java | 6 +- .../application/web/ObserveWebMotionFilter.java | 22 ++++++- .../v1/ObserveServiceControllerSupport.java | 6 -- .../web/request/ObserveWebRequestContext.java | 31 +++++++++- .../fr/ird/observe/services/ObserveService.java | 2 - .../services/ObserveServiceApplicationContext.java | 31 ---------- .../observe/services/ObserveServiceContext.java | 38 ------------ .../observe/services/ObserveServiceFactory.java | 2 +- .../services/ObserveServiceFactorySupport.java | 11 ---- .../services/ObserveServiceInitializerContext.java | 69 ++++++++++++++++++++++ .../ObserveDataSourceConfigurationRest.java | 2 +- .../services/ObserveServiceFactoryRest.java | 6 +- .../ObserveDataSourceConfigurationMainFactory.java | 1 - .../services/ObserveServiceMainFactory.java | 6 +- .../services/ObserveServiceContextTopia.java | 62 ++++++++++--------- .../services/ObserveServiceFactoryTopia.java | 21 +++++-- .../ird/observe/services/ObserveServiceTopia.java | 8 +-- .../services/ApplicationContextResource.java | 15 ++--- .../services/ObserveServiceContextTopiaTaiste.java | 1 + 19 files changed, 194 insertions(+), 146 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java index 48d38c8..569520d 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationContext.java @@ -16,8 +16,8 @@ import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationCont import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceApplicationContext; import fr.ird.observe.services.ObserveServiceFactory; +import fr.ird.observe.services.ObserveServiceInitializerContext; import fr.ird.observe.services.ObserveServiceMainFactory; -import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; import org.debux.webmotion.server.call.HttpContext; @@ -120,9 +120,9 @@ public class ObserveWebApplicationContext implements Closeable { return users; } - public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { ObserveServiceFactory mainServiceFactory = serviceApplicationContext.getMainServiceFactory(); - return mainServiceFactory.newService(serviceApplicationContext, dataSourceConfiguration, serviceType); + return mainServiceFactory.newService(serviceApplicationContext, observeServiceInitializerContext, serviceType); } } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java index fd319a3..8678455 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebMotionFilter.java @@ -10,11 +10,14 @@ import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationCont import fr.ird.observe.application.web.security.UnknownObserveWebUserException; import fr.ird.observe.application.web.security.UnknownObserveWebUserForDatabaseException; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.apache.commons.lang3.StringUtils; import org.debux.webmotion.server.WebMotionFilter; import org.debux.webmotion.server.call.HttpContext; +import org.nuiton.converter.ConverterUtil; import javax.servlet.http.HttpServletRequest; +import java.util.Locale; /** * @author Tony Chemit - chemit@codelutin.com @@ -29,7 +32,7 @@ public class ObserveWebMotionFilter extends WebMotionFilter { ObserveWebRequestSecurityContext securityContext = createSecurityContext(applicationContext, request); - ObserveWebRequestContext requestContext = new ObserveWebRequestContext(applicationContext, securityContext); + ObserveWebRequestContext requestContext = createObserveWebRequestContext(applicationContext, securityContext, request); ObserveWebRequestContext.setRequestContext(context, requestContext); @@ -37,6 +40,23 @@ public class ObserveWebMotionFilter extends WebMotionFilter { } + protected ObserveWebRequestContext createObserveWebRequestContext(ObserveWebApplicationContext applicationContext, ObserveWebRequestSecurityContext securityContext, HttpServletRequest request) { + + Locale applicationLocale = null; + String applicationLocaleStr = getRequestParameterValueOrNull(request, "applicationLocale"); + if (applicationLocaleStr != null) { + applicationLocale = ConverterUtil.convert(Locale.class, applicationLocaleStr); + } + + ReferentialLocale referentialLocale = null; + String referentialLocaleStr = getRequestParameterValueOrNull(request, "referentialLocale"); + if (referentialLocaleStr != null) { + Locale referentialLoca = ConverterUtil.convert(Locale.class, referentialLocaleStr); + referentialLocale = ReferentialLocale.valueOf(referentialLoca); + } + return new ObserveWebRequestContext(applicationContext, securityContext, applicationLocale, referentialLocale); + } + protected ObserveWebRequestSecurityContext createSecurityContext(ObserveWebApplicationContext applicationContext, HttpServletRequest request) throws InvalidAuthenticationTokenException, UnknownObserveWebUserForDatabaseException, BadObserveWebUserPasswordException, DataSourceConfigurationAlreadyRegistredException, UnknownObserveWebUserException { ObserveWebRequestSecurityContext securityContext = null; diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ObserveServiceControllerSupport.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ObserveServiceControllerSupport.java index 68d3fdf..786c8a2 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ObserveServiceControllerSupport.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/ObserveServiceControllerSupport.java @@ -2,7 +2,6 @@ package fr.ird.observe.application.web.controller.v1; import fr.ird.observe.application.web.controller.ObserveWebMotionController; import fr.ird.observe.services.ObserveService; -import fr.ird.observe.services.ObserveServiceContext; import org.debux.webmotion.server.WebMotionContextable; /** @@ -26,9 +25,4 @@ public abstract class ObserveServiceControllerSupport<S extends ObserveService> service = newService(serviceType); } - @Override - public void setServiceContext(ObserveServiceContext serviceContext) { - // Non utilisé ici - } - } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/request/ObserveWebRequestContext.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/request/ObserveWebRequestContext.java index 1875c18..f72a5dd 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/request/ObserveWebRequestContext.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/request/ObserveWebRequestContext.java @@ -4,9 +4,13 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import fr.ird.observe.application.web.ObserveWebApplicationContext; import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.ObserveServiceInitializerContext; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.debux.webmotion.server.call.HttpContext; +import java.util.Locale; + /** * Created on 4/25/14. * @@ -30,23 +34,44 @@ public class ObserveWebRequestContext { protected final ObserveWebApplicationContext applicationContext; + protected final Locale applicationLocale; + + protected final ReferentialLocale referentialLocale; + protected final Optional<ObserveWebRequestSecurityContext> optionalSecurityContext; public ObserveWebRequestContext(ObserveWebApplicationContext applicationContext, - ObserveWebRequestSecurityContext optionalSecurityContext) { + ObserveWebRequestSecurityContext optionalSecurityContext, + Locale applicationLocale, + ReferentialLocale referentialLocale) { this.applicationContext = applicationContext; + this.applicationLocale = applicationLocale; + this.referentialLocale = referentialLocale; this.optionalSecurityContext = Optional.fromNullable(optionalSecurityContext); } + public Locale getApplicationLocale() { + return applicationLocale; + } + + public ReferentialLocale getReferentialLocale() { + return referentialLocale; + } + public ObserveWebApplicationContext getApplicationContext() { return applicationContext; } public <S extends ObserveService> S newService(Class<S> serviceType) { + checkSecurityContextIsPresent(); + ObserveServiceInitializerContext observeServiceInitializerContext = new ObserveServiceInitializerContext(); + observeServiceInitializerContext.setApplicationLocale(applicationLocale); + observeServiceInitializerContext.setReferentialLocale(referentialLocale); + observeServiceInitializerContext.setDataSourceConfiguration(getSecurityContext().getDataSourceConfiguration()); + - checkIsAuthenticated(); - S service = applicationContext.newService(getSecurityContext().getDataSourceConfiguration(), serviceType); + S service = applicationContext.newService(observeServiceInitializerContext, serviceType); return service; } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveService.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveService.java index e8a8316..13ab64c 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveService.java @@ -7,6 +7,4 @@ package fr.ird.observe.services; */ public interface ObserveService { - void setServiceContext(ObserveServiceContext serviceContext); - } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceApplicationContext.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceApplicationContext.java index 791dbc4..ea1b1bf 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceApplicationContext.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceApplicationContext.java @@ -1,7 +1,5 @@ package fr.ird.observe.services; -import fr.ird.observe.services.dto.constants.ReferentialLocale; - import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -10,7 +8,6 @@ import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; -import java.util.Locale; import java.util.Set; /** @@ -21,18 +18,6 @@ import java.util.Set; public class ObserveServiceApplicationContext implements Closeable { /** - * FIXME peut-être pas le bon endroit, car la locale est en scope request. - * - * La locale de l'application. - */ - protected Locale applicationLocale; - - /** - * La locale du référentiel. - */ - protected ReferentialLocale referentialLocale; - - /** * L'usine de services principale (celle au dessus de toutes les usines d'implantation). */ protected ObserveServiceFactory mainServiceFactory; @@ -42,22 +27,6 @@ public class ObserveServiceApplicationContext implements Closeable { */ protected Path temporaryDirectoryRoot; - public Locale getApplicationLocale() { - return applicationLocale; - } - - public void setApplicationLocale(Locale applicationLocale) { - this.applicationLocale = applicationLocale; - } - - public ReferentialLocale getReferentialLocale() { - return referentialLocale; - } - - public void setReferentialLocale(ReferentialLocale referentialLocale) { - this.referentialLocale = referentialLocale; - } - public ObserveServiceFactory getMainServiceFactory() { return mainServiceFactory; } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceContext.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceContext.java deleted file mode 100644 index f811dd6..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceContext.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.ird.observe.services; - -import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; -import fr.ird.observe.services.dto.constants.ReferentialLocale; - -import java.io.File; -import java.io.IOException; -import java.util.Date; -import java.util.Locale; - -/** - * Created on 16/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public interface ObserveServiceContext { - - ReferentialLocale getReferentialLocale(); - - Locale getApplicationLocale(); - - Date now(); - - /** - * Pour créer un service à partir de la data source courante. - */ - <S extends ObserveService> S newService(Class<S> serviceType); - - /** - * Pour créer un service à partir de la data source donnée. - */ - <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType); - - /** - * Pour créer un répertoire temporaire dont le nom commence par le préfixe donné. - */ - File createTemporaryDirectory(String prefix) throws IOException; -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactory.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactory.java index b5ab0e5..b149135 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactory.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactory.java @@ -13,7 +13,7 @@ public interface ObserveServiceFactory extends Closeable { <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType); - <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType); + <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType); @Override void close(); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java index 846ac79..8e5577a 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceFactorySupport.java @@ -21,16 +21,6 @@ public abstract class ObserveServiceFactorySupport implements ObserveServiceFact } } - protected <S extends ObserveService> S newServiceInstance(Class<S> serviceTypeImpl, ObserveServiceContext serviceContext) { - try { - S service = serviceTypeImpl.newInstance(); - service.setServiceContext(serviceContext); - return service; - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalStateException("Could not create service", e); - } - } - protected static LoadingCache<Class<?>, Class<?>> newServiceImplementationTypesCache(final String suffix) { return CacheBuilder.newBuilder().build(new CacheLoader<Class<?>, Class<?>>() { @@ -46,7 +36,6 @@ public abstract class ObserveServiceFactorySupport implements ObserveServiceFact throw new IllegalStateException("Could not get class: " + fqn, e); } - } }); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializerContext.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializerContext.java new file mode 100644 index 0000000..fbb0389 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializerContext.java @@ -0,0 +1,69 @@ +package fr.ird.observe.services; + +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.dto.constants.ReferentialLocale; + +import java.nio.file.Path; +import java.util.Locale; + +/** + * Objet contentant les infotmations utiles pour créer un nouveau service. + * + * Created on 31/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveServiceInitializerContext { + + /** + * La locale à utiliser pour faire des traductions. + */ + protected Locale applicationLocale; + + /** + * La locale à utiliser pour la source de données. + */ + protected ReferentialLocale referentialLocale; + + /** + * La configuration de la source de données. + */ + protected ObserveDataSourceConfiguration dataSourceConfiguration; + + /** + * Le répertoire où créer les répertoires temporaires. + */ + protected Path temporaryDirectoryRoot; + + public Locale getApplicationLocale() { + return applicationLocale; + } + + public void setApplicationLocale(Locale applicationLocale) { + this.applicationLocale = applicationLocale; + } + + public ReferentialLocale getReferentialLocale() { + return referentialLocale; + } + + public void setReferentialLocale(ReferentialLocale referentialLocale) { + this.referentialLocale = referentialLocale; + } + + public ObserveDataSourceConfiguration getDataSourceConfiguration() { + return dataSourceConfiguration; + } + + public void setDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { + this.dataSourceConfiguration = dataSourceConfiguration; + } + + public Path getTemporaryDirectoryRoot() { + return temporaryDirectoryRoot; + } + + public void setTemporaryDirectoryRoot(Path temporaryDirectoryRoot) { + this.temporaryDirectoryRoot = temporaryDirectoryRoot; + } +} diff --git a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java index 1f637fc..c9625bd 100644 --- a/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java +++ b/observe-services-configuration-rest/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationRest.java @@ -22,7 +22,7 @@ public class ObserveDataSourceConfigurationRest implements ObserveDataSourceConf protected URL serverUrl; /** - * Le token d'authentification. + * Le jeton d'authentification. */ protected String authenticationToken; diff --git a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java index 292c0c9..931cf0e 100644 --- a/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java +++ b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java @@ -44,9 +44,11 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { Preconditions.checkNotNull(applicationContext, "applicationContext can't be null."); + Preconditions.checkNotNull(observeServiceInitializerContext, "observeServiceInitializerContext can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializerContext.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest, "dataSourceConfiguration must be of type ObserveRestClientDataSourceConfiguration"); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); @@ -90,7 +92,7 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { this.serviceClass = serviceClass; this.authenticationToken = authenticationToken; this.gsonSupplier = gsonSupplier; - serviceUrl = serverUrl + "/" + serviceClass.getSimpleName(); + this.serviceUrl = serverUrl + "/" + serviceClass.getSimpleName(); } @Override 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 c5fd02f..6e2b6a8 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 @@ -18,7 +18,6 @@ public class ObserveDataSourceConfigurationMainFactory { result.setPassword(password); result.setUseSsl(useSsl); return result; - } } diff --git a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java index cf860e6..c62d659 100644 --- a/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java +++ b/observe-services-runner/src/main/java/fr/ird/observe/services/ObserveServiceMainFactory.java @@ -35,9 +35,11 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { Preconditions.checkNotNull(applicationContext, "applicationContext can't be null."); + Preconditions.checkNotNull(observeServiceInitializerContext, "observeServiceInitializerContext can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializerContext.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); @@ -48,7 +50,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { log.debug("Using factory: " + factory); } - S service = factory.newService(applicationContext, dataSourceConfiguration, serviceType); + S service = factory.newService(applicationContext, observeServiceInitializerContext, serviceType); if (log.isInfoEnabled()) { log.info("New service created: " + service); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java index cee443b..7310042 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceContextTopia.java @@ -7,6 +7,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopia import fr.ird.observe.services.dto.constants.ReferentialLocale; import java.io.File; +import java.nio.file.Path; import java.util.Date; import java.util.Locale; @@ -15,54 +16,52 @@ import java.util.Locale; * * @author Tony Chemit - chemit@codelutin.com */ -public class ObserveServiceContextTopia implements ObserveServiceContext { +public class ObserveServiceContextTopia { - protected ObserveServiceApplicationContext applicationContext; + protected ObserveServiceInitializerContext observeServiceInitializerContext; protected ObserveServiceFactory serviceFactory; - protected ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration; - protected ObserveTopiaPersistenceContext topiaPersistenceContext; protected ObserveTopiaApplicationContext topiaApplicationContext; + protected ObserveServiceApplicationContext applicationContext; + public ObserveTopiaApplicationContext getTopiaApplicationContext() { return topiaApplicationContext; } - @Override + public Locale getApplicationLocale() { + return observeServiceInitializerContext.getApplicationLocale(); + } + public ReferentialLocale getReferentialLocale() { - return applicationContext.getReferentialLocale(); + return observeServiceInitializerContext.getReferentialLocale(); } - @Override - public Locale getApplicationLocale() { - return applicationContext.getApplicationLocale(); + public Path getTemporaryDirectoryRoot() { + return observeServiceInitializerContext.getTemporaryDirectoryRoot(); } - @Override public Date now() { return new Date(); } - @Override public <S extends ObserveService> S newService(Class<S> serviceType) { - return serviceFactory.newService(applicationContext, dataSourceConfiguration, serviceType); + return serviceFactory.newService(applicationContext, observeServiceInitializerContext, serviceType); } - @Override public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { - return applicationContext.getMainServiceFactory().newService(applicationContext, dataSourceConfiguration, serviceType); - } - - @Override - public File createTemporaryDirectory(String prefix) { - return applicationContext.createTemporaryDirectory(prefix); + ObserveServiceInitializerContext observeServiceInitializerContext = new ObserveServiceInitializerContext(); + observeServiceInitializerContext.setApplicationLocale(this.observeServiceInitializerContext.getApplicationLocale()); + observeServiceInitializerContext.setReferentialLocale(this.observeServiceInitializerContext.getReferentialLocale()); + observeServiceInitializerContext.setDataSourceConfiguration(dataSourceConfiguration); + return applicationContext.getMainServiceFactory().newService(applicationContext, observeServiceInitializerContext, serviceType); } public ObserveDataSourceConfigurationTopiaSupport getDataSourceConfiguration() { - return dataSourceConfiguration; + return (ObserveDataSourceConfigurationTopiaSupport) observeServiceInitializerContext.getDataSourceConfiguration(); } public ObserveTopiaPersistenceContext getTopiaPersistenceContext() { @@ -77,14 +76,6 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { this.topiaApplicationContext = topiaApplicationContext; } - public void setApplicationContext(ObserveServiceApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - public void setDataSourceConfiguration(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - this.dataSourceConfiguration = dataSourceConfiguration; - } - public void setServiceFactory(ObserveServiceFactory serviceFactory) { this.serviceFactory = serviceFactory; } @@ -94,4 +85,19 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { topiaPersistenceContext = null; } + public void setApplicationContext(ObserveServiceApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + public ObserveServiceApplicationContext getApplicationContext() { + return applicationContext; + } + + public File createTemporaryDirectory(String prefix) { + return applicationContext.createTemporaryDirectory(prefix); + } + + public void setObserveServiceInitializerContext(ObserveServiceInitializerContext observeServiceInitializerContext) { + this.observeServiceInitializerContext = observeServiceInitializerContext; + } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java index c25033f..b9345bc 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java @@ -40,17 +40,18 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { Preconditions.checkNotNull(applicationContext, "applicationContext can't be null."); - Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); + Preconditions.checkNotNull(observeServiceInitializerContext, "observeServiceInitializerContext can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializerContext.getDataSourceConfiguration(); Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationTopiaSupport, "dataSourceConfiguration must be of type " + ObserveDataSourceConfigurationTopiaSupport.class.getName()); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); Class<S> serviceTypeImpl = getServiceClassType(serviceTypeCache, serviceType); Preconditions.checkNotNull(serviceTypeImpl, "serviceTypeImpl not found for : " + serviceType.getName()); - ObserveServiceContextTopia serviceContext = createServiceContext(applicationContext, (ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration); + ObserveServiceContextTopia serviceContext = createServiceContext(applicationContext, observeServiceInitializerContext); S service = newServiceInstance(serviceTypeImpl, serviceContext); service = newServiceTransactionalProxy(serviceType, service, serviceContext); @@ -58,18 +59,28 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport { } - protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext) { ObserveServiceContextTopia serviceContext = new ObserveServiceContextTopia(); serviceContext.setApplicationContext(applicationContext); - serviceContext.setDataSourceConfiguration(dataSourceConfiguration); + serviceContext.setObserveServiceInitializerContext(observeServiceInitializerContext); serviceContext.setServiceFactory(this); return serviceContext; } + protected <S extends ObserveService> S newServiceInstance(Class<S> serviceTypeImpl, ObserveServiceContextTopia serviceContext) { + try { + S service = serviceTypeImpl.newInstance(); + ((ObserveServiceTopia) service).setServiceContext(serviceContext); + return service; + } catch (InstantiationException | IllegalAccessException e) { + throw new IllegalStateException("Could not create service", e); + } + } + protected <S extends ObserveService> S newServiceTransactionalProxy(Class<S> serviceType, S service, ObserveServiceContextTopia serviceContext) { ObserveServiceInvocationHandler invocationHandler = new ObserveServiceInvocationHandler(serviceContext, service); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index dfc644c..38f04e6 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -79,11 +79,10 @@ public class ObserveServiceTopia implements ObserveService { init(); } - @Override - public void setServiceContext(ObserveServiceContext serviceContext) { + public void setServiceContext(ObserveServiceContextTopia serviceContext) { Preconditions.checkNotNull(serviceContext, "serviceContext can't be null."); Preconditions.checkArgument(serviceContext instanceof ObserveServiceContextTopia, "serviceContext must be of type " + ObserveServiceContextTopia.class.getName()); - this.serviceContext = (ObserveServiceContextTopia) serviceContext; + this.serviceContext = serviceContext; } public static <D extends IdDto, E extends TopiaEntity> Class<E> getEntityType(Class<D> dtoType) { @@ -193,7 +192,7 @@ public class ObserveServiceTopia implements ObserveService { Class<D> dtoType, Class<E> entityType, E entity, - Class<? extends IdDto> ... includeReferenceDtoTypes) { + Class<? extends IdDto>... includeReferenceDtoTypes) { try (EntityToDtoBuilder<E, D> dtoBuilder = EntityToDtoBuilder.create(entityType, dtoType)) { @@ -301,6 +300,7 @@ public class ObserveServiceTopia implements ObserveService { return temporaryDataSourceConfiguration; } + protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabase(String prefix) { ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java index 9ed1d71..f854184 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ApplicationContextResource.java @@ -4,7 +4,6 @@ import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; 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.dto.constants.ReferentialLocale; import fr.ird.observe.test.TestHelper; import org.apache.commons.logging.Log; @@ -43,11 +42,10 @@ public class ApplicationContextResource implements TestRule { this.serviceFactory = new ObserveServiceFactoryTopia() { @Override - protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext) { ObserveServiceContextTopiaTaiste serviceContext = new ObserveServiceContextTopiaTaiste(); serviceContext.setApplicationContext(applicationContext); - - serviceContext.setDataSourceConfiguration(dataSourceConfiguration); + serviceContext.setObserveServiceInitializerContext(observeServiceInitializerContext); serviceContext.setServiceFactory(this); return serviceContext; @@ -60,7 +58,12 @@ public class ApplicationContextResource implements TestRule { } public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { - return serviceFactory.newService(serviceApplicationContext, dataSourceConfiguration, serviceType); + ObserveServiceInitializerContext observeServiceInitializerContext = new ObserveServiceInitializerContext(); + observeServiceInitializerContext.setDataSourceConfiguration(dataSourceConfiguration); + observeServiceInitializerContext.setApplicationLocale(Locale.FRANCE); + observeServiceInitializerContext.setReferentialLocale(ReferentialLocale.FR); + observeServiceInitializerContext.setTemporaryDirectoryRoot(serviceApplicationContext.temporaryDirectoryRoot); + return serviceFactory.newService(serviceApplicationContext, observeServiceInitializerContext, serviceType); } public void closeServiceFactory() { @@ -98,8 +101,6 @@ public class ApplicationContextResource implements TestRule { ObserveServiceTopia.init(); - serviceApplicationContext.setApplicationLocale(Locale.FRANCE); - serviceApplicationContext.setReferentialLocale(ReferentialLocale.FR); serviceApplicationContext.setMainServiceFactory(serviceFactory); } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java index 7d49eb5..14b4032 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceContextTopiaTaiste.java @@ -15,4 +15,5 @@ public class ObserveServiceContextTopiaTaiste extends ObserveServiceContextTopia public Date now() { return DATE; } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.