This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 5b763f26d97d645adef2c081fc4fd432bbccf2e6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Fri Dec 23 16:17:48 2016 +0100 Utilisation de liste de requete plutot que de requetes concatenées --- ...nalReferentialSynchronizeLocalServiceTopia.java | 25 +++---- .../ReferentialSynchronizeSqlsRequestBuilder.java | 79 +++++++++++----------- .../sql/InsertSqlStatementGenerator.java | 40 +++++------ .../InsertSqlWithCascadeStatementGenerator.java | 22 +++--- .../sql/ReplaceSqlStatementGenerator.java | 11 +-- .../sql/UpdateSqlStatementGenerator.java | 11 +-- .../UpdateSqlWithCascadeStatementGenerator.java | 23 ++++--- .../referential/ReferentialServiceTopia.java | 17 ++--- ...UnidirectionalReferentialSynchronizeEngine.java | 2 +- 9 files changed, 117 insertions(+), 113 deletions(-) diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java index e85d616..065e795 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -22,17 +22,18 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.legacy * #L% */ -import fr.ird.observe.persistence.ObserveEntityEnum; +import com.google.common.collect.ImmutableList; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; -import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.persistence.ObserveEntityEnum; +import fr.ird.observe.services.binder.BinderEngine; +import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.dto.reference.ReferentialReference; +import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.LastUpdateDateService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRequest; import fr.ird.observe.services.topia.ObserveServiceContextTopia; import fr.ird.observe.services.topia.ObserveServiceTopia; -import fr.ird.observe.services.binder.BinderEngine; -import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.ApplySqlRequestWork; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.InsertSqlStatementGenerator; @@ -76,7 +77,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser if (log.isTraceEnabled()) { log.trace("filterIdsUsedInLocalSource(" + referentialName + ", " + ids + ")"); } - Class entityType = BinderEngine.get().getReferentialEntityType(referentialName); + Class<? extends ObserveReferentialEntity> entityType = BinderEngine.get().getReferentialEntityType(referentialName); Set<String> result = new LinkedHashSet<>(); for (String id : ids) { int count = countUsage0(entityType, id); @@ -116,8 +117,8 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser InsertSqlStatementGenerator<R> sqlStatementGenerator = new InsertSqlStatementGenerator<>(metadataEntity, dtoType); for (R referentialDto : request.getReferentialToAdd()) { - String sql = sqlStatementGenerator.generateSql(referentialDto); - result.add(sql); + ImmutableList<String> sql = sqlStatementGenerator.generateSql(referentialDto); + result.addAll(sql); } } @@ -125,18 +126,18 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser UpdateSqlStatementGenerator<R> sqlStatementGenerator = new UpdateSqlStatementGenerator<>(metadataEntity, dtoType); for (R referentialDto : request.getReferentialToUpdate()) { - String sql = sqlStatementGenerator.generateSql(referentialDto); - result.add(sql); + ImmutableList<String> sql = sqlStatementGenerator.generateSql(referentialDto); + result.addAll(sql); } } if (request.withReferentialToReplace()) { - ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentielName); + ReplaceSqlStatementGenerator<?> sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentielName); for (Map.Entry<String, String> entry : request.getReferentialToReplace().entrySet()) { - String sql = sqlStatementGenerator.generateSql(entry.getKey(), entry.getValue()); - result.add(sql); + ImmutableList<String> sql = sqlStatementGenerator.generateSqls(entry.getKey(), entry.getValue()); + result.addAll(sql); } } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java index 69d44b2..a4145c4 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java @@ -22,16 +22,17 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.ng; * #L% */ +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.persistence.ObserveEntityEnum; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; -import fr.ird.observe.services.dto.referential.ReferentialHelper; -import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeRequest; -import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeSqlsRequest; +import fr.ird.observe.persistence.ObserveEntityEnum; import fr.ird.observe.services.binder.BinderEngine; import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialHelper; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeRequest; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeSqlsRequest; import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTask; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.DesactivateSqlStatementGenerator; @@ -146,19 +147,21 @@ public class ReferentialSynchronizeSqlsRequestBuilder { InsertSqlWithCascadeStatementGenerator<R> insertGenerator = new InsertSqlWithCascadeStatementGenerator<R>(metadata, type, request.getIdsOnlyExistingOnThisSide()) { @Override - protected <D extends ReferentialDto> String insertMissingReferential(Class<D> referentialType, String id) { + protected <D extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<D> referentialType, String id) { return addExtraInsertStatement(referentialType, id); } }; for (E entity : insertEntities) { R referential = binder.toDto(referentialLocale, entity); - String sql = insertGenerator.generateSql(referential); + ImmutableList<String> sqls = insertGenerator.generateSql(referential); if (log.isInfoEnabled()) { - log.info("Insert referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + log.info("Insert referential: " + type.getName() + " / " + referential.getId() + " -- " + sqls); + } + for (String sql : sqls) { + resultBuilder.addInsertStatement(sql); } - resultBuilder.addInsertStatement(sql); } } else { @@ -166,12 +169,14 @@ public class ReferentialSynchronizeSqlsRequestBuilder { InsertSqlStatementGenerator<R> insertGenerator = new InsertSqlStatementGenerator<>(metadata, type); for (E entity : insertEntities) { R referential = binder.toDto(referentialLocale, entity); - String sql = insertGenerator.generateSql(referential); + ImmutableList<String> sqls = insertGenerator.generateSql(referential); if (log.isInfoEnabled()) { - log.info("Insert referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + log.info("Insert referential: " + type.getName() + " / " + referential.getId() + " -- " + sqls); + } + for (String sql : sqls) { + resultBuilder.addInsertStatement(sql); } - resultBuilder.addInsertStatement(sql); } } @@ -188,18 +193,20 @@ public class ReferentialSynchronizeSqlsRequestBuilder { UpdateSqlWithCascadeStatementGenerator<R> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<R>(metadata, type, request.getIdsOnlyExistingOnThisSide()) { @Override - protected <D extends ReferentialDto> String insertMissingReferential(Class<D> referentialType, String id) { + protected <D extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<D> referentialType, String id) { return addExtraInsertStatement(referentialType, id); } }; for (E entity : updateEntities) { R referential = binder.toDto(referentialLocale, entity); - String sql = updateGenerator.generateSql(referential); + ImmutableList<String> sqls = updateGenerator.generateSql(referential); if (log.isInfoEnabled()) { - log.info("Update referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + log.info("Update referential: " + type.getName() + " / " + referential.getId() + " -- " + sqls); + } + for (String sql : sqls) { + resultBuilder.addUpdateStatement(sql); } - resultBuilder.addUpdateStatement(sql); } } else { @@ -207,12 +214,14 @@ public class ReferentialSynchronizeSqlsRequestBuilder { UpdateSqlStatementGenerator<R> updateGenerator = new UpdateSqlStatementGenerator<>(metadata, type); for (E entity : updateEntities) { R referential = binder.toDto(referentialLocale, entity); - String sql = updateGenerator.generateSql(referential); + ImmutableList<String> sqls = updateGenerator.generateSql(referential); if (log.isInfoEnabled()) { - log.info("Update referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + log.info("Update referential: " + type.getName() + " / " + referential.getId() + " -- " + sqls); + } + for (String sql : sqls) { + resultBuilder.addUpdateStatement(sql); } - resultBuilder.addUpdateStatement(sql); } } @@ -229,12 +238,14 @@ public class ReferentialSynchronizeSqlsRequestBuilder { List<E> updateEntities = loadEntities(entityType, tasks); for (E entity : updateEntities) { R referential = binder.toDto(referentialLocale, entity); - String sql = updateGenerator.generateSql(referential); + ImmutableList<String> sqls = updateGenerator.generateSql(referential); if (log.isInfoEnabled()) { - log.info("Revert referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + log.info("Revert referential: " + type.getName() + " / " + referential.getId() + " -- " + sqls); + } + for (String sql : sqls) { + resultBuilder.addUpdateStatement(sql); } - resultBuilder.addUpdateStatement(sql); } } @@ -251,8 +262,10 @@ public class ReferentialSynchronizeSqlsRequestBuilder { String referentialId = task.getReferentialId(); Optional<String> replaceReferentialId = task.getOptionalReplaceReferentialId(); if (replaceReferentialId.isPresent()) { - String sql = computeReplaceRequestSql(type, replaceGenerator, referentialId, replaceReferentialId.get()); - resultBuilder.addDeleteStatement(sql); + ImmutableList<String> sqls = replaceGenerator.generateSqls(referentialId, replaceReferentialId.get()); + for (String sql : sqls) { + resultBuilder.addDeleteStatement(sql); + } } String sql = deleteGenerator.generateSql(referentialId); @@ -277,8 +290,10 @@ public class ReferentialSynchronizeSqlsRequestBuilder { String referentialId = task.getReferentialId(); Optional<String> replaceReferentialId = task.getOptionalReplaceReferentialId(); if (replaceReferentialId.isPresent()) { - String sql = computeReplaceRequestSql(type, replaceGenerator, referentialId, replaceReferentialId.get()); - resultBuilder.addDesactivateStatement(sql); + ImmutableList<String> sqls = replaceGenerator.generateSqls(referentialId, replaceReferentialId.get()); + for (String sql : sqls) { + resultBuilder.addDesactivateStatement(sql); + } } String sql = desactivateGenerator.generateSql(referentialId); @@ -290,19 +305,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder { } - private <R extends ReferentialDto, E extends ObserveReferentialEntity> String computeReplaceRequestSql(Class<R> type, ReplaceSqlStatementGenerator replaceSqlStatementGenerator, String referentialId, String replaceReferentialId) { - - String sql = replaceSqlStatementGenerator.generateSql(referentialId, replaceReferentialId); - - if (log.isInfoEnabled()) { - log.info("Replace referential: " + type.getName() + " / " + referentialId + " -- " + sql); - } - - return sql; - - } - - private <R extends ReferentialDto, E extends ObserveReferentialEntity> String addExtraInsertStatement(Class<R> referentialType, String id) { + private <R extends ReferentialDto, E extends ObserveReferentialEntity> ImmutableList<String> addExtraInsertStatement(Class<R> referentialType, String id) { Class<E> entityType = binderEngine.getReferentialEntityType(referentialType); String referentialName = ObserveEntityEnum.valueOf(entityType).name(); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java index 823d3c5..8a41c86 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java @@ -22,10 +22,11 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; * #L% */ +import com.google.common.collect.ImmutableList; import fr.ird.observe.persistence.ObserveEntityEnum; import fr.ird.observe.services.binder.BinderEngine; -import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; +import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -98,7 +99,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { this.binder = BinderFactory.newBinder(dtoType); } - public String generateSql(R referentialDto) { + public ImmutableList<String> generateSql(R referentialDto) { List<String> parameters = new LinkedList<>(); @@ -163,27 +164,26 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { } } - String result = String.format(INSERT_STATEMENT, - schemaName, - tableName, - String.join(",", columnNames), - String.join(",", parameters)); + ImmutableList.Builder<String> result = ImmutableList.builder(); + + result.add(String.format(INSERT_STATEMENT, + schemaName, + tableName, + String.join(",", columnNames), + String.join(",", parameters))); if (log.isDebugEnabled()) { log.debug("sql: " + result); } for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) { - String nmAssociationSql = generateNmAssociationSql(referentialDto, manyToManyAssociation); - result += nmAssociationSql; + generateNmAssociationSql(referentialDto, manyToManyAssociation, result); } - return result; + return result.build(); } - private String generateNmAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociationStruct) { - - StringBuilder builder = new StringBuilder(); + private void generateNmAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociationStruct, ImmutableList.Builder<String> result) { Collection<ReferentialReference<?>> manyToManyAssociationValues = binder.obtainSourceProperty(referentialDto, manyToManyAssociationStruct.propertyName); if (CollectionUtils.isNotEmpty(manyToManyAssociationValues)) { @@ -194,22 +194,18 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { for (ReferentialReference<?> nmAssociationValue : manyToManyAssociationValues) { - addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, manyToManyAssociationStruct.type, nmAssociationValue.getId(), builder); + addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, manyToManyAssociationStruct.type, nmAssociationValue.getId(), result); } } - - return builder.toString(); - } protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, - Class<D> associationType, + Class<? extends ReferentialDto> associationType, String associationId, - StringBuilder builder) { - + ImmutableList.Builder<String> builder) { String sql = String.format(NM_ASSOCIATION_INSERT_STATEMENT, schemaName, @@ -221,7 +217,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { if (log.isDebugEnabled()) { log.debug("sql: " + sql); } - builder.append(sql); + builder.add(sql); } @@ -282,7 +278,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { parameters.add("" + parameter); } - protected void addReferentialReferenceParameter(ReferentialReference parameter, List<String> parameters) { + protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters) { addStringParameter(parameter.getId(), parameters); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java index d2dbada..eb414c7 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/InsertSqlWithCascadeStatementGenerator.java @@ -22,9 +22,10 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; * #L% */ +import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; -import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; +import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; @@ -47,8 +48,6 @@ public abstract class InsertSqlWithCascadeStatementGenerator<R extends Referenti private final InsertSqlStatementGenerator<R> delegateGenerator; private final Multimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide; - private final StringBuilder sqlBuilder = new StringBuilder(); - public InsertSqlWithCascadeStatementGenerator(TopiaMetadataEntity metadataEntity, Class<R> dtoType, Multimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide) { @@ -56,13 +55,13 @@ public abstract class InsertSqlWithCascadeStatementGenerator<R extends Referenti this.delegateGenerator = new InsertSqlStatementGenerator<R>(metadataEntity, dtoType) { @Override - protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<D> associationType, String associationId, StringBuilder builder) { + protected <D extends ReferentialDto> void addMnAssociation(String nmAssociationTableName, String nmAssociationDbColumnName, String referentialDtoId, Class<? extends ReferentialDto> associationType, String associationId, ImmutableList.Builder<String> builder) { super.addMnAssociation(nmAssociationTableName, nmAssociationDbColumnName, referentialDtoId, associationType, associationId, builder); addMissingReferentialIfNecessary(associationType, associationId); } @Override - protected void addReferentialReferenceParameter(ReferentialReference parameter, List<String> parameters) { + protected void addReferentialReferenceParameter(ReferentialReference<?> parameter, List<String> parameters) { super.addReferentialReferenceParameter(parameter, parameters); addMissingReferentialIfNecessary(parameter.getType(), parameter.getId()); } @@ -75,23 +74,20 @@ public abstract class InsertSqlWithCascadeStatementGenerator<R extends Referenti }; } - protected abstract <D extends ReferentialDto> String insertMissingReferential(Class<D> referentialType, String id); + protected abstract <D extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<D> referentialType, String id); - public String generateSql(R referentialDto) { + public ImmutableList<String> generateSql(R referentialDto) { - String sql = delegateGenerator.generateSql(referentialDto); - sqlBuilder.append(sql); - return sqlBuilder.toString(); + return delegateGenerator.generateSql(referentialDto); } - private <D extends ReferentialDto> String addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { + private <D extends ReferentialDto> ImmutableList<String> addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { if (idsOnlyExistingOnThisSide.containsEntry(associationType, associationId)) { // il faut insérer aussi ce référentiel - String sql = insertMissingReferential(associationType, associationId); - sqlBuilder.append(sql); + ImmutableList<String> sql = insertMissingReferential(associationType, associationId); // ce référentiel est désormais présent dans les deux sources idsOnlyExistingOnThisSide.remove(associationType, associationId); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java index 9eaf722..dbd8638 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/ReplaceSqlStatementGenerator.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; * #L% */ +import com.google.common.collect.ImmutableList; import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -61,24 +62,24 @@ public class ReplaceSqlStatementGenerator<R extends ReferentialDto> { this.manyToManyAssociationReplacements = computeManyToManyAssociationReplacements(referentialName, topiaMetadataModel); } - public String generateSql(String sourceId, String replacementId) { + public ImmutableList<String> generateSqls(String sourceId, String replacementId) { - StringBuilder builder = new StringBuilder(); + ImmutableList.Builder<String> builder = ImmutableList.builder(); for (ReplacementStruct replacementStruct : manyToOneAssociationReplacements) { String sql = generateSqlStatement(MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct); - builder.append(sql); + builder.add(sql); } for (ReplacementStruct replacementStruct : manyToManyAssociationReplacements) { String sql = generateSqlStatement(MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT, sourceId, replacementId, replacementStruct); - builder.append(sql); + builder.add(sql); } - return builder.toString(); + return builder.build(); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java index e01e7bc..4e8c510 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlStatementGenerator.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; * #L% */ +import com.google.common.collect.ImmutableList; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; import org.apache.commons.collections4.CollectionUtils; @@ -95,7 +96,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { this.binder = BinderFactory.newBinder(dtoType); } - public String generateSql(R referentialDto) { + public ImmutableList<String> generateSql(R referentialDto) { StringBuilder parameters = new StringBuilder(); @@ -176,24 +177,24 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { } - StringBuilder result = new StringBuilder(); + ImmutableList.Builder<String> result = ImmutableList.builder(); String sql = String.format(UPDATE_STATEMENT, schemaName, tableName, parameters.substring(2), referentialDto.getId()); - result.append(sql); + result.add(sql); if (log.isDebugEnabled()) { log.debug("sql: " + sql); } for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) { String manyToManyAssociationSql = generateManyToManyAssociationSql(referentialDto, manyToManyAssociation); - result.append(manyToManyAssociationSql); + result.add(manyToManyAssociationSql); } - return result.toString(); + return result.build(); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java index d9d8cc3..26a30eb 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/sql/UpdateSqlWithCascadeStatementGenerator.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.sql; * #L% */ +import com.google.common.collect.ImmutableList; import com.google.common.collect.Multimap; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; @@ -73,28 +74,32 @@ public abstract class UpdateSqlWithCascadeStatementGenerator<R extends Referenti }; } - protected abstract <D extends ReferentialDto> String insertMissingReferential(Class<D> referentialType, String id); + protected abstract <D extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<D> referentialType, String id); - public String generateSql(R referentialDto) { + public ImmutableList<String> generateSql(R referentialDto) { - String sql = delegateGenerator.generateSql(referentialDto); - sqlBuilder.append(sql); - return sqlBuilder.toString(); + ImmutableList<String> sqls = delegateGenerator.generateSql(referentialDto); + for (String sql : sqls) { + sqlBuilder.append(sql); + } + return sqls; } - private <D extends ReferentialDto> String addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { + private <D extends ReferentialDto> ImmutableList<String> addMissingReferentialIfNecessary(Class<D> associationType, String associationId) { if (idsOnlyExistingOnThisSide.containsEntry(associationType, associationId)) { // il faut insérer aussi ce référentiel - String sql = insertMissingReferential(associationType, associationId); - sqlBuilder.append(sql); + ImmutableList<String> sqls = insertMissingReferential(associationType, associationId); + for (String sql : sqls) { + sqlBuilder.append(sql); + } // ce référentiel est désormais présent dans les deux sources idsOnlyExistingOnThisSide.remove(associationType, associationId); - return sql; + return sqls; } return null; diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/referential/ReferentialServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/referential/ReferentialServiceTopia.java index 4a7b98c..eecf761 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/referential/ReferentialServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/referential/ReferentialServiceTopia.java @@ -24,6 +24,7 @@ package fr.ird.observe.services.topia.service.referential; import com.google.common.base.Joiner; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.SetMultimap; @@ -35,17 +36,18 @@ import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.persistence.Entities; import fr.ird.observe.persistence.ObserveEntityEnum; +import fr.ird.observe.services.ObserveFormRequests; +import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.dto.DataDto; -import fr.ird.observe.services.dto.reference.DataReferenceSet; import fr.ird.observe.services.dto.form.Form; -import fr.ird.observe.services.dto.reference.ReferenceMap; +import fr.ird.observe.services.dto.form.FormRequestDefinition; import fr.ird.observe.services.dto.longline.TripLonglineDto; +import fr.ird.observe.services.dto.reference.DataReferenceSet; +import fr.ird.observe.services.dto.reference.ReferenceMap; import fr.ird.observe.services.dto.reference.ReferenceSetDefinition; -import fr.ird.observe.services.dto.form.FormRequestDefinition; -import fr.ird.observe.services.ObserveFormRequests; -import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.reference.ReferentialReference; import fr.ird.observe.services.dto.reference.ReferentialReferenceSet; +import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; @@ -57,7 +59,6 @@ import fr.ird.observe.services.service.sql.AddSqlScriptProducerRequest; import fr.ird.observe.services.service.sql.AddSqlScriptProducerResult; import fr.ird.observe.services.service.sql.SqlScriptProducerService; import fr.ird.observe.services.topia.ObserveServiceTopia; -import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.ReplaceSqlStatementGenerator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -236,12 +237,12 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe ReplaceSqlStatementGenerator<E> generator = new ReplaceSqlStatementGenerator<>(metadataModel, entityEnum.name()); - String sql = generator.generateSql(idToReplace, replaceId); + ImmutableList<String> sql = generator.generateSqls(idToReplace, replaceId); if (log.isInfoEnabled()) { log.info("Replace sql code:\n" + sql); } - getTopiaPersistenceContext().executeSqlScript(sql.getBytes()); + getTopiaPersistenceContext().executeSqlScripts(Joiner.on("\n").join(sql).getBytes()); } diff --git a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java index 39eca80..c1fbf7f 100644 --- a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java @@ -102,7 +102,7 @@ public class UnidirectionalReferentialSynchronizeEngine { if (needCallback && callbackResults.containsReferentialName(referentialName)) { // l'utilisateur a agit sur ce référentiel - UnidirectionalReferentialSynchronizeCallbackResult callbackResult = callbackResults.getCallbackResult(referentialName); + UnidirectionalReferentialSynchronizeCallbackResult<?> callbackResult = callbackResults.getCallbackResult(referentialName); Map<String, String> ids = callbackResult.getIds(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.