Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
-
13700605
by Tony CHEMIT at 2018-09-12T12:38:59Z
3 changed files:
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java
- services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java
- services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java
Changes:
| ... | ... | @@ -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,
|
| ... | ... | @@ -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;
|
| ... | ... | @@ -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 |
|