10/26: Ajout du générateur de reqètes sql de remplacement (See #7739)
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit e5f6f5f1138baf05dfa88a71f31153e427eb9ea6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 11:20:50 2016 +0200 Ajout du générateur de reqètes sql de remplacement (See #7739) --- .../synchro/ReplaceSqlStatementGenerator.java | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java new file mode 100644 index 0000000..68e44ff --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java @@ -0,0 +1,126 @@ +package fr.ird.observe.services.service.actions.synchro; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; + +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Pour générer une requète sql de remplacement à partir d'un référentiel donné. + * Created on 04/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ReplaceSqlStatementGenerator { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ReplaceSqlStatementGenerator.class); + + private static final String REQUIRED_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', SET topiaVersion = topiaVersion + 1 WHERE topiaId ='%s';\n"; + private static final String NMASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE topiaId ='%s';\n"; + + private final Set<ReplacementStruct> requiredReplacements; + private final Set<ReplacementStruct> nmAssociationReplacements; + + private static class ReplacementStruct { + + private final String schemaName; + private final String tableName; + private final String columnName; + + private ReplacementStruct(String schemaName, String tableName, String columnName) { + this.schemaName = schemaName; + this.tableName = tableName; + this.columnName = columnName; + } + + } + + public ReplaceSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, String referentialName) { + this.requiredReplacements = computeRequiredReplacements(referentialName, topiaMetadataModel); + this.nmAssociationReplacements = computeNmAssociationReplacements(referentialName, topiaMetadataModel); + } + + public String generateSql(String sourceId, String replacementId) { + + StringBuilder builder = new StringBuilder(); + + for (ReplacementStruct replacementStruct : requiredReplacements) { + + String sql = generateSqlStatement(REQUIRED_UPDATE_STATEMENT, replacementStruct, sourceId, replacementId); + builder.append(sql); + + } + + for (ReplacementStruct replacementStruct : nmAssociationReplacements) { + + String sql = generateSqlStatement(NMASSOCIATION_UPDATE_STATEMENT, replacementStruct, sourceId, replacementId); + builder.append(sql); + + } + + return builder.toString(); + + } + + private Set<ReplacementStruct> computeRequiredReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { + + Set<ReplacementStruct> result = new LinkedHashSet<>(); + + for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) { + + result.addAll(metadataEntity.getRequired().entrySet().stream() + .filter(entry -> entry.getValue().equals(referentialName)) + .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), + metadataEntity.getDbTableName(), + metadataEntity.getDbColumnName(entry.getValue()))) + .collect(Collectors.toList())); + + } + + return result; + + } + + private Set<ReplacementStruct> computeNmAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { + + Set<ReplacementStruct> result = new LinkedHashSet<>(); + + for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) { + + result.addAll(metadataEntity.getNmAssociations().entrySet().stream() + .filter(entry -> entry.getValue().equals(referentialName)) + .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), + metadataEntity.getBdNmAssociationName(entry.getValue()), + metadataEntity.getDbColumnName(entry.getValue()))) + .collect(Collectors.toList())); + + } + + return result; + + } + + private String generateSqlStatement(String replacementPattern, ReplacementStruct replacementStruct, String sourceId, String replacementId) { + + String sql = String.format(replacementPattern, + replacementStruct.schemaName, + replacementStruct.tableName, + replacementStruct.columnName, + replacementId, + sourceId); + + if (log.isDebugEnabled()) { + log.debug("sql: " + sql); + } + + return sql; + + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm