Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
-
89eab94a
by Tony Chemit at 2022-03-12T14:52:03+01:00
-
fb09ba41
by Tony Chemit at 2022-03-12T14:52:28+01:00
-
b53909f5
by Tony Chemit at 2022-03-12T15:45:56+01:00
-
0cffc6c3
by Tony Chemit at 2022-03-12T15:46:46+01:00
-
53b91978
by Tony Chemit at 2022-03-12T16:29:50+01:00
-
5075e882
by Tony Chemit at 2022-03-12T16:30:50+01:00
-
d712a51b
by Tony Chemit at 2022-03-12T17:50:26+01:00
-
0a93385d
by Tony Chemit at 2022-03-12T17:50:39+01:00
-
798492d0
by Tony Chemit at 2022-03-12T18:08:39+01:00
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:
| ... | ... | @@ -101,7 +101,7 @@ public abstract class AdminActionModel extends WizardExtStepModel<AdminStep> imp |
| 101 | 101 | |
| 102 | 102 | |
| 103 | 103 | public DifferentialModelBuilder newDifferentialModelBuilder(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) {
|
| 104 | - return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService(), rightSource.getReferentialService());
|
|
| 104 | + return ReferentialService.createDifferentialModelBuilder(getClientConfig().getReferentialLocale().getLocale(), leftSource.getReferentialService()::differentialMetaModel,leftSource.getReferentialService(), rightSource.getReferentialService());
|
|
| 105 | 105 | }
|
| 106 | 106 | |
| 107 | 107 | public SynchronizeEngine newReferentialSynchronizeEngine(ObserveServicesProvider leftSource, ObserveServicesProvider rightSource) {
|
| ... | ... | @@ -70,6 +70,10 @@ |
| 70 | 70 | <groupId>io.ultreia.java4all</groupId>
|
| 71 | 71 | <artifactId>java-bean</artifactId>
|
| 72 | 72 | </dependency>
|
| 73 | + <dependency>
|
|
| 74 | + <groupId>io.ultreia.java4all.topia</groupId>
|
|
| 75 | + <artifactId>persistence</artifactId>
|
|
| 76 | + </dependency>
|
|
| 73 | 77 | <dependency>
|
| 74 | 78 | <groupId>io.ultreia.java4all</groupId>
|
| 75 | 79 | <artifactId>java-lang</artifactId>
|
| ... | ... | @@ -28,7 +28,8 @@ import fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTab |
| 28 | 28 | import fr.ird.observe.client.util.table.JXTableUtil;
|
| 29 | 29 | import fr.ird.observe.dto.reference.DataDtoReference;
|
| 30 | 30 | import fr.ird.observe.dto.reference.ReferentialDtoReference;
|
| 31 | -import fr.ird.observe.spi.TagValues;
|
|
| 31 | +import fr.ird.observe.spi.ProjectPackagesDefinition;
|
|
| 32 | +import org.nuiton.topia.persistence.TagValues;
|
|
| 32 | 33 | import fr.ird.observe.spi.decoration.I18nDecoratorHelper;
|
| 33 | 34 | import fr.ird.observe.toolkit.templates.ToolkitTagValues;
|
| 34 | 35 | import io.ultreia.java4all.bean.definition.JavaBeanDefinition;
|
| ... | ... | @@ -119,7 +120,7 @@ public class GenerateContentTableUITableModel extends GenerateContentTableUISupp |
| 119 | 120 | @Override
|
| 120 | 121 | public void run() {
|
| 121 | 122 | labelsBuilder = I18nDecoratorHelper.get().getDefaultLabelsBuilder();
|
| 122 | - dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe");
|
|
| 123 | + dtoTagValues = TagValues.dto( /*FIXME Use extraProperties configuration*/"Observe", ProjectPackagesDefinition::cleanType);
|
|
| 123 | 124 | super.run();
|
| 124 | 125 | }
|
| 125 | 126 |
| ... | ... | @@ -30,12 +30,17 @@ import fr.ird.observe.dto.db.DatabaseNotFoundException; |
| 30 | 30 | import fr.ird.observe.dto.db.configuration.DataSourceCreateConfigurationDto;
|
| 31 | 31 | import fr.ird.observe.dto.db.configuration.ObserveDataSourceConfiguration;
|
| 32 | 32 | import fr.ird.observe.dto.db.configuration.topia.ObserveDataSourceConfigurationTopiaH2;
|
| 33 | +import fr.ird.observe.dto.referential.ReferentialDto;
|
|
| 33 | 34 | import fr.ird.observe.entities.data.DataGroupByEntity;
|
| 34 | -import fr.ird.observe.spi.module.ObserveBusinessProject;
|
|
| 35 | +import fr.ird.observe.spi.module.BusinessProject;
|
|
| 35 | 36 | import fr.ird.observe.spi.referential.differential.DifferentialMetaModel;
|
| 37 | +import fr.ird.observe.spi.referential.synchro.OneSideSqlResultBuilder;
|
|
| 38 | +import fr.ird.observe.spi.script.ToolkitEntitySqlScriptModel;
|
|
| 39 | +import fr.ird.observe.spi.service.ServiceContext;
|
|
| 36 | 40 | import io.ultreia.java4all.util.Version;
|
| 37 | 41 | import org.apache.logging.log4j.LogManager;
|
| 38 | 42 | import org.apache.logging.log4j.Logger;
|
| 43 | +import org.nuiton.topia.persistence.TagValues;
|
|
| 39 | 44 | import org.nuiton.topia.persistence.TopiaConfigurationExtension;
|
| 40 | 45 | import org.nuiton.topia.persistence.TopiaEntity;
|
| 41 | 46 | import org.nuiton.topia.persistence.TopiaIdFactory;
|
| ... | ... | @@ -58,6 +63,7 @@ import java.nio.file.Files; |
| 58 | 63 | import java.nio.file.Path;
|
| 59 | 64 | import java.time.Duration;
|
| 60 | 65 | import java.util.Collection;
|
| 66 | +import java.util.Date;
|
|
| 61 | 67 | import java.util.Map;
|
| 62 | 68 | import java.util.Set;
|
| 63 | 69 | import java.util.UUID;
|
| ... | ... | @@ -107,8 +113,18 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat |
| 107 | 113 | }
|
| 108 | 114 | |
| 109 | 115 | @Override
|
| 110 | - protected final DifferentialMetaModel newDifferentialMetaModel() {
|
|
| 111 | - return new DifferentialMetaModel(referentialForReplicationDto(), ObserveBusinessProject.get().getReferentialBusinessProperties());
|
|
| 116 | + public final OneSideSqlResultBuilder newOneSideSqlResultBuilder(ServiceContext context, Date defaultLastUpdateDate) {
|
|
| 117 | + return ObserveTopiaEntitySqlModelResource.get().newOneSideSqlResultBuilder(context, defaultLastUpdateDate);
|
|
| 118 | + }
|
|
| 119 | + |
|
| 120 | + @Override
|
|
| 121 | + public final TagValues getPersistenceTagValues() {
|
|
| 122 | + return ObserveTopiaEntitySqlModelResource.get().getPersistenceTagValues();
|
|
| 123 | + }
|
|
| 124 | + |
|
| 125 | + @Override
|
|
| 126 | + public final TagValues getDtoTagValues() {
|
|
| 127 | + return ObserveTopiaEntitySqlModelResource.get().getDtoTagValues();
|
|
| 112 | 128 | }
|
| 113 | 129 | |
| 114 | 130 | @Override
|
| ... | ... | @@ -156,6 +172,21 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat |
| 156 | 172 | return ObserveTopiaEntitySqlModelResource.get().getMetaModelPaths();
|
| 157 | 173 | }
|
| 158 | 174 | |
| 175 | + @Override
|
|
| 176 | + public Set<Class<? extends ReferentialDto>> referentialForReplicationDto() {
|
|
| 177 | + return ObserveTopiaEntitySqlModelResource.get().referentialForReplicationDto();
|
|
| 178 | + }
|
|
| 179 | + |
|
| 180 | + @Override
|
|
| 181 | + public DifferentialMetaModel getDifferentialMetaModel(BusinessProject businessProject) {
|
|
| 182 | + return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(businessProject);
|
|
| 183 | + }
|
|
| 184 | + |
|
| 185 | + @Override
|
|
| 186 | + public ToolkitEntitySqlScriptModel getScriptModel() {
|
|
| 187 | + return ObserveTopiaEntitySqlModelResource.get().getScriptModel();
|
|
| 188 | + }
|
|
| 189 | + |
|
| 159 | 190 | public void create(ObserveDataSourceConfiguration dataSourceConfiguration, DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException {
|
| 160 | 191 | log.debug(String.format("Create topia application context: %s", this));
|
| 161 | 192 | if (dataSourceCreateConfiguration.isImportDatabase()) {
|
| ... | ... | @@ -30,6 +30,7 @@ import fr.ird.observe.dto.reference.ReferentialDtoReference; |
| 30 | 30 | import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
|
| 31 | 31 | import fr.ird.observe.dto.referential.ReferentialDto;
|
| 32 | 32 | import fr.ird.observe.dto.result.SaveResultDto;
|
| 33 | +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
|
|
| 33 | 34 | import fr.ird.observe.services.local.service.ObserveServiceLocal;
|
| 34 | 35 | import fr.ird.observe.services.service.referential.ReferentialService;
|
| 35 | 36 | import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
|
| ... | ... | @@ -101,7 +102,7 @@ class ReferentialServiceLocalSupport extends ObserveServiceLocal implements Refe |
| 101 | 102 | |
| 102 | 103 | @Override
|
| 103 | 104 | public DifferentialMetaModel differentialMetaModel() {
|
| 104 | - return getTopiaApplicationContext().getDifferentialMetaModel();
|
|
| 105 | + return ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get());
|
|
| 105 | 106 | }
|
| 106 | 107 | |
| 107 | 108 | @Override
|
| ... | ... | @@ -27,6 +27,7 @@ import fr.ird.observe.dto.ToolkitIdDtoBean; |
| 27 | 27 | import fr.ird.observe.dto.ToolkitIdLabel;
|
| 28 | 28 | import fr.ird.observe.dto.referential.ReferentialDto;
|
| 29 | 29 | import fr.ird.observe.entities.LastUpdateDateTopiaDao;
|
| 30 | +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
|
|
| 30 | 31 | import fr.ird.observe.services.local.service.ObserveServiceLocal;
|
| 31 | 32 | import fr.ird.observe.services.service.referential.SynchronizeService;
|
| 32 | 33 | import fr.ird.observe.spi.context.ReferentialDtoEntityContext;
|
| ... | ... | @@ -69,7 +70,7 @@ public class SynchronizeServiceLocalSupport extends ObserveServiceLocal implemen |
| 69 | 70 | |
| 70 | 71 | @Override
|
| 71 | 72 | public OneSideSqlResult produceSqlResult(OneSideSqlRequest request) {
|
| 72 | - return getTopiaApplicationContext()
|
|
| 73 | + return ObserveTopiaEntitySqlModelResource.get()
|
|
| 73 | 74 | .newOneSideSqlResultBuilder(this, now())
|
| 74 | 75 | .build(request);
|
| 75 | 76 | }
|
| ... | ... | @@ -134,18 +134,28 @@ public class LocalTestClassResource extends TestClassResourceSupport { |
| 134 | 134 | ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), dataSourceConfiguration, null) {
|
| 135 | 135 | @Override
|
| 136 | 136 | public Date now() {
|
| 137 | - return ObserveFixtures.DATE;
|
|
| 137 | + return generateNow?new Date():ObserveFixtures.DATE;
|
|
| 138 | 138 | }
|
| 139 | 139 | };
|
| 140 | 140 | serviceInitializer.setConfiguration(dataSourceConfiguration);
|
| 141 | 141 | return serviceFactory.newService(serviceInitializer, serviceType);
|
| 142 | 142 | }
|
| 143 | 143 | |
| 144 | + private boolean generateNow;
|
|
| 145 | + |
|
| 146 | + public boolean isGenerateNow() {
|
|
| 147 | + return generateNow;
|
|
| 148 | + }
|
|
| 149 | + |
|
| 150 | + public void setGenerateNow(boolean generateNow) {
|
|
| 151 | + this.generateNow = generateNow;
|
|
| 152 | + }
|
|
| 153 | + |
|
| 144 | 154 | public <S extends ObserveService> S newService(ObserveDataSourceConnection dataSourceConnection, Class<S> serviceType) {
|
| 145 | 155 | ObserveServiceInitializer serviceInitializer = new ObserveServiceInitializer(getServiceInitializerConfig(), null, dataSourceConnection){
|
| 146 | 156 | @Override
|
| 147 | 157 | public Date now() {
|
| 148 | - return ObserveFixtures.DATE;
|
|
| 158 | + return generateNow?new Date():ObserveFixtures.DATE;
|
|
| 149 | 159 | }
|
| 150 | 160 | };
|
| 151 | 161 | return serviceFactory.newService(serviceInitializer, serviceType);
|
| ... | ... | @@ -34,6 +34,7 @@ import fr.ird.observe.security.Permission; |
| 34 | 34 | import fr.ird.observe.services.ObserveServicesProvider;
|
| 35 | 35 | import fr.ird.observe.services.service.AnonymousService;
|
| 36 | 36 | import fr.ird.observe.services.service.ObserveService;
|
| 37 | +import fr.ird.observe.test.spi.DatabaseClassifier;
|
|
| 37 | 38 | import io.ultreia.java4all.util.Version;
|
| 38 | 39 | import org.junit.runner.Description;
|
| 39 | 40 | |
| ... | ... | @@ -53,6 +54,14 @@ public class LocalTestMethodResourceRead extends LocalTestClassResource { |
| 53 | 54 | private ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration;
|
| 54 | 55 | private ObserveDataSourceConnection dataSourceConnection;
|
| 55 | 56 | |
| 57 | + public LocalTestMethodResourceRead(DatabaseClassifier classifier) {
|
|
| 58 | + super(classifier);
|
|
| 59 | + }
|
|
| 60 | + |
|
| 61 | + public LocalTestMethodResourceRead() {
|
|
| 62 | + this(DatabaseClassifier.DEFAULT);
|
|
| 63 | + }
|
|
| 64 | + |
|
| 56 | 65 | public <S extends ObserveService> S newService(Class<S> serviceType) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, BabModelVersionException {
|
| 57 | 66 | ObserveDataSourceConnection dataSourceConnection = getDataSourceConnection();
|
| 58 | 67 | if (dataSourceConnection == null) {
|
| ... | ... | @@ -41,6 +41,7 @@ import fr.ird.observe.spi.module.ObserveBusinessProject; |
| 41 | 41 | import fr.ird.observe.test.ObserveTestConfiguration;
|
| 42 | 42 | import fr.ird.observe.test.TestMethodResourceSupportWrite;
|
| 43 | 43 | import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
|
| 44 | +import fr.ird.observe.test.spi.DatabaseClassifier;
|
|
| 44 | 45 | import io.ultreia.java4all.util.Version;
|
| 45 | 46 | import org.junit.runner.Description;
|
| 46 | 47 | import org.nuiton.topia.persistence.TopiaDao;
|
| ... | ... | @@ -134,9 +135,10 @@ public class LocalTestMethodResourceWrite extends TestMethodResourceSupportWrite |
| 134 | 135 | Objects.requireNonNull(getDbVersion(), "Pas de version de base spécifié");
|
| 135 | 136 | Objects.requireNonNull(getLogin(), "Pas de login spécifié");
|
| 136 | 137 | Objects.requireNonNull(getPassword(), "Pas de password spécifié");
|
| 137 | - CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, testClassResource.getClassifier());
|
|
| 138 | + DatabaseClassifier classifier = testClassResource.getClassifier();
|
|
| 139 | + CopyDatabaseConfiguration copyDatabaseConfiguration = ObserveTestConfiguration.getCopyDatabaseConfigurationAnnotation(testClassMethod, classifier);
|
|
| 138 | 140 | boolean useSharedDatabase = copyDatabaseConfiguration == null;
|
| 139 | - File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb").toFile();
|
|
| 141 | + File databasePath = useSharedDatabase ? null : getTestDirectory().toPath().resolve("localDb-"+classifier).toFile();
|
|
| 140 | 142 | dataSourceConfiguration = testClassResource.createDataSourceConfiguration(getDbVersion(), getDbName(), databasePath, getLogin(), getPassword());
|
| 141 | 143 | }
|
| 142 | 144 |
| ... | ... | @@ -24,25 +24,26 @@ package fr.ird.observe.services.local.service.referential; |
| 24 | 24 | |
| 25 | 25 | import fr.ird.observe.dto.ProgressionModel;
|
| 26 | 26 | import fr.ird.observe.dto.referential.ReferentialLocale;
|
| 27 | -import fr.ird.observe.services.local.LocalTestClassResource;
|
|
| 28 | -import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
|
|
| 27 | +import fr.ird.observe.entities.ObserveTopiaEntitySqlModelResource;
|
|
| 28 | +import fr.ird.observe.services.local.LocalTestMethodResourceRead;
|
|
| 29 | 29 | import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
|
| 30 | 30 | import fr.ird.observe.services.service.DataSourceServiceFixtures;
|
| 31 | 31 | import fr.ird.observe.services.service.referential.ReferentialService;
|
| 32 | +import fr.ird.observe.spi.module.ObserveBusinessProject;
|
|
| 32 | 33 | import fr.ird.observe.spi.referential.differential.DifferentialList;
|
| 33 | 34 | import fr.ird.observe.spi.referential.differential.DifferentialModel;
|
| 34 | 35 | import fr.ird.observe.spi.referential.differential.DifferentialType;
|
| 35 | 36 | import fr.ird.observe.test.DatabaseName;
|
| 36 | 37 | import fr.ird.observe.test.ObserveTestConfiguration;
|
| 37 | -import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
|
|
| 38 | 38 | import fr.ird.observe.test.spi.DatabaseClassifier;
|
| 39 | +import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
|
|
| 39 | 40 | import fr.ird.observe.test.spi.DatabaseNameConfiguration;
|
| 41 | +import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
|
|
| 40 | 42 | import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
|
| 41 | 43 | import org.apache.logging.log4j.LogManager;
|
| 42 | 44 | import org.apache.logging.log4j.Logger;
|
| 43 | 45 | import org.junit.Assert;
|
| 44 | 46 | import org.junit.Before;
|
| 45 | -import org.junit.ClassRule;
|
|
| 46 | 47 | import org.junit.Rule;
|
| 47 | 48 | import org.junit.Test;
|
| 48 | 49 | |
| ... | ... | @@ -50,14 +51,16 @@ import org.junit.Test; |
| 50 | 51 | * @author Tony Chemit - dev@tchemit.fr
|
| 51 | 52 | * @since 7.4.0
|
| 52 | 53 | */
|
| 54 | +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
|
|
| 55 | +@DatabaseLoginConfiguration
|
|
| 56 | +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
|
|
| 57 | +@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 58 | +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 53 | 59 | public class DifferentialModelTest extends ServiceLocalTestSupportWrite<ReferentialService> {
|
| 54 | 60 | |
| 55 | - @ClassRule
|
|
| 56 | - public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
|
|
| 57 | 61 | private static final Logger log = LogManager.getLogger(DifferentialModelTest.class);
|
| 58 | 62 | @Rule
|
| 59 | - public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
|
|
| 60 | - |
|
| 63 | + public final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL);
|
|
| 61 | 64 | private ReferentialService rightReferentialService;
|
| 62 | 65 | |
| 63 | 66 | public DifferentialModelTest() {
|
| ... | ... | @@ -71,15 +74,12 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent |
| 71 | 74 | }
|
| 72 | 75 | |
| 73 | 76 | @DatabaseNameConfiguration(DatabaseName.empty)
|
| 74 | - @CopyDatabaseConfiguration
|
|
| 75 | - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 76 | - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 77 | 77 | @Test
|
| 78 | 78 | public void testSynchronizeFromEmptyDatabase() {
|
| 79 | 79 | |
| 80 | 80 | ProgressionModel progressionModel = new ProgressionModel();
|
| 81 | 81 | progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
|
| 82 | - DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel);
|
|
| 82 | + DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel);
|
|
| 83 | 83 | |
| 84 | 84 | Assert.assertNotNull(result);
|
| 85 | 85 | DifferentialList leftSideDifferentialList = result.getLeft();
|
| ... | ... | @@ -91,19 +91,15 @@ public class DifferentialModelTest extends ServiceLocalTestSupportWrite<Referent |
| 91 | 91 | Assert.assertNotNull(rightSideDifferentialList.getStates());
|
| 92 | 92 | Assert.assertEquals(DataSourceServiceFixtures.REFERENTIAL_COUNT, rightSideDifferentialList.getStates().size());
|
| 93 | 93 | Assert.assertTrue(rightSideDifferentialList.getStates().stream().allMatch(s -> DifferentialType.ADDED.equals(s.getDifferentialType())));
|
| 94 | - |
|
| 95 | 94 | }
|
| 96 | 95 | |
| 97 | 96 | @DatabaseNameConfiguration(DatabaseName.data)
|
| 98 | - @CopyDatabaseConfiguration
|
|
| 99 | - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 100 | - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 101 | 97 | @Test
|
| 102 | 98 | public void testSynchronizeWithNoChange() {
|
| 103 | 99 | |
| 104 | 100 | ProgressionModel progressionModel = new ProgressionModel();
|
| 105 | 101 | progressionModel.addPropertyChangeListener(ProgressionModel.PROPERTY_MESSAGE, evt -> log.debug(evt.getNewValue()));
|
| 106 | - DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service, rightReferentialService).build(progressionModel);
|
|
| 102 | + DifferentialModel result = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), () -> ObserveTopiaEntitySqlModelResource.get().getDifferentialMetaModel(ObserveBusinessProject.get()), service, rightReferentialService).build(progressionModel);
|
|
| 107 | 103 | |
| 108 | 104 | Assert.assertNotNull(result);
|
| 109 | 105 | DifferentialList leftSideDifferentialList = result.getLeft();
|
| 1 | +package fr.ird.observe.services.local.service.referential;
|
|
| 2 | + |
|
| 3 | +/*-
|
|
| 4 | + * #%L
|
|
| 5 | + * ObServe Core :: Services :: Local
|
|
| 6 | + * %%
|
|
| 7 | + * Copyright (C) 2008 - 2022 IRD, Code Lutin, Ultreia.io
|
|
| 8 | + * %%
|
|
| 9 | + * This program is free software: you can redistribute it and/or modify
|
|
| 10 | + * it under the terms of the GNU General Public License as
|
|
| 11 | + * published by the Free Software Foundation, either version 3 of the
|
|
| 12 | + * License, or (at your option) any later version.
|
|
| 13 | + *
|
|
| 14 | + * This program is distributed in the hope that it will be useful,
|
|
| 15 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
| 16 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
| 17 | + * GNU General Public License for more details.
|
|
| 18 | + *
|
|
| 19 | + * You should have received a copy of the GNU General Public
|
|
| 20 | + * License along with this program. If not, see
|
|
| 21 | + * <http://www.gnu.org/licenses/gpl-3.0.html>.
|
|
| 22 | + * #L%
|
|
| 23 | + */
|
|
| 24 | + |
|
| 25 | +import fr.ird.observe.dto.ProgressionModel;
|
|
| 26 | +import fr.ird.observe.dto.referential.ReferentialDto;
|
|
| 27 | +import fr.ird.observe.dto.referential.ReferentialLocale;
|
|
| 28 | +import fr.ird.observe.dto.referential.common.OceanReference;
|
|
| 29 | +import fr.ird.observe.dto.referential.common.SpeciesDto;
|
|
| 30 | +import fr.ird.observe.services.local.LocalTestClassResource;
|
|
| 31 | +import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
|
|
| 32 | +import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
|
|
| 33 | +import fr.ird.observe.services.service.referential.ReferentialService;
|
|
| 34 | +import fr.ird.observe.services.service.referential.ReferentialServiceFixtures;
|
|
| 35 | +import fr.ird.observe.services.service.referential.SynchronizeService;
|
|
| 36 | +import fr.ird.observe.spi.referential.SynchronizeEngine;
|
|
| 37 | +import fr.ird.observe.spi.referential.UnidirectionalSynchronizeContext;
|
|
| 38 | +import fr.ird.observe.spi.referential.UnidirectionalSynchronizeEngine;
|
|
| 39 | +import fr.ird.observe.spi.referential.differential.DifferentialModelBuilder;
|
|
| 40 | +import fr.ird.observe.spi.referential.synchro.UnidirectionalResult;
|
|
| 41 | +import fr.ird.observe.test.DatabaseName;
|
|
| 42 | +import fr.ird.observe.test.ObserveTestConfiguration;
|
|
| 43 | +import fr.ird.observe.test.ToolkitFixtures;
|
|
| 44 | +import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
|
|
| 45 | +import fr.ird.observe.test.spi.DatabaseClassifier;
|
|
| 46 | +import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
|
|
| 47 | +import fr.ird.observe.test.spi.DatabaseNameConfiguration;
|
|
| 48 | +import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
|
|
| 49 | +import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
|
|
| 50 | +import org.junit.Assert;
|
|
| 51 | +import org.junit.Before;
|
|
| 52 | +import org.junit.ClassRule;
|
|
| 53 | +import org.junit.Rule;
|
|
| 54 | +import org.junit.Test;
|
|
| 55 | + |
|
| 56 | +import java.util.Set;
|
|
| 57 | + |
|
| 58 | +/**
|
|
| 59 | + * Created on 04/07/16.
|
|
| 60 | + *
|
|
| 61 | + * @author Tony Chemit - dev@tchemit.fr
|
|
| 62 | + */
|
|
| 63 | +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
|
|
| 64 | +@DatabaseLoginConfiguration
|
|
| 65 | +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
|
|
| 66 | +@DatabaseNameConfiguration(DatabaseName.referential)
|
|
| 67 | +@DatabaseNameConfiguration(value = DatabaseName.referential, classifier = DatabaseClassifier.CENTRAL)
|
|
| 68 | +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 69 | +public class UnidirectionalResultIssue2208Test extends ServiceLocalTestSupportWrite<SynchronizeService> {
|
|
| 70 | + |
|
| 71 | + @ClassRule
|
|
| 72 | + public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
|
|
| 73 | + @Rule
|
|
| 74 | + public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
|
|
| 75 | + |
|
| 76 | + private DifferentialModelBuilder diffsEngine;
|
|
| 77 | + private SynchronizeEngine synchronizeEngine;
|
|
| 78 | + private ReferentialServiceFixtures fixtures;
|
|
| 79 | + private ReferentialService centralReferentialService;
|
|
| 80 | + private ReferentialService localReferentialService;
|
|
| 81 | + |
|
| 82 | + public UnidirectionalResultIssue2208Test() {
|
|
| 83 | + super(SynchronizeService.class);
|
|
| 84 | + }
|
|
| 85 | + |
|
| 86 | + @Before
|
|
| 87 | + public void setUp() throws Exception {
|
|
| 88 | + super.setUp();
|
|
| 89 | + localReferentialService = localTestMethodResource.newService(ReferentialService.class);
|
|
| 90 | + centralReferentialService = localTestMethodResourceCentral.newService(ReferentialService.class);
|
|
| 91 | + diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localReferentialService::differentialMetaModel, localReferentialService, centralReferentialService);
|
|
| 92 | + SynchronizeService centralService = localTestMethodResourceCentral.newService(SynchronizeService.class);
|
|
| 93 | + synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), service, centralService);
|
|
| 94 | + fixtures = new ReferentialServiceFixtures();
|
|
| 95 | + }
|
|
| 96 | + |
|
| 97 | + @CopyDatabaseConfiguration
|
|
| 98 | + @CopyDatabaseConfiguration(classifier = DatabaseClassifier.CENTRAL)
|
|
| 99 | + @Test
|
|
| 100 | + public void testSynchronizeIssue2208() {
|
|
| 101 | + |
|
| 102 | + // add ocean to a species in central database
|
|
| 103 | + // synchronize
|
|
| 104 | + // check in local database that the ocean is there for the given species
|
|
| 105 | + |
|
| 106 | + String speciesVariableName = fixtures.getVariableName(SpeciesDto.class).replace(".common.", ".common.common.");
|
|
| 107 | + String speciesId = ToolkitFixtures.getVariable(speciesVariableName);
|
|
| 108 | + |
|
| 109 | + SpeciesDto localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId);
|
|
| 110 | + Assert.assertEquals(1, localSpecies.getOceanSize());
|
|
| 111 | + |
|
| 112 | + SpeciesDto centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId);
|
|
| 113 | + Assert.assertEquals(1, centralSpecies.getOceanSize());
|
|
| 114 | + |
|
| 115 | + OceanReference ocean = new OceanReference();
|
|
| 116 | + //FIXME Make it fixture
|
|
| 117 | + ocean.setId("fr.ird.referential.common.Ocean#1239832686152#0.7039171539191688");
|
|
| 118 | + centralSpecies.addOcean(ocean);
|
|
| 119 | + TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(true);
|
|
| 120 | + try {
|
|
| 121 | + centralReferentialService.save(centralSpecies);
|
|
| 122 | + } finally {
|
|
| 123 | + TOPIA_TEST_CLASS_RESOURCE_CENTRAL.setGenerateNow(false);
|
|
| 124 | + }
|
|
| 125 | + centralSpecies = centralReferentialService.loadDto(SpeciesDto.class, speciesId);
|
|
| 126 | + Assert.assertEquals(2, centralSpecies.getOceanSize());
|
|
| 127 | + |
|
| 128 | + // do synchro
|
|
| 129 | + |
|
| 130 | + ProgressionModel progressionModel = new ProgressionModel();
|
|
| 131 | + UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
|
|
| 132 | + UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
|
|
| 133 | + UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
|
|
| 134 | + unidirectionalSynchronizeContext.finish(service);
|
|
| 135 | + |
|
| 136 | + Assert.assertNotNull(result);
|
|
| 137 | + |
|
| 138 | + Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
|
|
| 139 | + Assert.assertNotNull(referentialNames);
|
|
| 140 | + Assert.assertEquals(1, referentialNames.size());
|
|
| 141 | + Assert.assertTrue(referentialNames.contains(SpeciesDto.class));
|
|
| 142 | + |
|
| 143 | + localSpecies = localReferentialService.loadDto(SpeciesDto.class, speciesId);
|
|
| 144 | + Assert.assertEquals(2, localSpecies.getOceanSize());
|
|
| 145 | + Assert.assertEquals(centralSpecies.getTopiaVersion(), localSpecies.getTopiaVersion());
|
|
| 146 | + Assert.assertEquals(centralSpecies.getLastUpdateDate(), localSpecies.getLastUpdateDate());
|
|
| 147 | + Assert.assertEquals(centralSpecies, localSpecies);
|
|
| 148 | + |
|
| 149 | + }
|
|
| 150 | + |
|
| 151 | +} |
| ... | ... | @@ -28,8 +28,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale; |
| 28 | 28 | import fr.ird.observe.entities.LastUpdateDate;
|
| 29 | 29 | import fr.ird.observe.entities.referential.common.LengthLengthParameter;
|
| 30 | 30 | import fr.ird.observe.entities.referential.ll.common.WeightDeterminationMethod;
|
| 31 | -import fr.ird.observe.services.local.LocalTestClassResource;
|
|
| 32 | -import fr.ird.observe.services.local.LocalTestMethodResourceWrite;
|
|
| 31 | +import fr.ird.observe.services.local.LocalTestMethodResourceRead;
|
|
| 33 | 32 | import fr.ird.observe.services.local.service.ServiceLocalTestSupportWrite;
|
| 34 | 33 | import fr.ird.observe.services.service.referential.ReferentialService;
|
| 35 | 34 | import fr.ird.observe.services.service.referential.SynchronizeService;
|
| ... | ... | @@ -43,7 +42,9 @@ import fr.ird.observe.test.DatabaseName; |
| 43 | 42 | import fr.ird.observe.test.ObserveTestConfiguration;
|
| 44 | 43 | import fr.ird.observe.test.spi.CopyDatabaseConfiguration;
|
| 45 | 44 | import fr.ird.observe.test.spi.DatabaseClassifier;
|
| 45 | +import fr.ird.observe.test.spi.DatabaseLoginConfiguration;
|
|
| 46 | 46 | import fr.ird.observe.test.spi.DatabaseNameConfiguration;
|
| 47 | +import fr.ird.observe.test.spi.DatabasePasswordConfiguration;
|
|
| 47 | 48 | import fr.ird.observe.test.spi.DatabaseVersionConfiguration;
|
| 48 | 49 | import io.ultreia.java4all.lang.Objects2;
|
| 49 | 50 | import org.apache.logging.log4j.LogManager;
|
| ... | ... | @@ -52,7 +53,6 @@ import org.junit.Assert; |
| 52 | 53 | import org.junit.Before;
|
| 53 | 54 | import org.junit.ClassRule;
|
| 54 | 55 | import org.junit.Ignore;
|
| 55 | -import org.junit.Rule;
|
|
| 56 | 56 | import org.junit.Test;
|
| 57 | 57 | import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptor;
|
| 58 | 58 | import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptors;
|
| ... | ... | @@ -67,16 +67,18 @@ import java.util.Set; |
| 67 | 67 | *
|
| 68 | 68 | * @author Tony Chemit - dev@tchemit.fr
|
| 69 | 69 | */
|
| 70 | +@DatabaseVersionConfiguration(ObserveTestConfiguration.MODEL_VERSION)
|
|
| 71 | +@DatabaseLoginConfiguration
|
|
| 72 | +@DatabasePasswordConfiguration(ObserveTestConfiguration.H2_PASSWORD)
|
|
| 73 | +@DatabaseNameConfiguration(DatabaseName.data)
|
|
| 74 | +@DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 75 | +@DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 70 | 76 | public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<SynchronizeService> {
|
| 71 | 77 | @ClassRule
|
| 72 | - public static final LocalTestClassResource TOPIA_TEST_CLASS_RESOURCE_CENTRAL = new LocalTestClassResource(DatabaseClassifier.CENTRAL);
|
|
| 78 | + public static final LocalTestMethodResourceRead localTestMethodResourceCentral = new LocalTestMethodResourceRead(DatabaseClassifier.CENTRAL);
|
|
| 73 | 79 | private static final Logger log = LogManager.getLogger(UnidirectionalResultTest.class);
|
| 74 | - @Rule
|
|
| 75 | - public final LocalTestMethodResourceWrite localTestMethodResourceCentral = new LocalTestMethodResourceWrite(TOPIA_TEST_CLASS_RESOURCE_CENTRAL);
|
|
| 76 | - |
|
| 77 | 80 | private DifferentialModelBuilder diffsEngine;
|
| 78 | 81 | private SynchronizeEngine synchronizeEngine;
|
| 79 | - private SynchronizeService localSynchronizeService;
|
|
| 80 | 82 | |
| 81 | 83 | public UnidirectionalResultTest() {
|
| 82 | 84 | super(SynchronizeService.class);
|
| ... | ... | @@ -85,16 +87,14 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch |
| 85 | 87 | @Before
|
| 86 | 88 | public void setUp() throws Exception {
|
| 87 | 89 | super.setUp();
|
| 88 | - localSynchronizeService = localTestMethodResource.newService(SynchronizeService.class);
|
|
| 89 | - diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), localTestMethodResource.newService(ReferentialService.class), localTestMethodResourceCentral.newService(ReferentialService.class));
|
|
| 90 | - synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), localSynchronizeService, localTestMethodResourceCentral.newService(SynchronizeService.class));
|
|
| 90 | + ReferentialService service = localTestMethodResource.newService(ReferentialService.class);
|
|
| 91 | + diffsEngine = ReferentialService.createDifferentialModelBuilder(ReferentialLocale.FR.getLocale(), service::differentialMetaModel, service, localTestMethodResourceCentral.newService(ReferentialService.class));
|
|
| 92 | + synchronizeEngine = new SynchronizeEngine(localTestMethodResource.getTestDirectory().toPath(), this.service, localTestMethodResourceCentral.newService(SynchronizeService.class));
|
|
| 91 | 93 | |
| 92 | 94 | }
|
| 93 | 95 | |
| 94 | 96 | @DatabaseNameConfiguration(DatabaseName.empty)
|
| 95 | 97 | @CopyDatabaseConfiguration
|
| 96 | - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 97 | - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 98 | 98 | @Test
|
| 99 | 99 | @Ignore // We inject some species with data... Can't continue to migrate data from empty!!!
|
| 100 | 100 | public void testSynchronizeFromEmptyDatabase() {
|
| ... | ... | @@ -104,7 +104,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch |
| 104 | 104 | UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
|
| 105 | 105 | UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
|
| 106 | 106 | UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
|
| 107 | - unidirectionalSynchronizeContext.finish(localSynchronizeService);
|
|
| 107 | + unidirectionalSynchronizeContext.finish(service);
|
|
| 108 | 108 | |
| 109 | 109 | Assert.assertNotNull(result);
|
| 110 | 110 | Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
|
| ... | ... | @@ -132,8 +132,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch |
| 132 | 132 | |
| 133 | 133 | @DatabaseNameConfiguration(DatabaseName.data)
|
| 134 | 134 | @CopyDatabaseConfiguration
|
| 135 | - @DatabaseNameConfiguration(value = DatabaseName.data, classifier = DatabaseClassifier.CENTRAL)
|
|
| 136 | - @DatabaseVersionConfiguration(value = ObserveTestConfiguration.MODEL_VERSION, classifier = DatabaseClassifier.CENTRAL)
|
|
| 137 | 135 | @Test
|
| 138 | 136 | public void testSynchronizeWithNoChange() {
|
| 139 | 137 | ProgressionModel progressionModel = new ProgressionModel();
|
| ... | ... | @@ -142,7 +140,7 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch |
| 142 | 140 | UnidirectionalSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalSynchronizeEngine(diffsEngine, synchronizeEngine);
|
| 143 | 141 | UnidirectionalSynchronizeContext unidirectionalSynchronizeContext = referentialSynchronizeEngine.prepareContext(progressionModel);
|
| 144 | 142 | UnidirectionalResult result = referentialSynchronizeEngine.prepareResult(unidirectionalSynchronizeContext, null);
|
| 145 | - unidirectionalSynchronizeContext.finish(localSynchronizeService);
|
|
| 143 | + unidirectionalSynchronizeContext.finish(service);
|
|
| 146 | 144 | |
| 147 | 145 | Assert.assertNotNull(result);
|
| 148 | 146 | Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames();
|
| ... | ... | @@ -162,7 +160,6 @@ public class UnidirectionalResultTest extends ServiceLocalTestSupportWrite<Synch |
| 162 | 160 | Assert.assertTrue(result.getReferentialReverted(dtoType).isEmpty());
|
| 163 | 161 | Assert.assertTrue(result.getReferentialAdded(dtoType).isEmpty());
|
| 164 | 162 | }
|
| 165 | - |
|
| 166 | 163 | }
|
| 167 | 164 | |
| 168 | 165 | // // Il faut reecrire ce test en clonant une base, y fiasant des modif puis test
|
| ... | ... | @@ -121,6 +121,7 @@ |
| 121 | 121 | </site>
|
| 122 | 122 | </distributionManagement>
|
| 123 | 123 | <properties>
|
| 124 | + <lib.version.java4all.topia>1.70-SNAPSHOT</lib.version.java4all.topia>
|
|
| 124 | 125 | <organizationId>ultreiaio</organizationId>
|
| 125 | 126 | <projectId>ird-observe</projectId>
|
| 126 | 127 | <stageId>frirdobserve</stageId>
|