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

Commits:

3 changed files:

Changes:

  • services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java
    ... ... @@ -24,9 +24,17 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
    24 24
     
    
    25 25
     import com.google.common.collect.ImmutableList;
    
    26 26
     import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    27
    -import fr.ird.observe.spi.DbModelHelper;
    
    28 27
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    29 28
     import fr.ird.observe.persistence.ObserveEntityEnum;
    
    29
    +import fr.ird.observe.spi.DbModelHelper;
    
    30
    +import org.apache.commons.collections4.CollectionUtils;
    
    31
    +import org.apache.logging.log4j.LogManager;
    
    32
    +import org.apache.logging.log4j.Logger;
    
    33
    +import org.nuiton.topia.persistence.TopiaEntity;
    
    34
    +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
    
    35
    +import org.nuiton.util.beans.Binder;
    
    36
    +import org.nuiton.util.beans.BinderFactory;
    
    37
    +
    
    30 38
     import java.sql.Timestamp;
    
    31 39
     import java.util.Collection;
    
    32 40
     import java.util.Date;
    
    ... ... @@ -35,13 +43,6 @@ import java.util.LinkedList;
    35 43
     import java.util.List;
    
    36 44
     import java.util.Map;
    
    37 45
     import java.util.Set;
    
    38
    -import org.apache.commons.collections4.CollectionUtils;
    
    39
    -import org.apache.logging.log4j.Logger;
    
    40
    -import org.apache.logging.log4j.LogManager;
    
    41
    -import org.nuiton.topia.persistence.TopiaEntity;
    
    42
    -import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
    
    43
    -import org.nuiton.util.beans.Binder;
    
    44
    -import org.nuiton.util.beans.BinderFactory;
    
    45 46
     
    
    46 47
     /**
    
    47 48
      * Pour générer une requète sql d'ajout à partir d'un référentiel donné.
    
    ... ... @@ -56,7 +57,8 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> {
    56 57
         private static final Logger log = LogManager.getLogger(InsertSqlStatementGenerator.class);
    
    57 58
     
    
    58 59
         private static final String INSERT_STATEMENT = "INSERT INTO %s.%s(%s) VALUES (%s);\n";
    
    59
    -    private static final String NM_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n";
    
    60
    +    // We use a special prefix because those requests must be applied after all simple insert requests
    
    61
    +    public static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "$$_INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n";
    
    60 62
     
    
    61 63
         private final Set<String> columnNames;
    
    62 64
         private final String schemaName;
    
    ... ... @@ -207,7 +209,7 @@ public class InsertSqlStatementGenerator<D extends ReferentialDto> {
    207 209
                                                           String associationId,
    
    208 210
                                                           ImmutableList.Builder<String> builder) {
    
    209 211
     
    
    210
    -        String sql = String.format(NM_ASSOCIATION_INSERT_STATEMENT,
    
    212
    +        String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT,
    
    211 213
                                        schemaName,
    
    212 214
                                        nmAssociationTableName,
    
    213 215
                                        this.tableName,
    

  • services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
    ... ... @@ -25,6 +25,14 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.sql;
    25 25
     import com.google.common.collect.ImmutableList;
    
    26 26
     import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    27 27
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    28
    +import org.apache.commons.collections4.CollectionUtils;
    
    29
    +import org.apache.logging.log4j.LogManager;
    
    30
    +import org.apache.logging.log4j.Logger;
    
    31
    +import org.nuiton.topia.persistence.TopiaEntity;
    
    32
    +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
    
    33
    +import org.nuiton.util.beans.Binder;
    
    34
    +import org.nuiton.util.beans.BinderFactory;
    
    35
    +
    
    28 36
     import java.sql.Timestamp;
    
    29 37
     import java.util.Collection;
    
    30 38
     import java.util.Date;
    
    ... ... @@ -32,13 +40,8 @@ import java.util.LinkedHashSet;
    32 40
     import java.util.Map;
    
    33 41
     import java.util.Set;
    
    34 42
     import java.util.TreeMap;
    
    35
    -import org.apache.commons.collections4.CollectionUtils;
    
    36
    -import org.apache.logging.log4j.Logger;
    
    37
    -import org.apache.logging.log4j.LogManager;
    
    38
    -import org.nuiton.topia.persistence.TopiaEntity;
    
    39
    -import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity;
    
    40
    -import org.nuiton.util.beans.Binder;
    
    41
    -import org.nuiton.util.beans.BinderFactory;
    
    43
    +
    
    44
    +import static fr.ird.observe.services.local.service.actions.synchro.referential.sql.InsertSqlStatementGenerator.MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT;
    
    42 45
     
    
    43 46
     /**
    
    44 47
      * Pour générer une requète sql de mise à jour à partir d'un référentiel donné.
    
    ... ... @@ -53,8 +56,8 @@ public class UpdateSqlStatementGenerator<D extends ReferentialDto> {
    53 56
         private static final Logger log = LogManager.getLogger(UpdateSqlStatementGenerator.class);
    
    54 57
     
    
    55 58
         private static final String UPDATE_STATEMENT = "UPDATE %s.%s SET %s WHERE topiaId ='%s';\n";
    
    56
    -    private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n";
    
    57
    -    private static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n";
    
    59
    +    // We use a special prefix because those requests must be applied before all simple insert requests
    
    60
    +    private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "$$_DELETE FROM %s.%s WHERE %s = '%s';\n";
    
    58 61
     
    
    59 62
         private final Map<String, String> columnNames;
    
    60 63
         private final String schemaName;
    

  • services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java
    ... ... @@ -23,21 +23,22 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy;
    23 23
      */
    
    24 24
     
    
    25 25
     import com.google.common.collect.ImmutableSet;
    
    26
    -import fr.ird.observe.spi.DtoModelHelper;
    
    27
    -import fr.ird.observe.spi.DtoModelClasses;
    
    28 26
     import fr.ird.observe.dto.reference.DtoReferenceDefinition;
    
    29
    -import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
    
    30 27
     import fr.ird.observe.dto.reference.ReferentialDtoReference;
    
    28
    +import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet;
    
    31 29
     import fr.ird.observe.dto.referential.ReferentialDto;
    
    32 30
     import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffState;
    
    33 31
     import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffs;
    
    34 32
     import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine;
    
    33
    +import fr.ird.observe.spi.DtoModelClasses;
    
    34
    +import fr.ird.observe.spi.DtoModelHelper;
    
    35
    +import org.apache.commons.collections4.CollectionUtils;
    
    36
    +
    
    35 37
     import java.util.LinkedHashSet;
    
    36 38
     import java.util.Map;
    
    37 39
     import java.util.Optional;
    
    38 40
     import java.util.Set;
    
    39 41
     import java.util.stream.Collectors;
    
    40
    -import org.apache.commons.collections4.CollectionUtils;
    
    41 42
     
    
    42 43
     /**
    
    43 44
      * Created on 28/06/16.
    
    ... ... @@ -90,6 +91,8 @@ public class UnidirectionalReferentialSynchronizeEngine {
    90 91
             UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult();
    
    91 92
     
    
    92 93
             Set<String> insertSqlRequests = new LinkedHashSet<>();
    
    94
    +        Set<String> insertAssociationSqlRequests = new LinkedHashSet<>();
    
    95
    +        Set<String> deleteAssociationSqlRequests = new LinkedHashSet<>();
    
    93 96
             Set<String> updateSqlRequests = new LinkedHashSet<>();
    
    94 97
             Set<String> deleteSqlRequests = new LinkedHashSet<>();
    
    95 98
     
    
    ... ... @@ -126,8 +129,11 @@ public class UnidirectionalReferentialSynchronizeEngine {
    126 129
     
    
    127 130
                     if (sqlStatement.startsWith("INSERT")) {
    
    128 131
                         insertSqlRequests.add(sqlStatement);
    
    129
    -                }
    
    130
    -                if (sqlStatement.startsWith("UPDATE")) {
    
    132
    +                } else if (sqlStatement.startsWith("$$_INSERT")) {
    
    133
    +                    insertAssociationSqlRequests.add(sqlStatement.substring(3));
    
    134
    +                } else if (sqlStatement.startsWith("$$_DELETE")) {
    
    135
    +                    deleteAssociationSqlRequests.add(sqlStatement.substring(3));
    
    136
    +                } else if (sqlStatement.startsWith("UPDATE")) {
    
    131 137
                         updateSqlRequests.add(sqlStatement);
    
    132 138
                     } else {
    
    133 139
                         deleteSqlRequests.add(sqlStatement);
    
    ... ... @@ -135,7 +141,9 @@ public class UnidirectionalReferentialSynchronizeEngine {
    135 141
                 }
    
    136 142
     
    
    137 143
             }
    
    144
    +        sqlRequests.addAll(deleteAssociationSqlRequests);
    
    138 145
             sqlRequests.addAll(insertSqlRequests);
    
    146
    +        sqlRequests.addAll(insertAssociationSqlRequests);
    
    139 147
             sqlRequests.addAll(updateSqlRequests);
    
    140 148
             sqlRequests.addAll(deleteSqlRequests);
    
    141 149