Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 89eab94a by Tony Chemit at 2022-03-12T14:52:03+01:00 No more states in topia application context, all resources are in the dedicated resources class. This one is a singleton. So any application scope can be access without any topia application context instance \o/ - - - - - fb09ba41 by Tony Chemit at 2022-03-12T14:52:28+01:00 Synchro simple du référentiel, associations espèce/océan - See ultreiaio/ird-observe#2208 - - - - - b53909f5 by Tony Chemit at 2022-03-12T15:45:56+01:00 Make any resource lazy loaded by a SingletonSupplier - See ultreiaio/topia-extension#115 - - - - - 0cffc6c3 by Tony Chemit at 2022-03-12T15:46:46+01:00 Add TagValues class from observe-toolkit - See ultreiaio/topia-extension#116 - - - - - 53b91978 by Tony Chemit at 2022-03-12T16:29:50+01:00 Make any resource lazy loaded by a SingletonSupplier - See ultreiaio/topia-extension#115 - - - - - 5075e882 by Tony Chemit at 2022-03-12T16:30:50+01:00 topia snapshot - - - - - d712a51b by Tony Chemit at 2022-03-12T17:50:26+01:00 be able to change now in test + be able to copy db with classifier - - - - - 0a93385d by Tony Chemit at 2022-03-12T17:50:39+01:00 be able to change now in test + be able to copy db with classifier - - - - - 798492d0 by Tony Chemit at 2022-03-12T18:08:39+01:00 Synchro simple du référentiel, associations espèce/océan - Closes #2208 - - - - - 13 changed files: - client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java - client/datasource/editor/spi/pom.xml - client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/table/GenerateContentTableUITableModel.java - core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java - core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java - core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java - core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceRead.java - core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java - core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/DifferentialModelTest.java - + core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java - core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java - pom.xml Changes: ===================================== client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/AdminActionModel.java ===================================== @@ -101,7 +101,7 @@ public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> imp public DifferentialModelBuilder newDifferentialModelBuilder(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) { - return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService(), rightSource.getReferentialService()); + return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService()::differentialMetaModel,leftSource.getReferentialService(), rightSource.getReferentialService()); } public SynchronizeEngine newReferentialSynchronizeEngine(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) { ===================================== client/datasource/editor/spi/pom.xml ===================================== @@ -70,6 +70,10 @@ <groupId>io.ultreia.java4all</groupId> <artifactId>java-bean</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all.topia</groupId> + <artifactId>persistence</artifactId> + </dependency> <dependency> <groupId>io.ultreia.java4all</groupId> <artifactId>java-lang</artifactId> ===================================== client/datasource/editor/spi/src/main/java/fr/ird/observe/client/datasource/editor/spi/content/data/table/GenerateContentTableUITableModel.java ===================================== @@ -28,7 +28,8 @@ import fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTab import fr.ird.observe.client.util.table.JXTableUtil; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReference; -import fr.ird.observe.spi.TagValues; +import fr.ird.observe.spi.ProjectPackagesDefinition; +import org.nuiton.topia.persistence.TagValues; import fr.ird.observe.spi.decoration.I18nDecoratorHelper; import fr.ird.observe.toolkit.templates.ToolkitTagValues; import io.ultreia.java4all.bean.definition.JavaBeanDefinition; @@ -119,7 +120,7 @@ public class GenerateContentTableUITableModel extends GenerateContentTableUISupp @Override public void run() { labelsBuilder = I18nDecoratorHelper.get().getDefaultLabelsBuilder(); - dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe"); + dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe", ProjectPackagesDefinition::cleanType); super.run(); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -30,12 +30,17 @@ import fr.ird.observe.dto.db.DatabaseNotFoundException; import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto; import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.entities.data.DataGroupByEntity; -import fr.ird.observe.spi.module.ObserveBusinessProject; +import fr.ird.observe.spi.module.BusinessProject; import fr.ird.observe.spi.referential.differential.DifferentialMetaModel; +import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder; +import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel; +import fr.ird.observe.spi.service.ServiceContext; import io.ultreia.java4all.util.Version; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.nuiton.topia.persistence.TagValues; import org.nuiton.topia.persistence.TopiaConfigurationExtension; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaIdFactory; @@ -58,6 +63,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; import java.util.Collection; +import java.util.Date; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -107,8 +113,18 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } @Override - protected final DifferentialMetaModel newDifferentialMetaModel() { - return new DifferentialMetaModel(referentialForReplicationDto(), ObserveBusinessProject.get().getReferentialBusinessProperties()); + public final OneSideSqlResultBuilder newOneSideSqlResultBuilder(ServiceContext context, Date defaultLastUpdateDate) { + return ObserveTopiaEntitySqlModelResource.get().newOneSideSqlResultBuilder(context, defaultLastUpdateDate); + } + + @Override + public final TagValues getPersistenceTagValues() { + return ObserveTopiaEntitySqlModelResource.get().getPersistenceTagValues(); + } + + @Override + public final TagValues getDtoTagValues() { + return ObserveTopiaEntitySqlModelResource.get().getDtoTagValues(); } @Override @@ -156,6 +172,21 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return ObserveTopiaEntitySqlModelResource.get().getMetaModelPaths(); } + @Override + public Set<Class<? extends ReferentialDto>> referentialForReplicationDto() { + return ObserveTopiaEntitySqlModelResource.get().referentialForReplicationDto(); + } + + @Override + public DifferentialMetaModel getDifferentialMetaModel(BusinessProject businessProject) { + return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(businessProject); + } + + @Override + public ToolkitEntitySqlScriptModel getScriptModel() { + return ObserveTopiaEntitySqlModelResource.get().getScriptModel(); + } + public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { log.debug(String.format("Create topia application context: %s", this)); if (dataSourceCreateConfiguration.isImportDatabase()) { ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocalSupport.java ===================================== @@ -30,6 +30,7 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.dto.result.SaveResultDto; +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource; import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; @@ -101,7 +102,7 @@ class ReferentialServiceLocalSupport extends ObserveServiceLocal implements Refe @Override public DifferentialMetaModel differentialMetaModel() { - return getTopiaApplicationContext().getDifferentialMetaModel(); + return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()); } @Override ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/referential/SynchronizeServiceLocalSupport.java ===================================== @@ -27,6 +27,7 @@ import fr.ird.observe.dto.ToolkitIdDtoBean; import fr.ird.observe.dto.ToolkitIdLabel; import fr.ird.observe.dto.referential.ReferentialDto; import fr.ird.observe.entities.LastUpdateDateTopiaDao; +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource; import fr.ird.observe.services.local.service.ObserveServiceLocal; import fr.ird.observe.services.service.referential.SynchronizeService; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; @@ -69,7 +70,7 @@ public class SynchronizeServiceLocalSupport extends ObserveServiceLocal implemen @Override public OneSideSqlResult produceSqlResult(OneSideSqlRequest request) { - return getTopiaApplicationContext() + return ObserveTopiaEntitySqlModelResource.get() .newOneSideSqlResultBuilder(this, now()) .build(request); } ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java ===================================== @@ -134,18 +134,28 @@ public class LocalTestClassResource extends TestClassResourceSupport { ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) { @Override public Date now() { - return ObserveFixtures.DATE; + return generateNow?new Date():ObserveFixtures.DATE; } }; serviceInitializer.setConfiguration(dataSourceConfiguration); return serviceFactory.newService(serviceInitializer, serviceType); } + private boolean generateNow; + + public boolean isGenerateNow() { + return generateNow; + } + + public void setGenerateNow(boolean generateNow) { + this.generateNow = generateNow; + } + public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) { ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){ @Override public Date now() { - return ObserveFixtures.DATE; + return generateNow?new Date():ObserveFixtures.DATE; } }; return serviceFactory.newService(serviceInitializer, serviceType); ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceRead.java ===================================== @@ -34,6 +34,7 @@ import fr.ird.observe.security.Permission; import fr.ird.observe.services.ObserveServicesProvider; import fr.ird.observe.services.service.AnonymousService; import fr.ird.observe.services.service.ObserveService; +import fr.ird.observe.test.spi.DatabaseClassifier; import io.ultreia.java4all.util.Version; import org.junit.runner.Description; @@ -53,6 +54,14 @@ public class LocalTestMethodResourceRead extends LocalTestClassResource { private ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration; private ObserveDataSourceConnection dataSourceConnection; + public LocalTestMethodResourceRead(DatabaseClassifier classifier) { + super(classifier); + } + + public LocalTestMethodResourceRead() { + this(DatabaseClassifier.DEFAULT); + } + public <S extends ObserveService> S newService(Class<S> serviceType) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException { ObserveDataSourceConnection dataSourceConnection = getDataSourceConnection(); if (dataSourceConnection == null) { ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java ===================================== @@ -41,6 +41,7 @@ import fr.ird.observe.spi.module.ObserveBusinessProject; import fr.ird.observe.test.ObserveTestConfiguration; import fr.ird.observe.test.TestMethodResourceSupportWrite; import fr.ird.observe.test.spi.CopyDatabaseConfiguration; +import fr.ird.observe.test.spi.DatabaseClassifier; import io.ultreia.java4all.util.Version; import org.junit.runner.Description; import org.nuiton.topia.persistence.TopiaDao; @@ -134,9 +135,10 @@ public class LocalTestMethodResourceWrite extends TestMethodResourceSupportWrite Objects.requireNonNull(getDbVersion(), "Pas de version de base spécifié"); Objects.requireNonNull(getLogin(), "Pas de login spécifié"); Objects.requireNonNull(getPassword(), "Pas de password spécifié"); - CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, testClassResource.getClassifier()); + DatabaseClassifier classifier = testClassResource.getClassifier(); + CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, classifier); boolean useSharedDatabase = copyDatabaseConfiguration == null; - File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb").toFile(); + File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb-"+classifier).toFile(); dataSourceConfiguration = testClassResource.createDataSourceConfiguration(getDbVersion(), getDbName(), databasePath, getLogin(), getPassword()); } ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/DifferentialModelTest.java ===================================== @@ -24,25 +24,26 @@ package fr.ird.observe.services.local.service.referential; import fr.ird.observe.dto.ProgressionModel; import fr.ird.observe.dto.referential.ReferentialLocale; -import fr.ird.observe.services.local.LocalTestClassResource; -import fr.ird.observe.services.local.LocalTestMethodResourceWrite; +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource; +import fr.ird.observe.services.local.LocalTestMethodResourceRead; import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite; import fr.ird.observe.services.service.DataSourceServiceFixtures; import fr.ird.observe.services.service.referential.ReferentialService; +import fr.ird.observe.spi.module.ObserveBusinessProject; import fr.ird.observe.spi.referential.differential.DifferentialList; import fr.ird.observe.spi.referential.differential.DifferentialModel; import fr.ird.observe.spi.referential.differential.DifferentialType; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.ObserveTestConfiguration; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import fr.ird.observe.test.spi.DatabaseClassifier; +import fr.ird.observe.test.spi.DatabaseLoginConfiguration; import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import fr.ird.observe.test.spi.DatabasePasswordConfiguration; import fr.ird.observe.test.spi.DatabaseVersionConfiguration; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Assert; import org.junit.Before; -import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; @@ -50,14 +51,16 @@ import org.junit.Test; * @author Tony Chemit - dev@tchemit.fr * @since 7.4.0 */ +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION) +@DatabaseLoginConfiguration +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD) +@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) public class DifferentialModelTest extends ServiceLocalTestSupportWrite<ReferentialService> { - @ClassRule - public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL); private static final Logger log = LogManager.getLogger(DifferentialModelTest.class); @Rule - public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL); - + public final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL); private ReferentialService rightReferentialService; public DifferentialModelTest() { @@ -71,15 +74,12 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent } @DatabaseNameConfiguration(DatabaseName.empty) - @CopyDatabaseConfiguration - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) @Test public void testSynchronizeFromEmptyDatabase() { ProgressionModel progressionModel = new ProgressionModel(); progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue())); - DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel); + DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel); Assert.assertNotNull(result); DifferentialList leftSideDifferentialList = result.getLeft(); @@ -91,19 +91,15 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent Assert.assertNotNull(rightSideDifferentialList.getStates()); Assert.assertEquals(DataSourceServiceFixtures.REFERENTIAL_COUNT, rightSideDifferentialList.getStates().size()); Assert.assertTrue(rightSideDifferentialList.getStates().stream().allMatch(s -> DifferentialType.ADDED.equals(s.getDifferentialType()))); - } @DatabaseNameConfiguration(DatabaseName.data) - @CopyDatabaseConfiguration - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) @Test public void testSynchronizeWithNoChange() { ProgressionModel progressionModel = new ProgressionModel(); progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue())); - DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel); + DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel); Assert.assertNotNull(result); DifferentialList leftSideDifferentialList = result.getLeft(); ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java ===================================== @@ -0,0 +1,151 @@ +package fr.ird.observe.services.local.service.referential; + +/*- + * #%L + * ObServe Core :: Services :: Local + * %% + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.dto.ProgressionModel; +import fr.ird.observe.dto.referential.ReferentialDto; +import fr.ird.observe.dto.referential.ReferentialLocale; +import fr.ird.observe.dto.referential.common.OceanReference; +import fr.ird.observe.dto.referential.common.SpeciesDto; +import fr.ird.observe.services.local.LocalTestClassResource; +import fr.ird.observe.services.local.LocalTestMethodResourceWrite; +import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite; +import fr.ird.observe.services.service.referential.ReferentialService; +import fr.ird.observe.services.service.referential.ReferentialServiceFixtures; +import fr.ird.observe.services.service.referential.SynchronizeService; +import fr.ird.observe.spi.referential.SynchronizeEngine; +import fr.ird.observe.spi.referential.UnidirectionalSynchronizeContext; +import fr.ird.observe.spi.referential.UnidirectionalSynchronizeEngine; +import fr.ird.observe.spi.referential.differential.DifferentialModelBuilder; +import fr.ird.observe.spi.referential.synchro.UnidirectionalResult; +import fr.ird.observe.test.DatabaseName; +import fr.ird.observe.test.ObserveTestConfiguration; +import fr.ird.observe.test.ToolkitFixtures; +import fr.ird.observe.test.spi.CopyDatabaseConfiguration; +import fr.ird.observe.test.spi.DatabaseClassifier; +import fr.ird.observe.test.spi.DatabaseLoginConfiguration; +import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import fr.ird.observe.test.spi.DatabasePasswordConfiguration; +import fr.ird.observe.test.spi.DatabaseVersionConfiguration; +import org.junit.Assert; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +import java.util.Set; + +/** + * Created on 04/07/16. + * + * @author Tony Chemit - dev@tchemit.fr + */ +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION) +@DatabaseLoginConfiguration +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD) +@DatabaseNameConfiguration(DatabaseName.referential) +@DatabaseNameConfiguration(value = DatabaseName.referential, classifier = DatabaseClassifier.CENTRAL) +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) +public class UnidirectionalResultIssue2208Test extends ServiceLocalTestSupportWrite<SynchronizeService> { + + @ClassRule + public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL); + @Rule + public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL); + + private DifferentialModelBuilder diffsEngine; + private SynchronizeEngine synchronizeEngine; + private ReferentialServiceFixtures fixtures; + private ReferentialService centralReferentialService; + private ReferentialService localReferentialService; + + public UnidirectionalResultIssue2208Test() { + super(SynchronizeService.class); + } + + @Before + public void setUp() throws Exception { + super.setUp(); + localReferentialService = localTestMethodResource.newService(ReferentialService.class); + centralReferentialService = localTestMethodResourceCentral.newService(ReferentialService.class); + diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localReferentialService::differentialMetaModel, localReferentialService, centralReferentialService); + SynchronizeService centralService = localTestMethodResourceCentral.newService(SynchronizeService.class); + synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), service, centralService); + fixtures = new ReferentialServiceFixtures(); + } + + @CopyDatabaseConfiguration + @CopyDatabaseConfiguration(classifier = DatabaseClassifier.CENTRAL) + @Test + public void testSynchronizeIssue2208() { + + // add ocean to a species in central database + // synchronize + // check in local database that the ocean is there for the given species + + String speciesVariableName = fixtures.getVariableName(SpeciesDto.class).replace(".common.", ".common.common."); + String speciesId = ToolkitFixtures.getVariable(speciesVariableName); + + SpeciesDto localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId); + Assert.assertEquals(1, localSpecies.getOceanSize()); + + SpeciesDto centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId); + Assert.assertEquals(1, centralSpecies.getOceanSize()); + + OceanReference ocean = new OceanReference(); + //FIXME Make it fixture + ocean.setId("fr.ird.referential.common.Ocean#1239832686152#0.7039171539191688"); + centralSpecies.addOcean(ocean); + TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(true); + try { + centralReferentialService.save(centralSpecies); + } finally { + TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(false); + } + centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId); + Assert.assertEquals(2, centralSpecies.getOceanSize()); + + // do synchro + + ProgressionModel progressionModel = new ProgressionModel(); + UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine); + UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel); + UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null); + unidirectionalSynchronizeContext.finish(service); + + Assert.assertNotNull(result); + + Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); + Assert.assertNotNull(referentialNames); + Assert.assertEquals(1, referentialNames.size()); + Assert.assertTrue(referentialNames.contains(SpeciesDto.class)); + + localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId); + Assert.assertEquals(2, localSpecies.getOceanSize()); + Assert.assertEquals(centralSpecies.getTopiaVersion(), localSpecies.getTopiaVersion()); + Assert.assertEquals(centralSpecies.getLastUpdateDate(), localSpecies.getLastUpdateDate()); + Assert.assertEquals(centralSpecies, localSpecies); + + } + +} ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultTest.java ===================================== @@ -28,8 +28,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.entities.LastUpdateDate; import fr.ird.observe.entities.referential.common.LengthLengthParameter; import fr.ird.observe.entities.referential.ll.common.WeightDeterminationMethod; -import fr.ird.observe.services.local.LocalTestClassResource; -import fr.ird.observe.services.local.LocalTestMethodResourceWrite; +import fr.ird.observe.services.local.LocalTestMethodResourceRead; import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite; import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.referential.SynchronizeService; @@ -43,7 +42,9 @@ import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.ObserveTestConfiguration; import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import fr.ird.observe.test.spi.DatabaseClassifier; +import fr.ird.observe.test.spi.DatabaseLoginConfiguration; import fr.ird.observe.test.spi.DatabaseNameConfiguration; +import fr.ird.observe.test.spi.DatabasePasswordConfiguration; import fr.ird.observe.test.spi.DatabaseVersionConfiguration; import io.ultreia.java4all.lang.Objects2; import org.apache.logging.log4j.LogManager; @@ -52,7 +53,6 @@ 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.service.sql.model.TopiaEntitySqlDescriptor; import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptors; @@ -67,16 +67,18 @@ import java.util.Set; * * @author Tony Chemit - dev@tchemit.fr */ +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION) +@DatabaseLoginConfiguration +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD) +@DatabaseNameConfiguration(DatabaseName.data) +@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<SynchronizeService> { @ClassRule - public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL); + public static final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL); private static final Logger log = LogManager.getLogger(UnidirectionalResultTest.class); - @Rule - public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL); - private DifferentialModelBuilder diffsEngine; private SynchronizeEngine synchronizeEngine; - private SynchronizeService localSynchronizeService; public UnidirectionalResultTest() { super(SynchronizeService.class); @@ -85,16 +87,14 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch @Before public void setUp() throws Exception { super.setUp(); - localSynchronizeService = localTestMethodResource.newService(SynchronizeService.class); - diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localTestMethodResource.newService(ReferentialService.class), localTestMethodResourceCentral.newService(ReferentialService.class)); - synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), localSynchronizeService, localTestMethodResourceCentral.newService(SynchronizeService.class)); + ReferentialService service = localTestMethodResource.newService(ReferentialService.class); + diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service::differentialMetaModel, service, localTestMethodResourceCentral.newService(ReferentialService.class)); + synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), this.service, localTestMethodResourceCentral.newService(SynchronizeService.class)); } @DatabaseNameConfiguration(DatabaseName.empty) @CopyDatabaseConfiguration - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) @Test @Ignore // We inject some species with data... Can't continue to migrate data from empty!!! public void testSynchronizeFromEmptyDatabase() { @@ -104,7 +104,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine); UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel); UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null); - unidirectionalSynchronizeContext.finish(localSynchronizeService); + unidirectionalSynchronizeContext.finish(service); Assert.assertNotNull(result); Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); @@ -132,8 +132,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch @DatabaseNameConfiguration(DatabaseName.data) @CopyDatabaseConfiguration - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL) - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL) @Test public void testSynchronizeWithNoChange() { ProgressionModel progressionModel = new ProgressionModel(); @@ -142,7 +140,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine); UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel); UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null); - unidirectionalSynchronizeContext.finish(localSynchronizeService); + unidirectionalSynchronizeContext.finish(service); Assert.assertNotNull(result); Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); @@ -162,7 +160,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch Assert.assertTrue(result.getReferentialReverted(dtoType).isEmpty()); Assert.assertTrue(result.getReferentialAdded(dtoType).isEmpty()); } - } // // Il faut reecrire ce test en clonant une base, y fiasant des modif puis test ===================================== pom.xml ===================================== @@ -121,6 +121,7 @@ </site> </distributionManagement> <properties> + <lib.version.java4all.topia>1.70-SNAPSHOT</lib.version.java4all.topia> <organizationId>ultreiaio</organizationId> <projectId>ird-observe</projectId> <stageId>frirdobserve</stageId> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6c46bff44a9b8590ff9dcae5e... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/6c46bff44a9b8590ff9dcae5e... You're receiving this email because of your account on gitlab.com.