branch feature/7739 updated (4ad8851 -> 4ea4007)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from 4ad8851 Meilleur nommage dans le méta-modèle + correction de l'algorithme de remplacement new 08c1cd6 Make repeatable test spi annotations new f15e480 Make possible to use multiple database in tests new 6d8430e Make service inheritates ObserveService new 22443b9 In sql generator we must to keep same order of parameters values + use default primitive values new 38120a9 Do not treat LastUpdateDate entity as an referential one + add code for replacement sql new f92e02b Do not treat LastUpdateDate entity as an referential one new 4ea4007 start a test for unidirectional referential synchronization (see #7739) The 7 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 4ea400786fc96c957d130f6d4a1763285460fa9e Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 18:04:09 2016 +0200 start a test for unidirectional referential synchronization (see #7739) commit f92e02bdadf623b3dc584ff662afc2181ec2f629 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:52:27 2016 +0200 Do not treat LastUpdateDate entity as an referential one commit 38120a9eefb3099e883095df8dacfd43ee58ea78 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:52:19 2016 +0200 Do not treat LastUpdateDate entity as an referential one + add code for replacement sql commit 22443b9591d8e5895ed86ce6d0ac61bc9139f73c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:51:00 2016 +0200 In sql generator we must to keep same order of parameters values + use default primitive values commit 6d8430e9534417d6a65ec4421da2c6deba34f1e5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:50:16 2016 +0200 Make service inheritates ObserveService commit f15e4803d79471677656f43f79677b9c575db90c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:49:04 2016 +0200 Make possible to use multiple database in tests commit 08c1cd6fd0e527dd198737354d04c8ec8bdb12b8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:48:35 2016 +0200 Make repeatable test spi annotations Summary of changes: ...ectionalReferentialSynchronizeLocalService.java | 3 +- ...ctionalReferentialSynchronizeRemoteService.java | 3 +- .../synchro/InsertSqlStatementGenerator.java | 34 ++++----- ...nalReferentialSynchronizeLocalServiceTopia.java | 13 +++- ...alReferentialSynchronizeRemoteServiceTopia.java | 11 ++- .../services/ApplicationContextResource.java | 68 ++++++++++++++++-- .../ird/observe/services/DataSourceResource.java | 50 +++++++++++-- .../UnidirectionalSynchronizeReferentialTest.java | 84 ++++++++++++++++++++++ .../main/java/fr/ird/observe/test/TestHelper.java | 11 --- .../test/spi/CopyDatabaseConfiguration.java | 3 + ...ration.java => CopyDatabaseConfigurations.java} | 6 +- .../ird/observe/test/spi/DatabaseClassifier.java | 18 +++++ .../test/spi/DatabaseNameConfiguration.java | 5 ++ ...ration.java => DatabaseNameConfigurations.java} | 8 +-- .../test/spi/DatabaseVersionConfiguration.java | 3 + ...ion.java => DatabaseVersionConfigurations.java} | 5 +- 16 files changed, 270 insertions(+), 55 deletions(-) create mode 100644 observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java copy observe-test-data/src/main/java/fr/ird/observe/test/spi/{CopyDatabaseConfiguration.java => CopyDatabaseConfigurations.java} (74%) create mode 100644 observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseClassifier.java copy observe-test-data/src/main/java/fr/ird/observe/test/spi/{DatabaseVersionConfiguration.java => DatabaseNameConfigurations.java} (75%) copy observe-test-data/src/main/java/fr/ird/observe/test/spi/{DatabaseVersionConfiguration.java => DatabaseVersionConfigurations.java} (79%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 08c1cd6fd0e527dd198737354d04c8ec8bdb12b8 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:48:35 2016 +0200 Make repeatable test spi annotations --- .../observe/test/spi/CopyDatabaseConfiguration.java | 3 +++ ...figuration.java => CopyDatabaseConfigurations.java} | 6 +++--- .../fr/ird/observe/test/spi/DatabaseClassifier.java | 18 ++++++++++++++++++ .../observe/test/spi/DatabaseNameConfiguration.java | 5 +++++ ...figuration.java => DatabaseNameConfigurations.java} | 8 +++----- .../observe/test/spi/DatabaseVersionConfiguration.java | 3 +++ ...uration.java => DatabaseVersionConfigurations.java} | 5 ++--- 7 files changed, 37 insertions(+), 11 deletions(-) diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java index f63e548..7b8f4ec 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java @@ -1,6 +1,7 @@ package fr.ird.observe.test.spi; import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -12,6 +13,8 @@ import java.lang.annotation.Target; */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) +@Repeatable(CopyDatabaseConfigurations.class) public @interface CopyDatabaseConfiguration { + DatabaseClassifier classifier() default DatabaseClassifier.DEFAULT; } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfigurations.java similarity index 74% copy from observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java copy to observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfigurations.java index f63e548..2e240a4 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/CopyDatabaseConfigurations.java @@ -6,12 +6,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Created on 26/12/15. + * Created on 04/07/16. * * @author Tony Chemit - chemit@codelutin.com */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) -public @interface CopyDatabaseConfiguration { - +public @interface CopyDatabaseConfigurations { + CopyDatabaseConfiguration[] value(); } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseClassifier.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseClassifier.java new file mode 100644 index 0000000..bfcfccd --- /dev/null +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseClassifier.java @@ -0,0 +1,18 @@ +package fr.ird.observe.test.spi; + +/** + * Created on 04/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum DatabaseClassifier { + + /** + * classifier par défault (si aucun classifier n'est défini de manière explicite). + */ + DEFAULT, + /** + * classifier utilisé lors des tests de synchronisation où une seconde source de données est requies. + */ + CENTRAL +} diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfiguration.java index 5d37dfe..95d9d1f 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfiguration.java @@ -3,6 +3,7 @@ package fr.ird.observe.test.spi; import fr.ird.observe.test.DatabaseName; import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -14,8 +15,12 @@ import java.lang.annotation.Target; */ @Target(value = {ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) +@Repeatable(DatabaseNameConfigurations.class) public @interface DatabaseNameConfiguration { DatabaseName value() default DatabaseName.referentiel; + DatabaseClassifier classifier() default DatabaseClassifier.DEFAULT; + + } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfigurations.java similarity index 75% copy from observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java copy to observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfigurations.java index 6bd1c9d..cb3a40f 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseNameConfigurations.java @@ -6,14 +6,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * Created on 26/12/15. + * Created on 04/07/16. * * @author Tony Chemit - chemit@codelutin.com */ @Target(value = {ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) -public @interface DatabaseVersionConfiguration { - - String value() default ""; - +public @interface DatabaseNameConfigurations { + DatabaseNameConfiguration[] value(); } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java index 6bd1c9d..f4bd8c5 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java @@ -1,6 +1,7 @@ package fr.ird.observe.test.spi; import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @@ -12,8 +13,10 @@ import java.lang.annotation.Target; */ @Target(value = {ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) +@Repeatable(DatabaseVersionConfigurations.class) public @interface DatabaseVersionConfiguration { String value() default ""; + DatabaseClassifier classifier() default DatabaseClassifier.DEFAULT; } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfigurations.java similarity index 79% copy from observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java copy to observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfigurations.java index 6bd1c9d..9a0ab09 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfiguration.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/spi/DatabaseVersionConfigurations.java @@ -12,8 +12,7 @@ import java.lang.annotation.Target; */ @Target(value = {ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) -public @interface DatabaseVersionConfiguration { - - String value() default ""; +public @interface DatabaseVersionConfigurations { + DatabaseVersionConfiguration[] value(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit f15e4803d79471677656f43f79677b9c575db90c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:49:04 2016 +0200 Make possible to use multiple database in tests --- .../services/ApplicationContextResource.java | 68 ++++++++++++++++++++-- .../ird/observe/services/DataSourceResource.java | 50 ++++++++++++++-- .../main/java/fr/ird/observe/test/TestHelper.java | 11 ---- 3 files changed, 108 insertions(+), 21 deletions(-) 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 7732a72..cdd3833 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 @@ -37,6 +37,8 @@ import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.test.ObserveFixtures; import fr.ird.observe.test.TestHelper; +import fr.ird.observe.test.spi.CopyDatabaseConfiguration; +import fr.ird.observe.test.spi.DatabaseClassifier; import fr.ird.observe.test.spi.DatabaseNameConfiguration; import fr.ird.observe.test.spi.DatabaseVersionConfiguration; import org.apache.commons.logging.Log; @@ -51,6 +53,7 @@ import org.nuiton.version.Versions; import java.io.File; import java.io.IOException; +import java.lang.annotation.Annotation; import java.nio.file.Files; import java.nio.file.Path; import java.util.Locale; @@ -77,7 +80,10 @@ public class ApplicationContextResource implements TestRule { protected String dbVersion; - public ApplicationContextResource() { + protected final DatabaseClassifier classifier; + + public ApplicationContextResource(DatabaseClassifier classifier) { + this.classifier = classifier; this.speciesListConfiguration = ObserveSpeciesListConfiguration.newDefaultConfiguration(); this.serviceFactory = new ObserveServiceFactoryTopia() { @@ -90,7 +96,10 @@ public class ApplicationContextResource implements TestRule { serviceFactory.setMainServiceFactory(serviceFactory); dataSourcesForTestManager = new DataSourcesForTestManager(); + } + public ApplicationContextResource() { + this(DatabaseClassifier.DEFAULT); } public ObserveDataSourceConfigurationTopiaH2 createDataSource(Version dbVersion, String dbName, File targetPath) throws DataSourceCreateWithNoReferentialImportException, IOException, IncompatibleDataSourceCreateConfigurationException, DatabaseNotFoundException, DatabaseConnexionNotAuthorizedException, BabModelVersionException { @@ -202,12 +211,12 @@ public class ApplicationContextResource implements TestRule { TestHelper.initTest(testClass); - DatabaseNameConfiguration databaseNameConfiguration = TestHelper.getAnnotation(testClass, DatabaseNameConfiguration.class); + DatabaseNameConfiguration databaseNameConfiguration = getDatabaseNameConfigurationAnnotation(testClass, classifier); if (databaseNameConfiguration != null) { dbName = databaseNameConfiguration.value().name(); } - DatabaseVersionConfiguration databaseVersionConfiguration = TestHelper.getAnnotation(testClass, DatabaseVersionConfiguration.class); + DatabaseVersionConfiguration databaseVersionConfiguration = getDatabaseVersionConfigurationAnnotation(testClass, classifier); if (databaseVersionConfiguration != null) { dbVersion = databaseVersionConfiguration.value(); } @@ -260,7 +269,11 @@ public class ApplicationContextResource implements TestRule { } public File createTemporaryFile(String suffix) { - return temporaryDirectoryRoot.resolve(System.nanoTime()+suffix).toFile(); + return temporaryDirectoryRoot.resolve(System.nanoTime() + suffix).toFile(); + } + + public DatabaseClassifier getClassifier() { + return classifier; } /** @@ -322,4 +335,51 @@ public class ApplicationContextResource implements TestRule { } + private DatabaseNameConfiguration getDatabaseNameConfigurationAnnotation(Class<?> testClass, DatabaseClassifier classifier) { + + DatabaseNameConfiguration[] annotations = getAnnotations(testClass, DatabaseNameConfiguration.class); + + for (DatabaseNameConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + + private DatabaseVersionConfiguration getDatabaseVersionConfigurationAnnotation(Class<?> testClass, DatabaseClassifier classifier) { + + DatabaseVersionConfiguration[] annotations = getAnnotations(testClass, DatabaseVersionConfiguration.class); + + for (DatabaseVersionConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + + private CopyDatabaseConfiguration getCopyDatabaseConfigurationAnnotation(Class<?> testClass, DatabaseClassifier classifier) { + + CopyDatabaseConfiguration[] annotations = getAnnotations(testClass, CopyDatabaseConfiguration.class); + + for (CopyDatabaseConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + + private <E extends Annotation> E[] getAnnotations(Class<?> clazz, Class<E> annotationType) { + + E[] annotations = clazz.getAnnotationsByType(annotationType); + + if (annotations.length == 0 && clazz.getSuperclass() != null) { + annotations = getAnnotations(clazz.getSuperclass(), annotationType); + } + return annotations; + } + + } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/DataSourceResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/DataSourceResource.java index 32ec9f1..d6302e1 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/DataSourceResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/DataSourceResource.java @@ -39,6 +39,7 @@ import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.ObserveReferentialCache; import fr.ird.observe.test.TestHelper; import fr.ird.observe.test.spi.CopyDatabaseConfiguration; +import fr.ird.observe.test.spi.DatabaseClassifier; import fr.ird.observe.test.spi.DatabaseNameConfiguration; import fr.ird.observe.test.spi.DatabaseVersionConfiguration; import org.apache.commons.logging.Log; @@ -249,7 +250,7 @@ public class DataSourceResource implements TestRule { String dbVersionStr; - DatabaseNameConfiguration databaseNameConfiguration = testClassMethod.getAnnotation(DatabaseNameConfiguration.class); + DatabaseNameConfiguration databaseNameConfiguration = getDatabaseNameConfigurationAnnotation(testClassMethod, applicationContextResource.getClassifier()); if (databaseNameConfiguration != null) { dbName = databaseNameConfiguration.value().name(); } else { @@ -257,7 +258,7 @@ public class DataSourceResource implements TestRule { } Preconditions.checkState(!Strings.isNullOrEmpty(dbName), "Pas de nom de base spécifié"); - DatabaseVersionConfiguration databaseVersionConfiguration = testClassMethod.getAnnotation(DatabaseVersionConfiguration.class); + DatabaseVersionConfiguration databaseVersionConfiguration = getDatabaseVersionConfigurationAnnotation(testClassMethod, applicationContextResource.getClassifier()); if (databaseVersionConfiguration != null) { dbVersionStr = databaseVersionConfiguration.value(); } else { @@ -266,14 +267,14 @@ public class DataSourceResource implements TestRule { Preconditions.checkState(!Strings.isNullOrEmpty(dbVersionStr), "Pas de version de base spécifié"); dbVersion = Versions.valueOf(dbVersionStr); - CopyDatabaseConfiguration copyDatabaseConfiguration = testClassMethod.getAnnotation(CopyDatabaseConfiguration.class); + CopyDatabaseConfiguration copyDatabaseConfiguration = getCopyDatabaseConfigurationAnnotation(testClassMethod, applicationContextResource.getClassifier()); useSharedDatabase = copyDatabaseConfiguration == null; if (log.isDebugEnabled()) { log.debug("Starts " + testClass.getName() + "::" + methodName); } - testDirectory = TestHelper.newFile(methodName); + testDirectory = TestHelper.newFile(methodName + "-" + applicationContextResource.getClassifier()); Path temporaryDirectoryRoot = new File(testDirectory, "tmp").toPath(); @@ -282,8 +283,8 @@ public class DataSourceResource implements TestRule { applicationContextResource.setTemporaryDirectoryRoot(temporaryDirectoryRoot); File databasePath = useSharedDatabase - ? null - : getTestDirectory().toPath().resolve("localDb").toFile(); + ? null + : getTestDirectory().toPath().resolve("localDb").toFile(); dataSourceConfiguration = applicationContextResource.createDataSource(dbVersion, this.dbName, databasePath); @@ -306,4 +307,41 @@ public class DataSourceResource implements TestRule { applicationContextResource.setTemporaryDirectoryRoot(null); } + + private DatabaseNameConfiguration getDatabaseNameConfigurationAnnotation(Method testClassMethod, DatabaseClassifier classifier) { + + DatabaseNameConfiguration[] annotations = testClassMethod.getAnnotationsByType(DatabaseNameConfiguration.class); + + for (DatabaseNameConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + + private DatabaseVersionConfiguration getDatabaseVersionConfigurationAnnotation(Method testClassMethod, DatabaseClassifier classifier) { + + DatabaseVersionConfiguration[] annotations = testClassMethod.getAnnotationsByType(DatabaseVersionConfiguration.class); + + for (DatabaseVersionConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + + private CopyDatabaseConfiguration getCopyDatabaseConfigurationAnnotation(Method testClassMethod, DatabaseClassifier classifier) { + + CopyDatabaseConfiguration[] annotations = testClassMethod.getAnnotationsByType(CopyDatabaseConfiguration.class); + + for (CopyDatabaseConfiguration annotation : annotations) { + if (classifier.equals(annotation.classifier())) { + return annotation; + } + } + return null; + } + } diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java b/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java index e5fd474..867a896 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java @@ -37,7 +37,6 @@ import org.nuiton.version.Versions; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.lang.annotation.Annotation; import java.lang.reflect.Modifier; import java.net.URL; import java.util.List; @@ -187,14 +186,4 @@ public abstract class TestHelper { } } - - public static <E extends Annotation> E getAnnotation(Class<?> clazz, Class<E> annotationType) { - - E dataSourceTestConfiguration = clazz.getAnnotation(annotationType); - - if (dataSourceTestConfiguration == null && clazz.getSuperclass() != null) { - dataSourceTestConfiguration = getAnnotation(clazz.getSuperclass(), annotationType); - } - return dataSourceTestConfiguration; - } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 6d8430e9534417d6a65ec4421da2c6deba34f1e5 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:50:16 2016 +0200 Make service inheritates ObserveService --- .../synchro/UnidirectionalReferentialSynchronizeLocalService.java | 3 ++- .../synchro/UnidirectionalReferentialSynchronizeRemoteService.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java index 0c2caa2..7a08962 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalService.java @@ -1,5 +1,6 @@ package fr.ird.observe.services.service.actions.synchro; +import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.spi.NoDataAccess; import fr.ird.observe.services.spi.PostRequest; @@ -18,7 +19,7 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public interface UnidirectionalReferentialSynchronizeLocalService { +public interface UnidirectionalReferentialSynchronizeLocalService extends ObserveService { /** * Récupération sur la source à synchroniser des versions de ses référentiels. diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteService.java index 44d15a1..2168fad 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteService.java @@ -1,5 +1,6 @@ package fr.ird.observe.services.service.actions.synchro; +import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.spi.ReadReferentialPermission; @@ -12,7 +13,7 @@ import fr.ird.observe.services.spi.ReadReferentialPermission; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public interface UnidirectionalReferentialSynchronizeRemoteService { +public interface UnidirectionalReferentialSynchronizeRemoteService extends ObserveService { /** * Récupération sur la source centrale du différentiel des référentiel. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 22443b9591d8e5895ed86ce6d0ac61bc9139f73c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:51:00 2016 +0200 In sql generator we must to keep same order of parameters values + use default primitive values --- .../synchro/InsertSqlStatementGenerator.java | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java index 312def0..9dcd36c 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java @@ -13,6 +13,8 @@ import org.nuiton.util.beans.BinderFactory; import java.util.Collection; import java.util.Date; import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Set; @@ -71,7 +73,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { Set<String> propertyNamesSet = metadataEntity.getProperties().keySet(); this.simplePropertyNames = propertyNamesSet.toArray(new String[propertyNamesSet.size()]); Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); - this.manyToOneAssociationNames = propertyNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); + this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations(); this.manyToManyAssociations = new LinkedHashSet<>(); @@ -88,15 +90,15 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { public String generateSql(R referentialDto) { - Set<String> parameters = new LinkedHashSet<>(); + List<String> parameters = new LinkedList<>(); addStringParameter(referentialDto.getId(), parameters); addOtherTypeParameter(referentialDto.getVersion(), parameters); addDateParameter(referentialDto.getCreateDate(), parameters); - Map<String, Object> simpleParameters = binder.obtainProperties(referentialDto, true, simplePropertyNames); - for (Object parameterValue : simpleParameters.values()) { - + Map<String, Object> simpleParameters = binder.obtainProperties(referentialDto, true, true, simplePropertyNames); + for (String simplePropertyName : simplePropertyNames) { + Object parameterValue = simpleParameters.get(simplePropertyName); if (parameterValue == null) { addNullParameter(parameters); continue; @@ -114,12 +116,11 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { continue; } addOtherTypeParameter(parameterValue, parameters); - } - Map<String, Object> compositionParameters = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); - for (Object parameterValue : compositionParameters.values()) { - + Map<String, Object> manyToOneParameters = binder.obtainProperties(referentialDto, true, true, manyToOneAssociationNames); + for (String manyToOneAssociationName : manyToOneAssociationNames) { + Object parameterValue = manyToOneParameters.get(manyToOneAssociationName); if (parameterValue == null) { addNullParameter(parameters); continue; @@ -131,7 +132,6 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { if (parameterValue instanceof ReferentialReference) { addReferentialReferenceParameter((ReferentialReference) parameterValue, parameters); } - } String result = String.format(INSERT_STATEMENT, @@ -201,31 +201,31 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { return columnNames; } - private void addNullParameter(Set<String> parameters) { + private void addNullParameter(List<String> parameters) { parameters.add("NULL"); } - private void addStringParameter(String parameter, Set<String> parameters) { + private void addStringParameter(String parameter, List<String> parameters) { parameters.add("'" + parameter.replaceAll("'", "''") + "'"); } - private void addDateParameter(Date parameter, Set<String> parameters) { + private void addDateParameter(Date parameter, List<String> parameters) { parameters.add("'" + parameter + "'"); } - private void addEnumParameter(Enum parameter, Set<String> parameters) { + private void addEnumParameter(Enum parameter, List<String> parameters) { parameters.add("" + parameter.ordinal()); } - private void addOtherTypeParameter(Object parameter, Set<String> parameters) { + private void addOtherTypeParameter(Object parameter, List<String> parameters) { parameters.add("" + parameter); } - private void addReferentialReferenceParameter(ReferentialReference parameter, Set<String> parameters) { + private void addReferentialReferenceParameter(ReferentialReference parameter, List<String> parameters) { addStringParameter(parameter.getId(), parameters); } - private void addReferentialDtoParameter(ReferentialDto parameter, Set<String> parameters) { + private void addReferentialDtoParameter(ReferentialDto parameter, List<String> parameters) { addStringParameter(parameter.getId(), parameters); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 38120a9eefb3099e883095df8dacfd43ee58ea78 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:52:19 2016 +0200 Do not treat LastUpdateDate entity as an referential one + add code for replacement sql --- ...idirectionalReferentialSynchronizeLocalServiceTopia.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java index 79ab42f..7d8a7dc 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -11,6 +11,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; import org.nuiton.topia.persistence.support.TopiaSqlWork; import java.sql.Connection; @@ -42,6 +43,9 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser LocalReferentialStates localReferentialStates = new LocalReferentialStates(); for (ObserveEntityEnum referenceEntity : Entities.REFERENCE_ENTITIES) { + if (ObserveEntityEnum.LastUpdateDate.equals(referenceEntity)) { + continue; + } Class entityType = referenceEntity.getContract(); getLocalSourceReferentialVersions0(referenceEntity.name(), entityType, localReferentialStates); } @@ -84,7 +88,8 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser Class entityType = entityEnum.getContract(); Class<R> dtoType = BinderEngine.get().getReferentialDtoType(entityType); - TopiaMetadataEntity metadataEntity = serviceContext.getTopiaApplicationContext().getMetadataModel().getEntity(referentialName); + TopiaMetadataModel metadataModel = serviceContext.getTopiaApplicationContext().getMetadataModel(); + TopiaMetadataEntity metadataEntity = metadataModel.getEntity(referentialName); if (request.withReferentialToAdd()) { InsertSqlStatementGenerator<R> sqlStatementGenerator = new InsertSqlStatementGenerator<>(metadataEntity, dtoType); @@ -106,7 +111,11 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser if (request.withReferentialToReplace()) { - //TODO + ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName); + for (Map.Entry<String, String> entry : request.getReferentialToReplace().entrySet()) { + String sql = sqlStatementGenerator.generateSql(entry.getKey(), entry.getValue()); + result.add(sql); + } } if (request.withReferentialToRemove()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit f92e02bdadf623b3dc584ff662afc2181ec2f629 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 17:52:27 2016 +0200 Do not treat LastUpdateDate entity as an referential one --- ...nidirectionalReferentialSynchronizeRemoteServiceTopia.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java index 9f65167..ce860fc 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java @@ -35,8 +35,15 @@ public class UnidirectionalReferentialSynchronizeRemoteServiceTopia extends Obse @Override public RemoteReferentialDiff getReferentialDifferential(LocalReferentialStates localReferentialStates) { + if (log.isTraceEnabled()) { + log.trace("getReferentialDifferential(" + localReferentialStates + ")"); + } + RemoteReferentialDiff result = new RemoteReferentialDiff(); for (ObserveEntityEnum referenceEntity : Entities.REFERENCE_ENTITIES) { + if (ObserveEntityEnum.LastUpdateDate.equals(referenceEntity)) { + continue; + } Class entityType = referenceEntity.getContract(); getReferentialDifferential0(referenceEntity.name(), entityType, localReferentialStates, result); } @@ -71,7 +78,7 @@ public class UnidirectionalReferentialSynchronizeRemoteServiceTopia extends Obse for (E centralReferentialEntity : dao) { String id = centralReferentialEntity.getTopiaId(); - Long localVersion = localReferentialVersions.get(id); + Long localVersion = localReferentialVersions == null ? null : localReferentialVersions.get(id); if (localVersion == null) { @@ -100,7 +107,7 @@ public class UnidirectionalReferentialSynchronizeRemoteServiceTopia extends Obse } // entités supprimées - Set<String> idsToDelete = new LinkedHashSet<>(localReferentialVersions.keySet()); + Set<String> idsToDelete = localReferentialVersions == null ? new LinkedHashSet<>() : new LinkedHashSet<>(localReferentialVersions.keySet()); List<String> centralIds = dao.findAllIds(); idsToDelete.removeAll(centralIds); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 4ea400786fc96c957d130f6d4a1763285460fa9e Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 18:04:09 2016 +0200 start a test for unidirectional referential synchronization (see #7739) --- .../UnidirectionalSynchronizeReferentialTest.java | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java new file mode 100644 index 0000000..b9b9e60 --- /dev/null +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java @@ -0,0 +1,84 @@ +package fr.ird.observe.services.service.actions.synchro; + +import fr.ird.observe.services.ApplicationContextResource; +import fr.ird.observe.services.DataSourceResource; +import fr.ird.observe.services.service.AbstractServiceTopiaTest; +import fr.ird.observe.test.DatabaseName; +import fr.ird.observe.test.ObserveFixtures; +import fr.ird.observe.test.spi.CopyDatabaseConfiguration; +import fr.ird.observe.test.spi.DatabaseClassifier; +import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import fr.ird.observe.test.spi.DatabaseVersionConfiguration; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import java.util.Map; + +/** + * Created on 04/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTopiaTest { + + @ClassRule + public static final ApplicationContextResource applicationContextResourceCentral = new ApplicationContextResource(DatabaseClassifier.CENTRAL); + + @Rule + public final DataSourceResource dataSourceResourceCentral = new DataSourceResource(applicationContextResourceCentral); + + private UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine; + + @Before + public void setUp() throws Exception { + UnidirectionalReferentialSynchronizeLocalService localService = dataSourceResource.newService(UnidirectionalReferentialSynchronizeLocalService.class); + UnidirectionalReferentialSynchronizeRemoteService remoteService = dataSourceResourceCentral.newService(UnidirectionalReferentialSynchronizeRemoteService.class); + referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService); + } + + @DatabaseNameConfiguration(DatabaseName.empty_h2) + @CopyDatabaseConfiguration + @DatabaseNameConfiguration(value = DatabaseName.dataForTestSeine, classifier = DatabaseClassifier.CENTRAL) + @DatabaseVersionConfiguration(value = ObserveFixtures.DEFAULT_VERSION, classifier = DatabaseClassifier.CENTRAL) + @Test + public void testSynchronizeFromEmptyDatabase() { + + referentialSynchronizeEngine.run(new UnidirectionalReferentialSynchronizeEngine.Callback() { + + @Override + public Map<String, String> askUserToReplaceRemovedReferentials(UnidirectionalReferentialSynchronizeEngine.CallbackRequest request) { + throw new IllegalStateException(); + } + + @Override + public Map<String, String> askUserToReplaceDisabledReferentials(UnidirectionalReferentialSynchronizeEngine.CallbackRequest request) { + throw new IllegalStateException(); + } + + }); + } + + @DatabaseNameConfiguration(DatabaseName.dataForTestSeine) + @CopyDatabaseConfiguration + @DatabaseNameConfiguration(value = DatabaseName.dataForTestSeine, classifier = DatabaseClassifier.CENTRAL) + @DatabaseVersionConfiguration(value = ObserveFixtures.DEFAULT_VERSION, classifier = DatabaseClassifier.CENTRAL) + @Test + public void testSynchronizeWithNochange() { + + referentialSynchronizeEngine.run(new UnidirectionalReferentialSynchronizeEngine.Callback() { + + @Override + public Map<String, String> askUserToReplaceRemovedReferentials(UnidirectionalReferentialSynchronizeEngine.CallbackRequest request) { + throw new IllegalStateException(); + } + + @Override + public Map<String, String> askUserToReplaceDisabledReferentials(UnidirectionalReferentialSynchronizeEngine.CallbackRequest request) { + throw new IllegalStateException(); + } + + }); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm