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 364eb149a3aa76fbc4648f9c2beacb5136b3f2ad Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Sep 1 11:15:10 2015 +0200 Suppression du context applicatif au niveau des service, on utilise maintenant uniquement l'objet d'initialisation des services. --- .../web/ObserveWebApplicationContext.java | 18 ++-- .../web/request/ObserveWebRequestContext.java | 15 ++-- .../services/ObserveServiceApplicationContext.java | 61 ------------- .../observe/services/ObserveServiceFactory.java | 6 +- .../services/ObserveServiceFactorySupport.java | 12 +++ .../services/ObserveServiceInitializer.java | 99 ++++++++++++++++++++++ .../services/ObserveServiceInitializerContext.java | 69 --------------- .../services/ObserveServiceFactoryRest.java | 26 +++--- .../services/ObserveServiceMainFactory.java | 20 +++-- .../services/ObserveServiceContextTopia.java | 65 +++++++------- .../services/ObserveServiceFactoryTopia.java | 17 ++-- .../ird/observe/services/ObserveServiceTopia.java | 1 - .../services/ApplicationContextResource.java | 31 +++---- .../services/ObserveServiceContextTopiaTaiste.java | 4 + 14 files changed, 216 insertions(+), 228 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 569520d..2b364f1 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 @@ -14,9 +14,8 @@ import fr.ird.observe.application.web.configuration.user.ObserveWebUsers; import fr.ird.observe.application.web.configuration.user.ObserveWebUsersHelper; import fr.ird.observe.application.web.security.ObserveWebSecurityApplicationContext; 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.ObserveServiceInitializer; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.dto.gson.ObserveDtoGsonSupplier; import org.debux.webmotion.server.call.HttpContext; @@ -39,7 +38,7 @@ public class ObserveWebApplicationContext implements Closeable { protected ObserveWebApplicationConfiguration applicationConfiguration; - protected ObserveServiceApplicationContext serviceApplicationContext; + protected ObserveServiceFactory mainServiceFactory; protected ObserveWebDatabases databases; @@ -78,10 +77,8 @@ public class ObserveWebApplicationContext implements Closeable { securityApplicationContext = new ObserveWebSecurityApplicationContext(); securityApplicationContext.init(databases, users); - // init service application context - serviceApplicationContext = new ObserveServiceApplicationContext(); - serviceApplicationContext.setTemporaryDirectoryRoot(applicationConfiguration.getTemporaryDirectory().toPath()); - serviceApplicationContext.setMainServiceFactory(ObserveServiceMainFactory.get()); + // init service factory + mainServiceFactory = ObserveServiceMainFactory.get(); // init gson supplier boolean devMode = applicationConfiguration.isDevMode(); @@ -96,7 +93,7 @@ public class ObserveWebApplicationContext implements Closeable { securityApplicationContext.close(); // Fermer l'usine de services - serviceApplicationContext.close(); + mainServiceFactory.close(); } @@ -120,9 +117,8 @@ public class ObserveWebApplicationContext implements Closeable { return users; } - public <S extends ObserveService> S newService(ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { - ObserveServiceFactory mainServiceFactory = serviceApplicationContext.getMainServiceFactory(); - return mainServiceFactory.newService(serviceApplicationContext, observeServiceInitializerContext, serviceType); + public <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, Class<S> serviceType) { + return mainServiceFactory.newService(observeServiceInitializer, serviceType); } } 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 ffecad6..4dc0c8e 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,7 +4,7 @@ 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.ObserveServiceInitializer; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.debux.webmotion.server.call.HttpContext; @@ -58,12 +58,13 @@ public class ObserveWebRequestContext { checkSecurityContextIsPresent(); - ObserveServiceInitializerContext observeServiceInitializerContext = new ObserveServiceInitializerContext(); - observeServiceInitializerContext.setApplicationLocale(applicationLocale); - observeServiceInitializerContext.setReferentialLocale(referentialLocale); - observeServiceInitializerContext.setDataSourceConfiguration(getSecurityContext().getDataSourceConfiguration()); - - S service = applicationContext.newService(observeServiceInitializerContext, serviceType); + ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create( + applicationLocale, + referentialLocale, + applicationContext.getApplicationConfiguration().getTemporaryDirectory(), + getSecurityContext().getDataSourceConfiguration() + ); + S service = applicationContext.newService(observeServiceInitializer, serviceType); return service; } 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 deleted file mode 100644 index ea1b1bf..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceApplicationContext.java +++ /dev/null @@ -1,61 +0,0 @@ -package fr.ird.observe.services; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -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.Set; - -/** - * Created on 19/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ObserveServiceApplicationContext implements Closeable { - - /** - * L'usine de services principale (celle au dessus de toutes les usines d'implantation). - */ - protected ObserveServiceFactory mainServiceFactory; - - /** - * Le répertoire où créer les répertoires temporaires. - */ - protected Path temporaryDirectoryRoot; - - public ObserveServiceFactory getMainServiceFactory() { - return mainServiceFactory; - } - - public void setMainServiceFactory(ObserveServiceFactory mainServiceFactory) { - this.mainServiceFactory = mainServiceFactory; - } - - public void setTemporaryDirectoryRoot(Path temporaryDirectoryRoot) { - this.temporaryDirectoryRoot = temporaryDirectoryRoot; - } - - public File createTemporaryDirectory(String prefix) { - Set<PosixFilePermission> posixFilePermissions = PosixFilePermissions.fromString("rwxr-x---"); - FileAttribute<Set<PosixFilePermission>> fileAttribute = PosixFilePermissions.asFileAttribute(posixFilePermissions); - try { - return Files.createTempDirectory(temporaryDirectoryRoot, prefix, fileAttribute).toFile(); - } catch (IOException e) { - //TODO Avoir une exception plus concrete - throw new RuntimeException("Could not create temporary directory with preifx: " + prefix, e); - } - } - - @Override - public void close() { - - if (mainServiceFactory != null) { - mainServiceFactory.close(); - } - - } -} 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 b149135..5d3ee70 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 @@ -11,9 +11,13 @@ import java.io.Closeable; */ public interface ObserveServiceFactory extends Closeable { + ObserveServiceFactory getMainServiceFactory(); + + void setMainServiceFactory(ObserveServiceFactory mainServiceFactory); + <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType); - <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType); + <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, 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 8e5577a..9ea7b0a 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 @@ -13,6 +13,18 @@ import java.util.concurrent.ExecutionException; */ public abstract class ObserveServiceFactorySupport implements ObserveServiceFactory { + protected ObserveServiceFactory mainServiceFactory; + + @Override + public ObserveServiceFactory getMainServiceFactory() { + return mainServiceFactory; + } + + @Override + public void setMainServiceFactory(ObserveServiceFactory mainServiceFactory) { + this.mainServiceFactory = mainServiceFactory; + } + protected <S extends ObserveService> Class<S> getServiceClassType(LoadingCache<Class<?>, Class<?>> serviceTypeCache, Class<S> serviceType) { try { return (Class<S>) serviceTypeCache.get(serviceType); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java new file mode 100644 index 0000000..c201fc6 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java @@ -0,0 +1,99 @@ +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.util.Locale; + +/** + * Objet contentant les informations nécessaire pour créer un nouveau service. + * + * Ces informations viennent en général du context applicatif appelant. + * + * Created on 31/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveServiceInitializer { + + public static ObserveServiceInitializer create(Locale applicationLocale, + ReferentialLocale referentialLocale, + File temporaryDirectoryRoot, + ObserveDataSourceConfiguration dataSourceConfiguration) { + + ObserveServiceInitializer observeServiceInitializer = new ObserveServiceInitializer(); + observeServiceInitializer.setApplicationLocale(applicationLocale); + observeServiceInitializer.setReferentialLocale(referentialLocale); + observeServiceInitializer.setTemporaryDirectoryRoot(temporaryDirectoryRoot); + observeServiceInitializer.setDataSourceConfiguration(dataSourceConfiguration); + return observeServiceInitializer; + + } + + public static ObserveServiceInitializer create(ObserveServiceInitializer otherObserveServiceInitializer) { + + ObserveServiceInitializer observeServiceInitializer = new ObserveServiceInitializer(); + observeServiceInitializer.setApplicationLocale(otherObserveServiceInitializer.getApplicationLocale()); + observeServiceInitializer.setReferentialLocale(otherObserveServiceInitializer.getReferentialLocale()); + observeServiceInitializer.setTemporaryDirectoryRoot(otherObserveServiceInitializer.getTemporaryDirectoryRoot()); + observeServiceInitializer.setDataSourceConfiguration(otherObserveServiceInitializer.getDataSourceConfiguration()); + return observeServiceInitializer; + + } + + /** + * 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 File temporaryDirectoryRoot; + + public Locale getApplicationLocale() { + return applicationLocale; + } + + public ReferentialLocale getReferentialLocale() { + return referentialLocale; + } + + public ObserveDataSourceConfiguration getDataSourceConfiguration() { + return dataSourceConfiguration; + } + + public File getTemporaryDirectoryRoot() { + return temporaryDirectoryRoot; + } + + protected void setApplicationLocale(Locale applicationLocale) { + this.applicationLocale = applicationLocale; + } + + protected void setReferentialLocale(ReferentialLocale referentialLocale) { + this.referentialLocale = referentialLocale; + } + + public void setDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfiguration) { + this.dataSourceConfiguration = dataSourceConfiguration; + } + + protected void setTemporaryDirectoryRoot(File temporaryDirectoryRoot) { + this.temporaryDirectoryRoot = temporaryDirectoryRoot; + } + + protected ObserveServiceInitializer() { + } +} 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 deleted file mode 100644 index fbb0389..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServiceInitializerContext.java +++ /dev/null @@ -1,69 +0,0 @@ -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-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java b/observe-services-rest/src/main/java/fr/ird/observe/services/ObserveServiceFactoryRest.java index 86f8043..e324069 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 @@ -47,18 +47,18 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, Class<S> serviceType) { - Preconditions.checkNotNull(applicationContext, "applicationContext can't be null."); - Preconditions.checkNotNull(observeServiceInitializerContext, "observeServiceInitializerContext can't be null."); + Preconditions.checkNotNull(observeServiceInitializer, "observeServiceInitializerContext can't be null."); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); - Preconditions.checkNotNull(observeServiceInitializerContext.getApplicationLocale(), "applicationLocale can't be null."); - Preconditions.checkNotNull(observeServiceInitializerContext.getReferentialLocale(), "referentialLocale can't be null."); - ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializerContext.getDataSourceConfiguration(); + Preconditions.checkNotNull(observeServiceInitializer.getApplicationLocale(), "applicationLocale can't be null."); + Preconditions.checkNotNull(observeServiceInitializer.getReferentialLocale(), "referentialLocale can't be null."); + Preconditions.checkNotNull(observeServiceInitializer.getTemporaryDirectoryRoot(), "temporaryDirectoryRoot can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializer.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkArgument(dataSourceConfiguration instanceof ObserveDataSourceConfigurationRest, "dataSourceConfiguration must be of type ObserveRestClientDataSourceConfiguration"); - S service = newRemoteProxyServiceInstance(serviceType, observeServiceInitializerContext); + S service = newRemoteProxyServiceInstance(serviceType, observeServiceInitializer); return service; } @@ -68,9 +68,9 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { //TODO Voir ce qu'il faut nettoyer, normalement pas grand chose } - protected <S extends ObserveService> S newRemoteProxyServiceInstance(Class<S> serviceType, ObserveServiceInitializerContext observeServiceInitializerContext) { + protected <S extends ObserveService> S newRemoteProxyServiceInstance(Class<S> serviceType, ObserveServiceInitializer observeServiceInitializer) { - RemoteInvocationHandler handler = new RemoteInvocationHandler<>(paranamer, serviceType, observeServiceInitializerContext, gsonSupplier); + RemoteInvocationHandler handler = new RemoteInvocationHandler<>(paranamer, serviceType, observeServiceInitializer, gsonSupplier); S result = Reflection.newProxy(serviceType, handler); return result; @@ -92,16 +92,16 @@ public class ObserveServiceFactoryRest extends ObserveServiceFactorySupport { protected final String referentialLocale; - public RemoteInvocationHandler(Paranamer paranamer, Class<E> serviceClass, ObserveServiceInitializerContext observeServiceInitializerContext, Supplier<Gson> gsonSupplier) { + public RemoteInvocationHandler(Paranamer paranamer, Class<E> serviceClass, ObserveServiceInitializer observeServiceInitializer, Supplier<Gson> gsonSupplier) { this.paranamer = paranamer; this.serviceClass = serviceClass; - ObserveDataSourceConfigurationRest dataSourceConfiguration = (ObserveDataSourceConfigurationRest) observeServiceInitializerContext.getDataSourceConfiguration(); + ObserveDataSourceConfigurationRest dataSourceConfiguration = (ObserveDataSourceConfigurationRest) observeServiceInitializer.getDataSourceConfiguration(); this.authenticationToken = dataSourceConfiguration.getAuthenticationToken(); this.serviceUrl = dataSourceConfiguration.getServerUrl() + "/" + serviceClass.getSimpleName(); this.gsonSupplier = gsonSupplier; - this.applicationLocale = observeServiceInitializerContext.getApplicationLocale().toString(); - this.referentialLocale = observeServiceInitializerContext.getReferentialLocale().toString(); + this.applicationLocale = observeServiceInitializer.getApplicationLocale().toString(); + this.referentialLocale = observeServiceInitializer.getReferentialLocale().toString(); } 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 c62d659..0445dd8 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 @@ -27,6 +27,16 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { } @Override + public ObserveServiceFactory getMainServiceFactory() { + return this; + } + + @Override + public void setMainServiceFactory(ObserveServiceFactory mainServiceFactory) { + // Rien à faire on est déjà sur l'usine principale + } + + @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { ObserveServiceFactory factory = getFactory(dataSourceConfiguration, serviceType); @@ -35,11 +45,10 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, 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(observeServiceInitializer, "observeServiceInitializerContext can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializer.getDataSourceConfiguration(); Preconditions.checkNotNull(dataSourceConfiguration, "dataSourceConfiguration can't be null."); Preconditions.checkNotNull(serviceType, "serviceType can't be null."); @@ -50,7 +59,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { log.debug("Using factory: " + factory); } - S service = factory.newService(applicationContext, observeServiceInitializerContext, serviceType); + S service = factory.newService(observeServiceInitializer, serviceType); if (log.isInfoEnabled()) { log.info("New service created: " + service); @@ -79,6 +88,7 @@ public class ObserveServiceMainFactory implements ObserveServiceFactory { if (log.isInfoEnabled()) { log.info("Found service factory: " + factory); } + factory.setMainServiceFactory(this); builder.add(factory); } delegateFactories = builder.build(); 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 7310042..7db2ef8 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,9 +7,14 @@ 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.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.FileAttribute; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; import java.util.Date; import java.util.Locale; +import java.util.Set; /** * Created on 16/08/15. @@ -18,30 +23,38 @@ import java.util.Locale; */ public class ObserveServiceContextTopia { - protected ObserveServiceInitializerContext observeServiceInitializerContext; + protected final ObserveServiceInitializer observeServiceInitializer; - protected ObserveServiceFactory serviceFactory; + protected final ObserveServiceFactory mainServiceFactory; + + protected final ObserveServiceFactory serviceFactory; protected ObserveTopiaPersistenceContext topiaPersistenceContext; protected ObserveTopiaApplicationContext topiaApplicationContext; - protected ObserveServiceApplicationContext applicationContext; + public ObserveServiceContextTopia(ObserveServiceInitializer observeServiceInitializer, + ObserveServiceFactory mainServiceFactory, + ObserveServiceFactory serviceFactory) { + this.observeServiceInitializer = observeServiceInitializer; + this.mainServiceFactory = mainServiceFactory; + this.serviceFactory = serviceFactory; + } public ObserveTopiaApplicationContext getTopiaApplicationContext() { return topiaApplicationContext; } public Locale getApplicationLocale() { - return observeServiceInitializerContext.getApplicationLocale(); + return observeServiceInitializer.getApplicationLocale(); } public ReferentialLocale getReferentialLocale() { - return observeServiceInitializerContext.getReferentialLocale(); + return observeServiceInitializer.getReferentialLocale(); } - public Path getTemporaryDirectoryRoot() { - return observeServiceInitializerContext.getTemporaryDirectoryRoot(); + public File getTemporaryDirectoryRoot() { + return observeServiceInitializer.getTemporaryDirectoryRoot(); } public Date now() { @@ -49,19 +62,17 @@ public class ObserveServiceContextTopia { } public <S extends ObserveService> S newService(Class<S> serviceType) { - return serviceFactory.newService(applicationContext, observeServiceInitializerContext, serviceType); + return serviceFactory.newService(observeServiceInitializer, serviceType); } public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { - ObserveServiceInitializerContext observeServiceInitializerContext = new ObserveServiceInitializerContext(); - observeServiceInitializerContext.setApplicationLocale(this.observeServiceInitializerContext.getApplicationLocale()); - observeServiceInitializerContext.setReferentialLocale(this.observeServiceInitializerContext.getReferentialLocale()); - observeServiceInitializerContext.setDataSourceConfiguration(dataSourceConfiguration); - return applicationContext.getMainServiceFactory().newService(applicationContext, observeServiceInitializerContext, serviceType); + ObserveServiceInitializer newObserveServiceInitializer = ObserveServiceInitializer.create(this.observeServiceInitializer); + newObserveServiceInitializer.setDataSourceConfiguration(dataSourceConfiguration); + return mainServiceFactory.newService(newObserveServiceInitializer, serviceType); } public ObserveDataSourceConfigurationTopiaSupport getDataSourceConfiguration() { - return (ObserveDataSourceConfigurationTopiaSupport) observeServiceInitializerContext.getDataSourceConfiguration(); + return (ObserveDataSourceConfigurationTopiaSupport) observeServiceInitializer.getDataSourceConfiguration(); } public ObserveTopiaPersistenceContext getTopiaPersistenceContext() { @@ -76,28 +87,20 @@ public class ObserveServiceContextTopia { this.topiaApplicationContext = topiaApplicationContext; } - public void setServiceFactory(ObserveServiceFactory serviceFactory) { - this.serviceFactory = serviceFactory; - } - public void closeTopiaPersistenceContext() { topiaPersistenceContext.close(); topiaPersistenceContext = null; } - public void setApplicationContext(ObserveServiceApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - public ObserveServiceApplicationContext getApplicationContext() { - return applicationContext; - } - public File createTemporaryDirectory(String prefix) { - return applicationContext.createTemporaryDirectory(prefix); + Set<PosixFilePermission> posixFilePermissions = PosixFilePermissions.fromString("rwxr-x---"); + FileAttribute<Set<PosixFilePermission>> fileAttribute = PosixFilePermissions.asFileAttribute(posixFilePermissions); + try { + return Files.createTempDirectory(getTemporaryDirectoryRoot().toPath(), prefix, fileAttribute).toFile(); + } catch (IOException e) { + //TODO Avoir une exception plus concrete + throw new RuntimeException("Could not create temporary directory with preifx: " + prefix, e); + } } - 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 b9345bc..5b471ad 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,18 +40,17 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport { } @Override - public <S extends ObserveService> S newService(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext, Class<S> serviceType) { + public <S extends ObserveService> S newService(ObserveServiceInitializer observeServiceInitializer, 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(observeServiceInitializer, "observeServiceInitializerContext can't be null."); + ObserveDataSourceConfiguration dataSourceConfiguration = observeServiceInitializer.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, observeServiceInitializerContext); + ObserveServiceContextTopia serviceContext = createServiceContext(observeServiceInitializer); S service = newServiceInstance(serviceTypeImpl, serviceContext); service = newServiceTransactionalProxy(serviceType, service, serviceContext); @@ -59,13 +58,9 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport { } - protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext) { + protected ObserveServiceContextTopia createServiceContext(ObserveServiceInitializer observeServiceInitializer) { - ObserveServiceContextTopia serviceContext = new ObserveServiceContextTopia(); - serviceContext.setApplicationContext(applicationContext); - - serviceContext.setObserveServiceInitializerContext(observeServiceInitializerContext); - serviceContext.setServiceFactory(this); + ObserveServiceContextTopia serviceContext = new ObserveServiceContextTopia(observeServiceInitializer, mainServiceFactory, this); return serviceContext; 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 38f04e6..de21753 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 @@ -81,7 +81,6 @@ public class ObserveServiceTopia implements ObserveService { 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 = serviceContext; } 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 f854184..fb086e0 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 @@ -29,28 +29,24 @@ public class ApplicationContextResource implements TestRule { /** Logger. */ private static final Log log = LogFactory.getLog(ApplicationContextResource.class); - protected final ObserveServiceApplicationContext serviceApplicationContext; - protected final ObserveServiceFactoryTopia serviceFactory; private File testDirectory; private File dataBaseDirectory; + private Path temporaryDirectoryRoot; + public ApplicationContextResource() { - this.serviceApplicationContext = new ObserveServiceApplicationContext(); this.serviceFactory = new ObserveServiceFactoryTopia() { @Override - protected ObserveServiceContextTopia createServiceContext(ObserveServiceApplicationContext applicationContext, ObserveServiceInitializerContext observeServiceInitializerContext) { - ObserveServiceContextTopiaTaiste serviceContext = new ObserveServiceContextTopiaTaiste(); - serviceContext.setApplicationContext(applicationContext); - serviceContext.setObserveServiceInitializerContext(observeServiceInitializerContext); - serviceContext.setServiceFactory(this); - + protected ObserveServiceContextTopia createServiceContext(ObserveServiceInitializer observeServiceInitializer) { + ObserveServiceContextTopiaTaiste serviceContext = new ObserveServiceContextTopiaTaiste(observeServiceInitializer, mainServiceFactory, this); return serviceContext; } }; + serviceFactory.setMainServiceFactory(serviceFactory); } public String getScriptPath(String classifier, Version databaseVersion) { @@ -58,12 +54,13 @@ public class ApplicationContextResource implements TestRule { } public <S extends ObserveService> S newService(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> 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); + ObserveServiceInitializer observeServiceInitializer = ObserveServiceInitializer.create( + Locale.FRANCE, + ReferentialLocale.FR, + temporaryDirectoryRoot.toFile(), + dataSourceConfiguration + ); + return serviceFactory.newService(observeServiceInitializer, serviceType); } public void closeServiceFactory() { @@ -71,7 +68,7 @@ public class ApplicationContextResource implements TestRule { } public void setTemporaryDirectoryRoot(Path temporaryDirectoryRoot) { - serviceApplicationContext.setTemporaryDirectoryRoot(temporaryDirectoryRoot); + this.temporaryDirectoryRoot = temporaryDirectoryRoot; } @Override @@ -101,8 +98,6 @@ public class ApplicationContextResource implements TestRule { ObserveServiceTopia.init(); - serviceApplicationContext.setMainServiceFactory(serviceFactory); - } protected void after(Description description) { 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 14b4032..abd1d9d 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 @@ -11,6 +11,10 @@ public class ObserveServiceContextTopiaTaiste extends ObserveServiceContextTopia public static final Date DATE = DateUtil.createDate(36, 15, 17, 21, 8, 2015); + public ObserveServiceContextTopiaTaiste(ObserveServiceInitializer observeServiceInitializer, ObserveServiceFactory mainServiceFactory, ObserveServiceFactory serviceFactory) { + super(observeServiceInitializer, mainServiceFactory, serviceFactory); + } + @Override 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>.