Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

13 changed files:

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
    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) {
    

  • client/datasource/editor/spi/pom.xml
    ... ... @@ -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>
    

  • 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
    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
     
    

  • core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java
    ... ... @@ -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()) {
    

  • 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;
    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
    

  • 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;
    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
         }
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestClassResource.java
    ... ... @@ -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);
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceRead.java
    ... ... @@ -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) {
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/LocalTestMethodResourceWrite.java
    ... ... @@ -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
     
    

  • 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;
    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();
    

  • core/services/local/src/test/java/fr/ird/observe/services/local/service/referential/UnidirectionalResultIssue2208Test.java
    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
    +}

  • 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;
    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
    

  • pom.xml
    ... ... @@ -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>