branch develop updated (1eab0b7 -> 5b763f2)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git from 1eab0b7 Passage de la configuration en écran + amélioration titres new 5b763f2 Utilisation de liste de requete plutot que de requetes concatenées The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: ...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(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm