branch feature/7464 updated (6a050ce -> 0572571)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7464 in repository observe. See http://git.codelutin.com/observe.git from 6a050ce Debut de boot avec topia 3.0, reste à écrire la logique d'ouverture ou création de base new 8dd72cb Utilisation de la tag value attributeType new 0572571 Implantation de création d'une base (See #7464) The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 0572571b00be9242682f9ed7a5d234f4660e7a2c Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Aug 23 01:34:49 2015 +0200 Implantation de création d'une base (See #7464) commit 8dd72cb71443134d52b35728286c619e18d36dd9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 22 21:01:14 2015 +0200 Utilisation de la tag value attributeType Summary of changes: .../observe/ObserveTopiaApplicationContext.java | 5 +- .../src/main/xmi/observe-common.properties | 12 +- .../src/main/xmi/observe-longline.properties | 1 - .../src/main/xmi/observe-seine.properties | 1 - .../services/ObserveServiceApplicationContext.java | 37 ++++ .../observe/services/ObserveServiceContext.java | 18 ++ .../service/DataSourceDumpProducerService.java | 16 ++ .../services/service/DataSourceService.java | 5 +- observe-services-configuration-api/pom.xml | 7 - .../ObserveDataSourceConfiguration.java | 2 + ...ObserveDataSourceConfigurationTopiaSupport.java | 1 + observe-services-model/pom.xml | 7 + .../dto/DataSourceCreateConfigurationDto.java | 81 ++++++++ .../services/ObserveServiceContextTopia.java | 28 ++- .../services/ObserveServiceFactoryTopia.java | 180 +--------------- .../ObserveTopiaApplicationContextFactory.java | 230 +++++++++++++++++++++ .../DataSourceDumpProducerServiceTopia.java | 21 ++ .../services/service/DataSourceServiceTopia.java | 91 +++++++- .../services/ObserveServiceFactoryTopiaTaiste.java | 30 --- .../service/ApplicationContextResource.java | 9 +- .../services/service/DataSourceResource.java | 34 +-- .../service/DataSourceServiceTopiaTest.java | 50 +++++ .../service/ReferentialServiceTopiaTest.java | 6 +- 23 files changed, 607 insertions(+), 265 deletions(-) create mode 100644 observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java create mode 100644 observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java delete mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7464 in repository observe. See http://git.codelutin.com/observe.git commit 8dd72cb71443134d52b35728286c619e18d36dd9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Aug 22 21:01:14 2015 +0200 Utilisation de la tag value attributeType --- observe-entities/src/main/xmi/observe-common.properties | 12 +++++------- observe-entities/src/main/xmi/observe-longline.properties | 1 - observe-entities/src/main/xmi/observe-seine.properties | 1 - 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/observe-entities/src/main/xmi/observe-common.properties b/observe-entities/src/main/xmi/observe-common.properties index 60a2f53..667b4e6 100644 --- a/observe-entities/src/main/xmi/observe-common.properties +++ b/observe-entities/src/main/xmi/observe-common.properties @@ -21,15 +21,13 @@ ### model.tagvalue.version=4.0.1 model.tagvalue.notGenerateToString=true -model.tagvalue.generateOperatorForDAOHelper=true -model.tagvalue.generateStandaloneEnumForDAOHelper=true model.tagvalue.generateForeignKeyNames=true model.tagvalue.indexForeignKeys=true -model.tagvalue.String=java.lang.String -model.tagvalue.Float=java.lang.Float -model.tagvalue.Integer=java.lang.Integer -model.tagvalue.Boolean=java.lang.Boolean -model.tagvalue.Long=long +model.tagvalue.attributeType.String=java.lang.String +model.tagvalue.attributeType.Float=java.lang.Float +model.tagvalue.attributeType.Integer=java.lang.Integer +model.tagvalue.attributeType.Boolean=java.lang.Boolean +model.tagvalue.attributeType.Long=long ############################################################################### ### Schema #################################################################### diff --git a/observe-entities/src/main/xmi/observe-longline.properties b/observe-entities/src/main/xmi/observe-longline.properties index 1340a65..51584bf 100644 --- a/observe-entities/src/main/xmi/observe-longline.properties +++ b/observe-entities/src/main/xmi/observe-longline.properties @@ -22,7 +22,6 @@ model.tagvalue.version=4.0.1 model.tagvalue.notGenerateToString=true model.tagvalue.generateOperatorForDAOHelper=true -model.tagvalue.generateStandaloneEnumForDAOHelper=true model.tagvalue.generateForeignKeyNames=true ############################################################################### diff --git a/observe-entities/src/main/xmi/observe-seine.properties b/observe-entities/src/main/xmi/observe-seine.properties index ed29a3a..e8886fc 100644 --- a/observe-entities/src/main/xmi/observe-seine.properties +++ b/observe-entities/src/main/xmi/observe-seine.properties @@ -22,7 +22,6 @@ model.tagvalue.version=4.0.1 model.tagvalue.notGenerateToString=true model.tagvalue.generateOperatorForDAOHelper=true -model.tagvalue.generateStandaloneEnumForDAOHelper=true model.tagvalue.generateForeignKeyNames=true ############################################################################### -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7464 in repository observe. See http://git.codelutin.com/observe.git commit 0572571b00be9242682f9ed7a5d234f4660e7a2c Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Aug 23 01:34:49 2015 +0200 Implantation de création d'une base (See #7464) --- .../observe/ObserveTopiaApplicationContext.java | 5 +- .../services/ObserveServiceApplicationContext.java | 37 ++++ .../observe/services/ObserveServiceContext.java | 18 ++ .../service/DataSourceDumpProducerService.java | 16 ++ .../services/service/DataSourceService.java | 5 +- observe-services-configuration-api/pom.xml | 7 - .../ObserveDataSourceConfiguration.java | 2 + ...ObserveDataSourceConfigurationTopiaSupport.java | 1 + observe-services-model/pom.xml | 7 + .../dto/DataSourceCreateConfigurationDto.java | 81 ++++++++ .../services/ObserveServiceContextTopia.java | 28 ++- .../services/ObserveServiceFactoryTopia.java | 180 +--------------- .../ObserveTopiaApplicationContextFactory.java | 230 +++++++++++++++++++++ .../DataSourceDumpProducerServiceTopia.java | 21 ++ .../services/service/DataSourceServiceTopia.java | 91 +++++++- .../services/ObserveServiceFactoryTopiaTaiste.java | 30 --- .../service/ApplicationContextResource.java | 9 +- .../services/service/DataSourceResource.java | 34 +-- .../service/DataSourceServiceTopiaTest.java | 50 +++++ .../service/ReferentialServiceTopiaTest.java | 6 +- 20 files changed, 602 insertions(+), 256 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java index cff5f03..7c66d03 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -14,7 +14,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat public static final String AUTO_MIGRATE = "auto.migrate"; - //FIXME Voir comment remplir ça. + //FIXME Voir comment remplir ça (probablement pour les tests ?) protected boolean autoMigrate; /** @@ -35,8 +35,7 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } public boolean isOpen() { - //FIXME utiliser le flag open - return !isClosed(); + return isOpened() && open; } public void setOpen(boolean open) { 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 542f8e3..49a84ee 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 @@ -2,6 +2,15 @@ package fr.ird.observe.services; import fr.ird.observe.services.dto.constants.ReferentialLocale; +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. * @@ -14,6 +23,16 @@ public class ObserveServiceApplicationContext { */ protected ReferentialLocale referentialLocale; + /** + * 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 ReferentialLocale getReferentialLocale() { return referentialLocale; } @@ -21,4 +40,22 @@ public class ObserveServiceApplicationContext { public void setReferentialLocale(ReferentialLocale referentialLocale) { this.referentialLocale = referentialLocale; } + + 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) throws IOException { + Set<PosixFilePermission> posixFilePermissions = PosixFilePermissions.fromString("rwxr-x---"); + FileAttribute<Set<PosixFilePermission>> fileAttribute = PosixFilePermissions.asFileAttribute(posixFilePermissions); + return Files.createTempDirectory(temporaryDirectoryRoot, prefix, fileAttribute).toFile(); + } } 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 index d854949..cd959c9 100644 --- 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 @@ -1,7 +1,10 @@ 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; /** @@ -15,4 +18,19 @@ public interface ObserveServiceContext { 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/service/DataSourceDumpProducerService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java new file mode 100644 index 0000000..163d414 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java @@ -0,0 +1,16 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveService; + +/** + * Created on 23/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface DataSourceDumpProducerService extends ObserveService{ + + byte[] getReferentialDump(); + + byte[] getDataDump(String... importDataIds); + +} 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 dac2dc6..1e41b82 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,9 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveService; +import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; + +import java.io.IOException; /** * Created on 21/08/15. @@ -11,7 +14,7 @@ public interface DataSourceService extends ObserveService { boolean exist(); - void create(); + void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IOException; void open(); diff --git a/observe-services-configuration-api/pom.xml b/observe-services-configuration-api/pom.xml index 07c10a3..ebce096 100644 --- a/observe-services-configuration-api/pom.xml +++ b/observe-services-configuration-api/pom.xml @@ -17,13 +17,6 @@ <dependencies> - <!-- sibling dependencies --> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>observe-services-model</artifactId> - <version>${project.version}</version> - </dependency> - <!-- commons dependencies --> <dependency> diff --git a/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfiguration.java b/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfiguration.java index b611428..8b898a2 100644 --- a/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfiguration.java +++ b/observe-services-configuration-api/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfiguration.java @@ -7,4 +7,6 @@ package fr.ird.observe.services.configuration; */ public interface ObserveDataSourceConfiguration { + String getLabel(); + } diff --git a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaSupport.java b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaSupport.java index cb8de02..aab2ebe 100644 --- a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaSupport.java +++ b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaSupport.java @@ -56,6 +56,7 @@ public abstract class ObserveDataSourceConfigurationTopiaSupport implements Obse this.password = password; } + @Override public String getLabel() { return label; } diff --git a/observe-services-model/pom.xml b/observe-services-model/pom.xml index 7c25fff..a0486c1 100644 --- a/observe-services-model/pom.xml +++ b/observe-services-model/pom.xml @@ -39,6 +39,13 @@ <dependencies> + <!-- sibling dependencies --> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>observe-services-configuration-api</artifactId> + <version>${project.version}</version> + </dependency> + <!-- Nuiton --> <dependency> <groupId>org.nuiton</groupId> diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java new file mode 100644 index 0000000..6c1580c --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java @@ -0,0 +1,81 @@ +package fr.ird.observe.services.dto; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; + +/** + * Created on 22/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataSourceCreateConfigurationDto extends AbstractObserveDto { + + private static final long serialVersionUID = 1L; + + /** + * Le contenu de la base à importer (Optionel). + */ + protected Optional<byte[]> optionalImportDatabase; + + /** + * Une configuration de la dataSource à utiliser pour importer le référentiel (Optionel). + */ + protected Optional<ObserveDataSourceConfiguration> optionalImportReferentialDataSourceConfiguration; + + /** + * Une configuration de la dataSource à utiliser pour importer des données (Optionel). + */ + protected Optional<ObserveDataSourceConfiguration> optionalImportDataDataSourceConfiguration; + + /** + * Les données à importer (ids des marées) (Optionel). + */ + protected Optional<String[]> optionalImportDataIds; + + public boolean isImportDatabase() { + return optionalImportDatabase.isPresent(); + } + + public boolean isImportReferential() { + return optionalImportReferentialDataSourceConfiguration.isPresent(); + } + + public boolean isImportData() { + return optionalImportDataDataSourceConfiguration.isPresent(); + } + + public byte[] getImportDatabase() { + return optionalImportDatabase.get(); + } + + public ObserveDataSourceConfiguration getImportReferentialDataSourceConfiguration() { + return optionalImportReferentialDataSourceConfiguration.get(); + } + + public ObserveDataSourceConfiguration getImportDataDataSourceConfiguration() { + return optionalImportDataDataSourceConfiguration.get(); + } + + public String[] getImportDataIds() { + return optionalImportDataIds.get(); + } + + public void setImportDatabase(byte... importDatabase) { + Preconditions.checkNotNull(importDatabase, "'importDatabase' can't be null."); + this.optionalImportDatabase = Optional.of(importDatabase); + } + + public void setImportReferentialDataSourceConfiguration(ObserveDataSourceConfiguration importReferentialDataSourceConfiguration) { + Preconditions.checkNotNull(importReferentialDataSourceConfiguration, "'importReferentialDataSourceConfiguration' can't be null."); + this.optionalImportReferentialDataSourceConfiguration = Optional.of(importReferentialDataSourceConfiguration); + } + + public void setImportDataConfiguration(ObserveDataSourceConfiguration importDataDataSourceConfiguration, String... importDataIds) { + Preconditions.checkNotNull(importDataDataSourceConfiguration, "'importDataDataSourceConfiguration' can't be null."); + Preconditions.checkNotNull(importDataIds, "'importDataIds' can't be null."); + this.optionalImportDataDataSourceConfiguration = Optional.of(importDataDataSourceConfiguration); + this.optionalImportDataIds = Optional.of(importDataIds); + } + +} 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 960a636..5bec7f8 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 @@ -2,9 +2,12 @@ package fr.ird.observe.services; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import java.io.File; +import java.io.IOException; import java.util.Date; /** @@ -16,6 +19,8 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { protected ObserveServiceApplicationContext applicationContext; + protected ObserveServiceFactory serviceFactory; + protected ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration; protected ObserveTopiaPersistenceContext topiaPersistenceContext; @@ -36,8 +41,23 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { return new Date(); } - public ObserveServiceApplicationContext getApplicationContext() { - return applicationContext; + @Override + public <S extends ObserveService> S newService(Class<S> serviceType) { + return serviceFactory.newService(applicationContext, dataSourceConfiguration, 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) throws IOException { + return applicationContext.createTemporaryDirectory(prefix); + } + + public ObserveDataSourceConfigurationTopiaSupport getDataSourceConfiguration() { + return dataSourceConfiguration; } public ObserveTopiaPersistenceContext getTopiaPersistenceContext() { @@ -60,10 +80,12 @@ public class ObserveServiceContextTopia implements ObserveServiceContext { this.dataSourceConfiguration = dataSourceConfiguration; } + public void setServiceFactory(ObserveServiceFactory serviceFactory) { + this.serviceFactory = serviceFactory; + } public void closeTopiaPersistenceContext() { topiaPersistenceContext.close(); topiaPersistenceContext = null; } - } 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 9da62c1..ccf5e1b 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 @@ -1,41 +1,23 @@ package fr.ird.observe.services; import com.google.common.base.Preconditions; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.reflect.Reflection; import fr.ird.observe.ObserveTopiaApplicationContext; -import fr.ird.observe.ObserveTopiaIdFactory; import fr.ird.observe.ObserveTopiaPersistenceContext; -import fr.ird.observe.entities.migration.H2DataSourceMigration; -import fr.ird.observe.entities.migration.ObserveMigrationEngine; -import fr.ird.observe.entities.migration.PGDataSourceMigration; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; import fr.ird.observe.services.spi.NoDataAccess; import fr.ird.observe.services.spi.Write; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.BeanTopiaConfiguration; -import org.nuiton.topia.persistence.TopiaApplicationContext; -import org.nuiton.topia.persistence.TopiaConfiguration; -import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; -import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; -import org.nuiton.topia.replication.TopiaReplicationServiceImpl; import java.io.Closeable; -import java.io.File; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Collections; import java.util.Set; -import java.util.concurrent.ExecutionException; /** * FIXME Supprimer les DataSourceConfig et DataSource et directement utiliser TopiaConfiguration. @@ -46,71 +28,11 @@ import java.util.concurrent.ExecutionException; */ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport implements Closeable { - /** l'url d'acces a la base locale */ - public static final String h2LocalUrl = - "jdbc:h2:file:%s;" + - // on peut aussi utiliser file, socket - "FILE_LOCK=file;" + - //1 or 2 is needed to restore avec crash - // 0: logging is disabled (faster), - // 1: logging of the data is enabled, but logging of the index - // changes is disabled (default), 2: logging of both data and index - // changes are enabled - "LOG=0;" + - // on peut aussi utiliser hsqldb, mysql ou postgresql - "MODE=postgresql;" + - //"MODE=hsqldb;" + - // Sets the default lock timeout (in milliseconds) in this - // database that is used for the new sessions. - "DEFAULT_LOCK_TIMEOUT=2000;" + - // -1: the database is never closed until the close delay is set to - // some other rev or SHUTDOWN is called., 0: no delay (default; the - // database is closed if the last connection to it is closed)., n: - // the database is left open for n second after the last connection - // is closed. - "DB_CLOSE_DELAY=0;" + - // 0: no locking (should only be used for testing), - // 1: table level locking (default), - // 2: table level locking with garbage collection (if the - // application does not close all connections). - // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when - // writing (no read locks). - "LOCK_MODE=3;" + - // Levels: 0=off, 1=error, 2=info, 3=debug. - "TRACE_LEVEL_FILE=0;" + - // on system.out: 0=off, 1=error, 2=info, 3=debug. - "TRACE_LEVEL_SYSTEM_OUT=0;" + - // maximumn cache to improve performance... - "CACHE_SIZE=65536"; - /** Logger. */ private static final Log log = LogFactory.getLog(ObserveServiceFactoryTopia.class); protected static final LoadingCache<Class<?>, Class<?>> serviceTypeCache = newServiceImplementationTypesCache("Topia"); - protected final LoadingCache<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext> topiaApplicationContextCache = CacheBuilder - .newBuilder() - .build(new CacheLoader<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext>() { - - @Override - public ObserveTopiaApplicationContext load(ObserveDataSourceConfigurationTopiaSupport key) throws Exception { - - ObserveTopiaApplicationContext dataSource = null; - if (key instanceof ObserveDataSourceConfigurationTopiaH2) { - dataSource = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaH2) key); - } - - if (key instanceof ObserveDataSourceConfigurationTopiaPG) { - dataSource = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaPG) key); - } - - Preconditions.checkState(dataSource != null, "No dataSource found for configuration: " + key); - return dataSource; - } - }); - - protected final JdbcConfigurationBuilder jdbcConfigurationBuilder = new JdbcConfigurationBuilder(); - @Override public <S extends ObserveService> boolean accept(ObserveDataSourceConfiguration dataSourceConfiguration, Class<S> serviceType) { @@ -143,95 +65,16 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp ObserveServiceContextTopia serviceContext = new ObserveServiceContextTopia(); serviceContext.setApplicationContext(applicationContext); - ObserveDataSourceConfigurationTopiaSupport dataSourceConfigurationTopia = dataSourceConfiguration; - serviceContext.setDataSourceConfiguration(dataSourceConfigurationTopia); + serviceContext.setDataSourceConfiguration(dataSourceConfiguration); + serviceContext.setServiceFactory(this); - ObserveTopiaApplicationContext dataSource = getTopiaApplicationContext(dataSourceConfigurationTopia); - serviceContext.setTopiaApplicationContext(dataSource); + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + serviceContext.setTopiaApplicationContext(topiaApplicationContext); return serviceContext; } - protected ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaPG configuration) { - - TopiaConfiguration topiaConfiguration = getTopiaConfiguration(configuration); - - if (log.isInfoEnabled()) { - log.info("PG Topia configuration: " + topiaConfiguration); - } - - ObserveTopiaApplicationContext topiaApplicationContext = new ObserveTopiaApplicationContext(topiaConfiguration); - return topiaApplicationContext; - - } - - protected TopiaConfiguration getTopiaConfiguration(ObserveDataSourceConfigurationTopiaPG configuration) { - - JdbcConfiguration jdbcConfiguration = getJdbcConfiguration(configuration, configuration.getJdbcUrl()); - - BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); - topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); - topiaConfiguration.setInitSchema(false); - topiaConfiguration.setValidateSchema(false); - - ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); - return topiaConfiguration; - } - - protected JdbcConfiguration getJdbcConfiguration(ObserveDataSourceConfigurationTopiaPG configuration, String jdbcUrl) { - return jdbcConfigurationBuilder.forH2Database(jdbcUrl, - configuration.getUsername(), - String.valueOf(configuration.getPassword())); - } - - protected ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaH2 configuration) { - - TopiaConfiguration topiaConfiguration = getTopiaConfiguration(configuration); - - if (log.isInfoEnabled()) { - log.info("H2 Topia configuration: " + topiaConfiguration); - } - ObserveTopiaApplicationContext topiaApplicationContext = new ObserveTopiaApplicationContext(topiaConfiguration); - return topiaApplicationContext; - - } - - protected TopiaConfiguration getTopiaConfiguration(ObserveDataSourceConfigurationTopiaH2 configuration) { - - String dbPath = new File(configuration.getDirectory(), configuration.getDbName()).getPath(); - - String jdbcUrl = String.format(h2LocalUrl, dbPath); - - JdbcConfiguration jdbcConfiguration = jdbcConfigurationBuilder.forH2Database(jdbcUrl, - configuration.getUsername(), - String.valueOf(configuration.getPassword())); - - BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); - topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); - topiaConfiguration.setInitSchema(false); - topiaConfiguration.setValidateSchema(false); - - ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName()); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); - return topiaConfiguration; - } - - protected ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - - try { - ObserveTopiaApplicationContext dataSource = topiaApplicationContextCache.get(dataSourceConfiguration); - return dataSource; - } catch (ExecutionException e) { - //FIXME Avoir une vraie execption - throw new RuntimeException("Could not get dataSource for configuration: " + dataSourceConfiguration, e); - } - - } - protected <S extends ObserveService> S newServiceTransactionalProxy(Class<S> serviceType, S service, ObserveServiceContextTopia serviceContext) { ObserveServiceInvocationHandler invocationHandler = new ObserveServiceInvocationHandler(serviceContext, service); @@ -243,20 +86,7 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp @Override public void close() { - for (TopiaApplicationContext dataSource : topiaApplicationContextCache.asMap().values()) { - - if (!dataSource.isClosed()) { - try { - dataSource.close(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Could not close data source: " + dataSource, e); - } - } - } - } - - topiaApplicationContextCache.invalidateAll(); + ObserveTopiaApplicationContextFactory.close(); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java new file mode 100644 index 0000000..7b5c316 --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java @@ -0,0 +1,230 @@ +package fr.ird.observe.services; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; +import fr.ird.observe.ObserveTopiaApplicationContext; +import fr.ird.observe.ObserveTopiaIdFactory; +import fr.ird.observe.entities.migration.H2DataSourceMigration; +import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import fr.ird.observe.entities.migration.PGDataSourceMigration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.BeanTopiaConfiguration; +import org.nuiton.topia.persistence.TopiaApplicationContext; +import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; +import org.nuiton.topia.replication.TopiaReplicationServiceImpl; + +import java.io.File; +import java.util.Collections; +import java.util.concurrent.ExecutionException; + +/** + * Created on 23/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ObserveTopiaApplicationContextFactory { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ObserveTopiaApplicationContextFactory.class); + + /** l'url d'acces a la base locale */ + public static final String H2_LOCAL_URL = + "jdbc:h2:file:%s;" + + // on peut aussi utiliser file, socket + "FILE_LOCK=file;" + + //1 or 2 is needed to restore avec crash + // 0: logging is disabled (faster), + // 1: logging of the data is enabled, but logging of the index + // changes is disabled (default), 2: logging of both data and index + // changes are enabled + "LOG=0;" + + // on peut aussi utiliser hsqldb, mysql ou postgresql + "MODE=postgresql;" + + //"MODE=hsqldb;" + + // Sets the default lock timeout (in milliseconds) in this + // database that is used for the new sessions. + "DEFAULT_LOCK_TIMEOUT=2000;" + + // -1: the database is never closed until the close delay is set to + // some other rev or SHUTDOWN is called., 0: no delay (default; the + // database is closed if the last connection to it is closed)., n: + // the database is left open for n second after the last connection + // is closed. + "DB_CLOSE_DELAY=0;" + + // 0: no locking (should only be used for testing), + // 1: table level locking (default), + // 2: table level locking with garbage collection (if the + // application does not close all connections). + // LOCK_MODE 3 (READ_COMMITTED). Table level locking, but only when + // writing (no read locks). + "LOCK_MODE=3;" + + // Levels: 0=off, 1=error, 2=info, 3=debug. + "TRACE_LEVEL_FILE=0;" + + // on system.out: 0=off, 1=error, 2=info, 3=debug. + "TRACE_LEVEL_SYSTEM_OUT=0;" + + // maximumn cache to improve performance... + "CACHE_SIZE=65536"; + + protected static final JdbcConfigurationBuilder JDBC_CONFIGURATION_BUILDER = new JdbcConfigurationBuilder(); + + protected static final LoadingCache<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext> TOPIA_APPLICATION_CONTEXT_CACHE = CacheBuilder + .newBuilder() + .build(new CacheLoader<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext>() { + + @Override + public ObserveTopiaApplicationContext load(ObserveDataSourceConfigurationTopiaSupport key) throws Exception { + + ObserveTopiaApplicationContext dataSource = createTopiaApplicationContext(key); + return dataSource; + + } + }); + + public static ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + + try { + ObserveTopiaApplicationContext topiaApplicationContext = TOPIA_APPLICATION_CONTEXT_CACHE.get(dataSourceConfiguration); + return topiaApplicationContext; + } catch (ExecutionException e) { + //FIXME Avoir une vraie execption + throw new RuntimeException("Could not get dataSource for configuration: " + dataSourceConfiguration, e); + } + + } + + public static Optional<ObserveTopiaApplicationContext> getTopiaApplicationContextIfPresent(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { + + ObserveTopiaApplicationContext topiaApplicationContext = TOPIA_APPLICATION_CONTEXT_CACHE.getIfPresent(dataSourceConfiguration); + return Optional.fromNullable(topiaApplicationContext); + + } + + public static void close() { + + for (TopiaApplicationContext dataSource : TOPIA_APPLICATION_CONTEXT_CACHE.asMap().values()) { + + if (!dataSource.isClosed()) { + try { + dataSource.close(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Could not close data source: " + dataSource, e); + } + } + } + } + + TOPIA_APPLICATION_CONTEXT_CACHE.invalidateAll(); + + } + + protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport configuration) { + + ObserveTopiaApplicationContext topiaApplicationContext = null; + + if (configuration instanceof ObserveDataSourceConfigurationTopiaH2) { + topiaApplicationContext = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaH2) configuration); + } else if (configuration instanceof ObserveDataSourceConfigurationTopiaPG) { + topiaApplicationContext = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaPG) configuration); + } + Preconditions.checkState(topiaApplicationContext != null, "Did not find how to create ObserveTopiaApplicationContext from: " + configuration); + return topiaApplicationContext; + + } + + protected static TopiaConfiguration createTopiaConfiguration(ObserveDataSourceConfigurationTopiaPG configuration) { + + JdbcConfiguration jdbcConfiguration = createJdbcConfiguration(configuration, configuration.getJdbcUrl()); + + BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); + topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); + topiaConfiguration.setInitSchema(false); + topiaConfiguration.setValidateSchema(false); + + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + return topiaConfiguration; + + } + + protected static TopiaConfiguration createTopiaConfiguration(ObserveDataSourceConfigurationTopiaH2 configuration) { + + String dbPath = new File(configuration.getDirectory(), configuration.getDbName()).getPath(); + + String jdbcUrl = String.format(H2_LOCAL_URL, dbPath); + + JdbcConfiguration jdbcConfiguration = JDBC_CONFIGURATION_BUILDER.forH2Database(jdbcUrl, + configuration.getUsername(), + String.valueOf(configuration.getPassword())); + + BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); + topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); + topiaConfiguration.setInitSchema(false); + topiaConfiguration.setValidateSchema(false); + + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + return topiaConfiguration; + + } + + protected static JdbcConfiguration createJdbcConfiguration(ObserveDataSourceConfigurationTopiaPG configuration, String jdbcUrl) { + return JDBC_CONFIGURATION_BUILDER.forH2Database(jdbcUrl, + configuration.getUsername(), + String.valueOf(configuration.getPassword())); + } + + protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaPG configuration) { + + TopiaConfiguration topiaConfiguration = createTopiaConfiguration(configuration); + + if (log.isInfoEnabled()) { + log.info("PG Topia configuration: " + topiaConfiguration); + } + + ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration); + return topiaApplicationContext; + + } + + protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaH2 configuration) { + + TopiaConfiguration topiaConfiguration = createTopiaConfiguration(configuration); + + if (log.isInfoEnabled()) { + log.info("H2 Topia configuration: " + topiaConfiguration); + } + ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration); + return topiaApplicationContext; + + } + + protected static class MyObserveTopiaApplicationContext extends ObserveTopiaApplicationContext { + + public MyObserveTopiaApplicationContext(TopiaConfiguration topiaConfiguration) { + super(topiaConfiguration); + } + + @Override + public void close() { + try { + super.close(); + } finally { + // remove from cache + TOPIA_APPLICATION_CONTEXT_CACHE.invalidate(getConfiguration()); + } + } + + } +} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java new file mode 100644 index 0000000..c4fb15f --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java @@ -0,0 +1,21 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveServiceTopia; + +/** + * Created on 23/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataSourceDumpProducerServiceTopia extends ObserveServiceTopia implements DataSourceDumpProducerService { + + @Override + public byte[] getReferentialDump() { + return new byte[0]; + } + + @Override + public byte[] getDataDump(String... importDataIds) { + return new byte[0]; + } +} 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 f3b58e6..b8bc87a 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 @@ -1,7 +1,21 @@ package fr.ird.observe.services.service; -import fr.ird.observe.services.ObserveServiceContext; +import com.google.common.base.Optional; +import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.services.ObserveServiceTopia; +import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; +import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; +import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; +import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; /** * Created on 21/08/15. @@ -12,28 +26,87 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS @Override public boolean exist() { + + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); return false; } @Override - public void create() { + public void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IOException { + + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + + JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(topiaApplicationContext.getConfiguration()); + + if (dataSourceCreateConfiguration.isImportDatabase()) { + + byte[] importDatabase = dataSourceCreateConfiguration.getImportDatabase(); + + executeSqlScript(jdbcH2Helper, "ImportDatabase_" + dataSourceConfiguration.getLabel(), importDatabase); + + } else { + + // Creer une base + + //FIXME Voir si ça convient + topiaApplicationContext.createSchema(); + + if (dataSourceCreateConfiguration.isImportReferential()) { + + ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration(); + + DataSourceDumpProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, DataSourceDumpProducerService.class); + + byte[] referentialDump = dumpProducerService.getReferentialDump(); + + executeSqlScript(jdbcH2Helper, "ImportReferential_" + importDataSourceConfiguration.getLabel(), referentialDump); + + } + + if (dataSourceCreateConfiguration.isImportData()) { + + ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration(); + String[] importDataIds = dataSourceCreateConfiguration.getImportDataIds(); + + DataSourceDumpProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, DataSourceDumpProducerService.class); + + byte[] dataDump = dumpProducerService.getDataDump(importDataIds); + + executeSqlScript(jdbcH2Helper, "ImportData_" + importDataSourceConfiguration.getLabel(), dataDump); + + } + + } } @Override public void open() { + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); + ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + } @Override public void close() { + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); + Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContextIfPresent(dataSourceConfiguration); + + if (optionalTopiaApplicationContext.isPresent()) { + optionalTopiaApplicationContext.get().close(); + } + } @Override public boolean canConnect() { + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); return false; + } @Override @@ -41,8 +114,18 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } - @Override - public void setServiceContext(ObserveServiceContext serviceContext) { + protected void executeSqlScript(JdbcH2Helper jdbcH2Helper, String temporaryFilePrefix, byte... content) throws IOException { + + File temporaryDirectory = serviceContext.createTemporaryDirectory(temporaryFilePrefix); + + Path sqlScript = new File(temporaryDirectory, "script.sql").toPath(); + + try (InputStream inputSream = new BufferedInputStream(new ByteArrayInputStream(content))) { + Files.copy(inputSream, sqlScript); + } + + jdbcH2Helper.restore(sqlScript.toFile()); } + } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java b/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java deleted file mode 100644 index 5f784c5..0000000 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/ObserveServiceFactoryTopiaTaiste.java +++ /dev/null @@ -1,30 +0,0 @@ -package fr.ird.observe.services; - -import fr.ird.observe.ObserveTopiaApplicationContext; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; - -/** - * Created on 20/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class ObserveServiceFactoryTopiaTaiste extends ObserveServiceFactoryTopia { - - public ObserveTopiaApplicationContext getExistingDataSource(ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration) { - ObserveTopiaApplicationContext dataSource = topiaApplicationContextCache.getIfPresent(dataSourceConfiguration); - return dataSource; - } - - @Override - protected ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - - ObserveTopiaApplicationContext dataSource = super.getTopiaApplicationContext(dataSourceConfiguration); - - if (!dataSource.isClosed()) { - dataSource.close(); - } - return dataSource; - - } -} diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java index e15620e..3743844 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java @@ -1,7 +1,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveServiceApplicationContext; -import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; +import fr.ird.observe.services.ObserveServiceFactoryTopia; import fr.ird.observe.services.dto.constants.ReferentialLocale; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -24,12 +24,12 @@ public class ApplicationContextResource implements TestRule { protected final ObserveServiceApplicationContext serviceApplicationContext; - protected final ObserveServiceFactoryTopiaTaiste serviceFactory; + protected final ObserveServiceFactoryTopia serviceFactory; public ApplicationContextResource(Version databaseVersion) { this.databaseVersion = databaseVersion; this.serviceApplicationContext = new ObserveServiceApplicationContext(); - this.serviceFactory = new ObserveServiceFactoryTopiaTaiste(); + this.serviceFactory = new ObserveServiceFactoryTopia(); } public String getScriptPath(String classifier) { @@ -40,7 +40,7 @@ public class ApplicationContextResource implements TestRule { return serviceApplicationContext; } - public ObserveServiceFactoryTopiaTaiste getServiceFactory() { + public ObserveServiceFactoryTopia getServiceFactory() { return serviceFactory; } @@ -74,6 +74,7 @@ public class ApplicationContextResource implements TestRule { // ObserveServiceTopia.init(); serviceApplicationContext.setReferentialLocale(ReferentialLocale.FR); + serviceApplicationContext.setMainServiceFactory(serviceFactory); } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java index f7b899c..90a4597 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java @@ -2,7 +2,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; -import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; +import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -42,13 +42,13 @@ public class DataSourceResource implements TestRule { return dataSourceConfiguration; } - public ObserveTopiaPersistenceContext newTransaction(String name) { + public ObserveTopiaPersistenceContext newTransaction(String name) { - ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); - ObserveTopiaApplicationContext dataSource = serviceFactory.getExistingDataSource(dataSourceConfiguration); + ObserveTopiaApplicationContext dataSource = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); ObserveTopiaPersistenceContext persistenceContext = dataSource.newPersistenceContext(); transactions.put(name, persistenceContext); return persistenceContext; + } public Statement apply(final Statement base, final Description description) { @@ -80,8 +80,7 @@ public class DataSourceResource implements TestRule { // File localDbFile = TestHelper.newLocalDB(methodName); - ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); - ObserveTopiaApplicationContext existingDataSource = serviceFactory.getExistingDataSource(dataSourceConfiguration); + ObserveTopiaApplicationContext dataSource = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); // // H2DataSource dataSource = DBTestHelper.createAndOpenFromDump( @@ -116,30 +115,11 @@ public class DataSourceResource implements TestRule { log.debug("Ends " + testClass.getName() + "::" + methodName); } - ObserveTopiaApplicationContext dataSource = getDataSource(); - if (dataSource != null && dataSource.isOpen()) { - - for (Map.Entry<String, ObserveTopiaPersistenceContext> entry : transactions.entrySet()) { - ObserveTopiaPersistenceContext topiaContext = entry.getValue(); - if (!topiaContext.isClosed()) { - String transactionKey = entry.getKey(); - try { - topiaContext.close(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Could not close transaction: " + transactionKey, e); - } - } - } - } - - } - applicationContextResource.getServiceFactory().close(); } - private ObserveTopiaApplicationContext getDataSource() { - return applicationContextResource.getServiceFactory().getExistingDataSource(dataSourceConfiguration); + private ObserveTopiaApplicationContext getTopiaApplicationContext() { + return ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java new file mode 100644 index 0000000..fdfdb25 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java @@ -0,0 +1,50 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.entities.migration.H2DataSourceMigration; +import fr.ird.observe.services.ObserveServiceApplicationContext; +import fr.ird.observe.services.ObserveServiceFactoryTopia; +import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +/** + * Created on 23/08/15. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DataSourceServiceTopiaTest { + + /** Logger. */ + private static final Log log = LogFactory.getLog(DataSourceServiceTopiaTest.class); + + @ClassRule + public static final ApplicationContextResource applicationContextResource = new ApplicationContextResource(H2DataSourceMigration.V_4_0); + + @Rule + public final DataSourceResource dataSourceResource = new DataSourceResource(applicationContextResource, applicationContextResource.getScriptPath("referentiel")); + + protected DataSourceService service; + + @Before + public void setUp() throws Exception { + + ObserveServiceFactoryTopia serviceFactory = applicationContextResource.getServiceFactory(); + + ObserveServiceApplicationContext serviceApplicationContext = applicationContextResource.getServiceApplicationContext(); + + ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration = dataSourceResource.getDataSourceConfiguration(); + + service = serviceFactory.newService(serviceApplicationContext, dataSourceConfiguration, DataSourceService.class); + + } + + @Test + public void testCreateDataSource() { + + } + +} \ No newline at end of file diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java index 47fd2e0..458e68f 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ReferentialServiceTopiaTest.java @@ -5,7 +5,7 @@ import fr.ird.observe.entities.migration.H2DataSourceMigration; import fr.ird.observe.entities.referentiel.LengthWeightParameter; import fr.ird.observe.entities.referentiel.Program; import fr.ird.observe.services.ObserveServiceApplicationContext; -import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; +import fr.ird.observe.services.ObserveServiceFactoryTopia; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.dto.FormDto; import fr.ird.observe.services.dto.IdDto; @@ -18,6 +18,7 @@ import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.nuiton.topia.persistence.TopiaDao; @@ -30,6 +31,7 @@ import java.util.Map; * * @author Tony Chemit - chemit@codelutin.com */ +@Ignore public class ReferentialServiceTopiaTest { /** Logger. */ @@ -46,7 +48,7 @@ public class ReferentialServiceTopiaTest { @Before public void setUp() throws Exception { - ObserveServiceFactoryTopiaTaiste serviceFactory = applicationContextResource.getServiceFactory(); + ObserveServiceFactoryTopia serviceFactory = applicationContextResource.getServiceFactory(); ObserveServiceApplicationContext serviceApplicationContext = applicationContextResource.getServiceApplicationContext(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm