branch feature/7739 updated (394b8fc -> 4ad8851)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from 394b8fc Mise en place de la génération des requètes sql et de leur application (See #7739) new d257593 Ajout du contrat Iterable sur le méta-modèle new 3c43b2a Ajout du générateur de reqètes sql de remplacement (See #7739) new 223dc6e Meilleur nommage dans le méta-modèle new 4ad8851 Meilleur nommage dans le méta-modèle + correction de l'algorithme de remplacement The 4 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 4ad885148cea3c7fc456f9b96670eef4375561af Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 12:14:47 2016 +0200 Meilleur nommage dans le méta-modèle + correction de l'algorithme de remplacement commit 223dc6e4766bddf823a0666fcb49f35b21fe4baa Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 12:12:50 2016 +0200 Meilleur nommage dans le méta-modèle commit 3c43b2a099c463ccdac48f97280821d80c1948fc 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) commit d257593b62f91519b0983926695015bccbbf3cbe Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 11:20:22 2016 +0200 Ajout du contrat Iterable sur le méta-modèle Summary of changes: .../synchro/InsertSqlStatementGenerator.java | 57 ++++----- .../synchro/ReplaceSqlStatementGenerator.java | 132 +++++++++++++++++++ .../synchro/UpdateSqlStatementGenerator.java | 142 ++++++++++----------- .../persistence/metadata/TopiaMetadataEntity.java | 68 +++++----- .../persistence/metadata/TopiaMetadataModel.java | 13 +- .../metadata/TopiaMetadataModelVisitor.java | 30 ++--- .../sql/batch/tables/TopiaSqlTablesFactory.java | 6 +- .../templates/TopiaMetadataModelGenerator.java | 14 +- 8 files changed, 292 insertions(+), 170 deletions(-) create mode 100644 observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/ReplaceSqlStatementGenerator.java -- 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 feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d257593b62f91519b0983926695015bccbbf3cbe Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 11:20:22 2016 +0200 Ajout du contrat Iterable sur le méta-modèle --- .../topia/persistence/metadata/TopiaMetadataModel.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModel.java b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModel.java index d4de2b1..43e135f 100644 --- a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModel.java +++ b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModel.java @@ -33,15 +33,21 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; /** + * Méta-modèle topia simplifié qui contient des informations utile pour des algorithmes générique sur les entités. + * + * Ce méta-modèle est juste un conteneur de méta-modèle d'entités. + * * Created on 03/01/16. * * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 */ -public class TopiaMetadataModel { +public class TopiaMetadataModel implements Iterable<TopiaMetadataEntity> { private static final Log log = LogFactory.getLog(TopiaMetadataModel.class); @@ -81,4 +87,9 @@ public class TopiaMetadataModel { } } + @Override + public Iterator<TopiaMetadataEntity> iterator() { + return entities.values().iterator(); + } + } -- 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 feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 3c43b2a099c463ccdac48f97280821d80c1948fc 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>.
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 223dc6e4766bddf823a0666fcb49f35b21fe4baa Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 12:12:50 2016 +0200 Meilleur nommage dans le méta-modèle --- .../persistence/metadata/TopiaMetadataEntity.java | 68 +++++++++++----------- .../metadata/TopiaMetadataModelVisitor.java | 30 +++++----- .../sql/batch/tables/TopiaSqlTablesFactory.java | 6 +- .../templates/TopiaMetadataModelGenerator.java | 14 ++--- 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java index 6f4b8ba..22b89e9 100644 --- a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java +++ b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java @@ -59,7 +59,7 @@ public class TopiaMetadataEntity { /** * Le dictionnaire des associations simples (multiplicitié 1→n) (la clef est le nom de la propriété, la valeur son type). */ - protected final Map<String, String> associations = new LinkedHashMap<>(); + protected final Map<String, String> oneToManyAssociations = new LinkedHashMap<>(); /** * Le dictionnaire des associations inversées (la clef est le nom de la propriété, la valeur son type). */ @@ -67,11 +67,11 @@ public class TopiaMetadataEntity { /** * Le dictionnaire des associations nm (multiplicitié n→m) (la clef est le nom de la propriété, la valeur son type). */ - protected final Map<String, String> nmAssociations = new LinkedHashMap<>(); + protected final Map<String, String> manyToManyAssociations = new LinkedHashMap<>(); /** * Le dictionnaire des compositions simples vers des entitées (la clef est le nom de la propriété, la valeur son type). */ - protected final Map<String, String> required = new LinkedHashMap<>(); + protected final Map<String, String> manyToOneAssociations = new LinkedHashMap<>(); /** * Le dictionnaire des propriétés qui ne sont pas des entités (la clef est le nom de la propriété, la valeur son type). */ @@ -86,7 +86,7 @@ public class TopiaMetadataEntity { /** * Le nom des tables utilisées pour les associations nm. */ - protected final Map<String, String> dbNmAssociationsName = new LinkedHashMap<>(); + protected final Map<String, String> dbManyToManyAssociationsTableName = new LinkedHashMap<>(); public TopiaMetadataEntity(String parent, String type, String dbSchemaName, String dbTableName) { @@ -141,16 +141,16 @@ public class TopiaMetadataEntity { return reversedAssociations; } - public Map<String, String> getNmAssociations() { - return nmAssociations; + public Map<String, String> getManyToManyAssociations() { + return manyToManyAssociations; } - public Map<String, String> getAssociations() { - return associations; + public Map<String, String> getOneToManyAssociations() { + return oneToManyAssociations; } - public Map<String, String> getRequired() { - return required; + public Map<String, String> getManyToOneAssociations() { + return manyToOneAssociations; } public Map<String, String> getProperties() { @@ -169,17 +169,17 @@ public class TopiaMetadataEntity { return dbColumnName; } - public Map<String, String> getDbNmAssociationsName() { - return dbNmAssociationsName; + public Map<String, String> getDbManyToManyAssociationsTableName() { + return dbManyToManyAssociationsTableName; } - public String getBdNmAssociationName(String propertyName) { - return dbNmAssociationsName.get(propertyName); + public String getBdManyToManyAssociationTableName(String propertyName) { + return dbManyToManyAssociationsTableName.get(propertyName); } - public void addAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { + public void addOneToManyAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); - associations.put(name, associationClazz.getType()); + oneToManyAssociations.put(name, associationClazz.getType()); addDbColumnName(name, dbColumnName); } @@ -189,16 +189,16 @@ public class TopiaMetadataEntity { addDbColumnName(name, dbColumnName); } - public void addNmAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName, String dbNmAssociationName) { - log.info(getType() + "/" + name + "(" + dbNmAssociationName + ") →" + associationClazz.getType()); - nmAssociations.put(name, associationClazz.getType()); + public void addManyToManyAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName, String dbManyToManyAssociationTableName) { + log.info(getType() + "/" + name + "(" + dbManyToManyAssociationTableName + ") →" + associationClazz.getType()); + manyToManyAssociations.put(name, associationClazz.getType()); addDbColumnName(name, dbColumnName); - dbNmAssociationsName.put(name, dbNmAssociationName); + dbManyToManyAssociationsTableName.put(name, dbManyToManyAssociationTableName); } - public void addRequired(TopiaMetadataEntity attributeClazz, String name, String dbColumnName) { - log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + attributeClazz.getType()); - required.put(name, attributeClazz.getType()); + public void addManyToOneAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); + manyToOneAssociations.put(name, associationClazz.getType()); addDbColumnName(name, dbColumnName); } @@ -210,13 +210,13 @@ public class TopiaMetadataEntity { public TopiaMetadataEntity copy() { TopiaMetadataEntity copy = new TopiaMetadataEntity(parent, type, dbSchemaName, dbTableName); - copy.associations.putAll(associations); + copy.oneToManyAssociations.putAll(oneToManyAssociations); copy.reversedAssociations.putAll(reversedAssociations); - copy.nmAssociations.putAll(nmAssociations); - copy.required.putAll(required); + copy.manyToManyAssociations.putAll(manyToManyAssociations); + copy.manyToOneAssociations.putAll(manyToOneAssociations); copy.properties.putAll(properties); copy.dbColumnsName.putAll(dbColumnsName); - copy.dbNmAssociationsName.putAll(dbNmAssociationsName); + copy.dbManyToManyAssociationsTableName.putAll(dbManyToManyAssociationsTableName); return copy; } @@ -227,20 +227,20 @@ public class TopiaMetadataEntity { String propertyType = entry.getValue(); visitor.visitReversedAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); } - for (Map.Entry<String, String> entry : associations.entrySet()) { + for (Map.Entry<String, String> entry : oneToManyAssociations.entrySet()) { String propertyName = entry.getKey(); String propertyType = entry.getValue(); - visitor.visitAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); + visitor.visitOneToManyAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); } - for (Map.Entry<String, String> entry : nmAssociations.entrySet()) { + for (Map.Entry<String, String> entry : manyToManyAssociations.entrySet()) { String propertyName = entry.getKey(); String propertyType = entry.getValue(); - visitor.visitNmAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); + visitor.visitManyToManyAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); } - for (Map.Entry<String, String> entry : required.entrySet()) { + for (Map.Entry<String, String> entry : manyToOneAssociations.entrySet()) { String propertyName = entry.getKey(); String propertyType = entry.getValue(); - visitor.visitRequired(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); + visitor.visitManyToOneAssociation(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); } for (Map.Entry<String, String> entry : properties.entrySet()) { String propertyName = entry.getKey(); @@ -251,7 +251,7 @@ public class TopiaMetadataEntity { } public boolean withShell() { - return !(reversedAssociations.isEmpty() && associations.isEmpty() && nmAssociations.isEmpty()); + return !(reversedAssociations.isEmpty() && oneToManyAssociations.isEmpty() && manyToManyAssociations.isEmpty()); } private void addDbColumnName(String name, String dbColumnName) { diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java index 3573c3a..a41b311 100644 --- a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java +++ b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataModelVisitor.java @@ -46,11 +46,11 @@ public interface TopiaMetadataModelVisitor { void visitReversedAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); - void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); + void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); - void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); + void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); - void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); + void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType); @@ -82,17 +82,17 @@ public interface TopiaMetadataModelVisitor { } @Override - public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { } @Override - public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { } @Override - public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { } @@ -141,24 +141,24 @@ public interface TopiaMetadataModelVisitor { } @Override - public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendProperty("Association: ", metadataEntity, propertyName, propertyType.getType()); + public void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + appendProperty("OneToManyAssociation: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } } @Override - public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendProperty("NmAssociation: ", metadataEntity, propertyName, propertyType.getType()); + public void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + appendProperty("ManyToManyAssociation: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } } @Override - public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendProperty("Required: ", metadataEntity, propertyName, propertyType.getType()); + public void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + appendProperty("ManyToOneAssociation: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } @@ -217,21 +217,21 @@ public interface TopiaMetadataModelVisitor { } @Override - public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { appendProperty("Association: ", metadataEntity, propertyName, propertyType.getType()); } } @Override - public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { appendProperty("NmAssociation: ", metadataEntity, propertyName, propertyType.getType()); } } @Override - public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { appendProperty("Required: ", metadataEntity, propertyName, propertyType.getType()); } diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTablesFactory.java b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTablesFactory.java index 2da7191..b60d321 100644 --- a/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTablesFactory.java +++ b/observe-topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/tables/TopiaSqlTablesFactory.java @@ -151,7 +151,7 @@ public class TopiaSqlTablesFactory { } @Override - public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (predicate.acceptAssociation(metadataEntity, propertyName, propertyType)) { @@ -170,7 +170,7 @@ public class TopiaSqlTablesFactory { } @Override - public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (predicate.acceptNmAssociation(metadataEntity, propertyName, propertyType)) { @@ -182,7 +182,7 @@ public class TopiaSqlTablesFactory { } @Override - public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + public void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { } @Override diff --git a/observe-topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java b/observe-topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java index 950ae90..b667aab 100644 --- a/observe-topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java +++ b/observe-topia-templates-extension/src/main/java/org/nuiton/topia/templates/TopiaMetadataModelGenerator.java @@ -216,13 +216,13 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { if (optionalEntity.isPresent()) { TopiaMetadataEntity parentMetadataEntity = optionalEntity.get(); - metadataEntity.getAssociations().putAll(parentMetadataEntity.getAssociations()); + metadataEntity.getOneToManyAssociations().putAll(parentMetadataEntity.getOneToManyAssociations()); metadataEntity.getReversedAssociations().putAll(parentMetadataEntity.getReversedAssociations()); - metadataEntity.getNmAssociations().putAll(parentMetadataEntity.getNmAssociations()); - metadataEntity.getRequired().putAll(parentMetadataEntity.getRequired()); + metadataEntity.getManyToManyAssociations().putAll(parentMetadataEntity.getManyToManyAssociations()); + metadataEntity.getManyToOneAssociations().putAll(parentMetadataEntity.getManyToOneAssociations()); metadataEntity.getProperties().putAll(parentMetadataEntity.getProperties()); metadataEntity.getDbColumnsName().putAll(parentMetadataEntity.getDbColumnsName()); - metadataEntity.getDbColumnsName().putAll(parentMetadataEntity.getDbNmAssociationsName()); + metadataEntity.getDbColumnsName().putAll(parentMetadataEntity.getDbManyToManyAssociationsTableName()); applyInheritance(metadataEntity, superClass, metadataModel); @@ -323,18 +323,18 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { // many to many String tableName = templateHelper.getManyToManyTableName(attr); - metadataEntity.addNmAssociation(attributeClazz, name, attrColumn, tableName); + metadataEntity.addManyToManyAssociation(attributeClazz, name, attrColumn, tableName); } else { // one to many - metadataEntity.addAssociation(attributeClazz, name, attrColumn); + metadataEntity.addOneToManyAssociation(attributeClazz, name, attrColumn); } } else { if (GeneratorUtil.isNMultiplicity(attr.getReverseMaxMultiplicity()) && !attr.hasAssociationClass()) { // many to one - metadataEntity.addRequired(attributeClazz, name, attrColumn); + metadataEntity.addManyToOneAssociation(attributeClazz, name, attrColumn); } else { -- 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 feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 4ad885148cea3c7fc456f9b96670eef4375561af Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 4 12:14:47 2016 +0200 Meilleur nommage dans le méta-modèle + correction de l'algorithme de remplacement --- .../synchro/InsertSqlStatementGenerator.java | 57 ++++----- .../synchro/ReplaceSqlStatementGenerator.java | 76 ++++++----- .../synchro/UpdateSqlStatementGenerator.java | 142 ++++++++++----------- 3 files changed, 130 insertions(+), 145 deletions(-) diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java index 65fcac6..312def0 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java @@ -36,13 +36,13 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { private final String tableName; private final Binder<R, R> binder; private final String[] simplePropertyNames; - private final String[] compositionPropertyNames; - private final Set<NmAssociation> nmAssociations; + private final String[] manyToOneAssociationNames; + private final Set<ManyToManyAssociationStruct> manyToManyAssociations; /** * Pour décrire une association nm. */ - private static class NmAssociation { + private static class ManyToManyAssociationStruct { /** * Le nom de la propriété dans l'objet. @@ -57,23 +57,12 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { */ private final String tableName; - private NmAssociation(String propertyName, String dbColumnName, String tableName) { + private ManyToManyAssociationStruct(String propertyName, String dbColumnName, String tableName) { this.propertyName = propertyName; this.dbColumnName = dbColumnName; this.tableName = tableName; } - public String getPropertyName() { - return propertyName; - } - - public String getDbColumnName() { - return dbColumnName; - } - - public String getTableName() { - return tableName; - } } public InsertSqlStatementGenerator(TopiaMetadataEntity metadataEntity, Class<R> dtoType) { @@ -81,19 +70,19 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { this.tableName = metadataEntity.getDbTableName(); Set<String> propertyNamesSet = metadataEntity.getProperties().keySet(); this.simplePropertyNames = propertyNamesSet.toArray(new String[propertyNamesSet.size()]); - Set<String> compositionPropertyNamesSet = metadataEntity.getRequired().keySet(); - this.compositionPropertyNames = propertyNamesSet.toArray(new String[compositionPropertyNamesSet.size()]); + Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); + this.manyToOneAssociationNames = propertyNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); - Map<String, String> nmAssociationsMap = metadataEntity.getNmAssociations(); - this.nmAssociations = new LinkedHashSet<>(); - for (Map.Entry<String, String> entry : nmAssociationsMap.entrySet()) { + Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations(); + this.manyToManyAssociations = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : manyToManyAssociationsMap.entrySet()) { String propertyName = entry.getKey(); String dbColumnName = metadataEntity.getDbColumnName(propertyName); - String tableName = metadataEntity.getBdNmAssociationName(propertyName); - NmAssociation nmAssociation = new NmAssociation(propertyName, dbColumnName, tableName); - nmAssociations.add(nmAssociation); + String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName); + ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName); + manyToManyAssociations.add(manyToManyAssociation); } - this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, compositionPropertyNames); + this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, manyToOneAssociationNames); this.binder = BinderFactory.newBinder(dtoType); } @@ -103,7 +92,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { addStringParameter(referentialDto.getId(), parameters); addOtherTypeParameter(referentialDto.getVersion(), parameters); - addOtherTypeParameter(referentialDto.getCreateDate(), parameters); + addDateParameter(referentialDto.getCreateDate(), parameters); Map<String, Object> simpleParameters = binder.obtainProperties(referentialDto, true, simplePropertyNames); for (Object parameterValue : simpleParameters.values()) { @@ -128,7 +117,7 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { } - Map<String, Object> compositionParameters = binder.obtainProperties(referentialDto, true, compositionPropertyNames); + Map<String, Object> compositionParameters = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); for (Object parameterValue : compositionParameters.values()) { if (parameterValue == null) { @@ -154,8 +143,8 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { if (log.isDebugEnabled()) { log.debug("sql: " + result); } - for (NmAssociation nmAssociation : nmAssociations) { - String nmAssociationSql = generateNmAssociationSql(referentialDto, nmAssociation); + for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) { + String nmAssociationSql = generateNmAssociationSql(referentialDto, manyToManyAssociation); result += nmAssociationSql; } @@ -163,18 +152,18 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { } - private String generateNmAssociationSql(R referentialDto, NmAssociation nmAssociation) { + private String generateNmAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociationStruct) { StringBuilder builder = new StringBuilder(); - Collection<ReferentialReference<?>> nmAssociationValues = binder.obtainSourceProperty(referentialDto, nmAssociation.getPropertyName()); - if (CollectionUtils.isNotEmpty(nmAssociationValues)) { + Collection<ReferentialReference<?>> manyToManyAssociationValues = binder.obtainSourceProperty(referentialDto, manyToManyAssociationStruct.propertyName); + if (CollectionUtils.isNotEmpty(manyToManyAssociationValues)) { - String nmAssociationTableName = nmAssociation.getTableName(); - String nmAssociationDbColumnName = nmAssociation.getDbColumnName(); + String nmAssociationTableName = manyToManyAssociationStruct.tableName; + String nmAssociationDbColumnName = manyToManyAssociationStruct.dbColumnName; String referentialDtoId = referentialDto.getId(); - for (ReferentialReference<?> nmAssociationValue : nmAssociationValues) { + for (ReferentialReference<?> nmAssociationValue : manyToManyAssociationValues) { String sql = String.format(NM_ASSOCIATION_INSERT_STATEMENT, schemaName, 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 index 68e44ff..e0d6e9d 100644 --- 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 @@ -21,11 +21,17 @@ 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 final String MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s', SET topiaVersion = topiaVersion + 1 WHERE topiaId = '%s';\n"; + private static final String MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT = "UPDATE %s.%s SET %s = '%s' WHERE %s = '%s';\n"; + + /** + * Informations pour remplacer dans une relation many-to-one. + */ + private final Set<ReplacementStruct> manyToOneAssociationReplacements; + /** + * Informations pour remplacer dans une relation many-to-many. + */ + private final Set<ReplacementStruct> manyToManyAssociationReplacements; private static class ReplacementStruct { @@ -42,24 +48,41 @@ public class ReplaceSqlStatementGenerator { } public ReplaceSqlStatementGenerator(TopiaMetadataModel topiaMetadataModel, String referentialName) { - this.requiredReplacements = computeRequiredReplacements(referentialName, topiaMetadataModel); - this.nmAssociationReplacements = computeNmAssociationReplacements(referentialName, topiaMetadataModel); + this.manyToOneAssociationReplacements = computeManyToOneAssociationReplacements(referentialName, topiaMetadataModel); + this.manyToManyAssociationReplacements = computeManyToManyAssociationReplacements(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); + for (ReplacementStruct replacementStruct : manyToOneAssociationReplacements) { + + String sql = String.format(MANY_TO_ONE_ASSOCIATION_UPDATE_STATEMENT, + replacementStruct.schemaName, + replacementStruct.tableName, + replacementStruct.columnName, + replacementId, + sourceId); + if (log.isDebugEnabled()) { + log.debug("sql: " + sql); + } builder.append(sql); } - for (ReplacementStruct replacementStruct : nmAssociationReplacements) { - - String sql = generateSqlStatement(NMASSOCIATION_UPDATE_STATEMENT, replacementStruct, sourceId, replacementId); + for (ReplacementStruct replacementStruct : manyToManyAssociationReplacements) { + + String sql = String.format(MANY_TO_MANY_ASSOCIATION_UPDATE_STATEMENT, + replacementStruct.schemaName, + replacementStruct.tableName, + replacementStruct.columnName, + replacementId, + replacementStruct.columnName, + sourceId); + if (log.isDebugEnabled()) { + log.debug("sql: " + sql); + } builder.append(sql); } @@ -68,13 +91,13 @@ public class ReplaceSqlStatementGenerator { } - private Set<ReplacementStruct> computeRequiredReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { + private Set<ReplacementStruct> computeManyToOneAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { Set<ReplacementStruct> result = new LinkedHashSet<>(); for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) { - result.addAll(metadataEntity.getRequired().entrySet().stream() + result.addAll(metadataEntity.getManyToOneAssociations().entrySet().stream() .filter(entry -> entry.getValue().equals(referentialName)) .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), metadataEntity.getDbTableName(), @@ -87,16 +110,16 @@ public class ReplaceSqlStatementGenerator { } - private Set<ReplacementStruct> computeNmAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { + private Set<ReplacementStruct> computeManyToManyAssociationReplacements(String referentialName, TopiaMetadataModel topiaMetadataModel) { Set<ReplacementStruct> result = new LinkedHashSet<>(); for (TopiaMetadataEntity metadataEntity : topiaMetadataModel) { - result.addAll(metadataEntity.getNmAssociations().entrySet().stream() + result.addAll(metadataEntity.getManyToManyAssociations().entrySet().stream() .filter(entry -> entry.getValue().equals(referentialName)) .map(entry -> new ReplacementStruct(metadataEntity.getDbSchemaName(), - metadataEntity.getBdNmAssociationName(entry.getValue()), + metadataEntity.getBdManyToManyAssociationTableName(entry.getValue()), metadataEntity.getDbColumnName(entry.getValue()))) .collect(Collectors.toList())); @@ -106,21 +129,4 @@ public class ReplaceSqlStatementGenerator { } - 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; - - } - } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java index d238410..365e0f4 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java @@ -30,21 +30,21 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { private static final Log log = LogFactory.getLog(UpdateSqlStatementGenerator.class); private static final String UPDATE_STATEMENT = "UPDATE %s.%s %s WHERE topiaId ='%s';\n"; - private static final String NM_ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n"; - private static final String NM_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; + private static final String MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT = "DELETE FROM %s.%s WHERE %s = '%s';\n"; + private static final String MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT = "INSERT INTO %s.%s(%s, %s) VALUES ('%s', '%s');\n"; private final Map<String, String> columnNames; private final String schemaName; private final String tableName; private final Binder<R, R> binder; private final String[] simplePropertyNames; - private final String[] compositionPropertyNames; - private final Set<NmAssociation> nmAssociations; + private final String[] manyToOneAssociationNames; + private final Set<ManyToManyAssociationStruct> manyToManyAssociations; /** * Pour décrire une association nm. */ - private static class NmAssociation { + private static class ManyToManyAssociationStruct { /** * Le nom de la propriété dans l'objet. @@ -59,43 +59,32 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { */ private final String tableName; - private NmAssociation(String propertyName, String dbColumnName, String tableName) { + private ManyToManyAssociationStruct(String propertyName, String dbColumnName, String tableName) { this.propertyName = propertyName; this.dbColumnName = dbColumnName; this.tableName = tableName; } - public String getPropertyName() { - return propertyName; - } - - public String getDbColumnName() { - return dbColumnName; - } - - public String getTableName() { - return tableName; - } } public UpdateSqlStatementGenerator(TopiaMetadataEntity metadataEntity, Class<R> dtoType) { this.schemaName = metadataEntity.getDbSchemaName(); this.tableName = metadataEntity.getDbTableName(); - Set<String> propertyNamesSet = metadataEntity.getProperties().keySet(); - this.simplePropertyNames = propertyNamesSet.toArray(new String[propertyNamesSet.size()]); - Set<String> compositionPropertyNamesSet = metadataEntity.getRequired().keySet(); - this.compositionPropertyNames = propertyNamesSet.toArray(new String[compositionPropertyNamesSet.size()]); - - Map<String, String> nmAssociationsMap = metadataEntity.getNmAssociations(); - this.nmAssociations = new LinkedHashSet<>(); - for (Map.Entry<String, String> entry : nmAssociationsMap.entrySet()) { + Set<String> simplePropertyNamesSet = metadataEntity.getProperties().keySet(); + this.simplePropertyNames = simplePropertyNamesSet.toArray(new String[simplePropertyNamesSet.size()]); + Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); + this.manyToOneAssociationNames = simplePropertyNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); + + Map<String, String> manyToManyAssociationsMap = metadataEntity.getManyToManyAssociations(); + this.manyToManyAssociations = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : manyToManyAssociationsMap.entrySet()) { String propertyName = entry.getKey(); String dbColumnName = metadataEntity.getDbColumnName(propertyName); - String tableName = metadataEntity.getBdNmAssociationName(propertyName); - NmAssociation nmAssociation = new NmAssociation(propertyName, dbColumnName, tableName); - nmAssociations.add(nmAssociation); + String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName); + ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName); + manyToManyAssociations.add(manyToManyAssociation); } - this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, compositionPropertyNames); + this.columnNames = computeColumnNames(metadataEntity, simplePropertyNames, manyToOneAssociationNames); this.binder = BinderFactory.newBinder(dtoType); } @@ -105,87 +94,88 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { addStringParameter(TopiaEntity.PROPERTY_TOPIA_ID, referentialDto.getId(), parameters); addOtherTypeParameter(TopiaEntity.PROPERTY_TOPIA_VERSION, referentialDto.getVersion(), parameters); - addOtherTypeParameter(TopiaEntity.PROPERTY_TOPIA_CREATE_DATE, referentialDto.getCreateDate(), parameters); + addDateParameter(TopiaEntity.PROPERTY_TOPIA_CREATE_DATE, referentialDto.getCreateDate(), parameters); - Map<String, Object> simpleParameters = binder.obtainProperties(referentialDto, true, simplePropertyNames); - for (Map.Entry<String, Object> entry : simpleParameters.entrySet()) { + Map<String, Object> simpleProperties = binder.obtainProperties(referentialDto, true, simplePropertyNames); + for (Map.Entry<String, Object> entry : simpleProperties.entrySet()) { - String parameterName = entry.getKey(); - String columnName = columnNames.get(parameterName); - Object parameterValue = entry.getValue(); + String simplePropertyName = entry.getKey(); + String columnName = columnNames.get(simplePropertyName); + Object simplePropertyValue = entry.getValue(); - if (parameterValue == null) { + if (simplePropertyValue == null) { addNullParameter(columnName, parameters); continue; } - if (parameterValue instanceof String) { - addStringParameter(columnName, (String) parameterValue, parameters); + if (simplePropertyValue instanceof String) { + addStringParameter(columnName, (String) simplePropertyValue, parameters); continue; } - if (parameterValue instanceof Date) { - addDateParameter(columnName, (Date) parameterValue, parameters); + if (simplePropertyValue instanceof Date) { + addDateParameter(columnName, (Date) simplePropertyValue, parameters); continue; } - if (parameterValue instanceof Enum) { - addEnumParameter(columnName, (Enum) parameterValue, parameters); + if (simplePropertyValue instanceof Enum) { + addEnumParameter(columnName, (Enum) simplePropertyValue, parameters); continue; } - addOtherTypeParameter(columnName, parameterValue, parameters); + addOtherTypeParameter(columnName, simplePropertyValue, parameters); } + Map<String, Object> manyToOneAssociations = binder.obtainProperties(referentialDto, true, manyToOneAssociationNames); + for (Map.Entry<String, Object> entry : manyToOneAssociations.entrySet()) { - Map<String, Object> compositionParameters = binder.obtainProperties(referentialDto, true, compositionPropertyNames); - for (Map.Entry<String, Object> entry : compositionParameters.entrySet()) { - - String parameterName = entry.getKey(); - String columnName = columnNames.get(parameterName); - Object parameterValue = entry.getValue(); + String manyToOneAssociationName = entry.getKey(); + String columnName = columnNames.get(manyToOneAssociationName); + Object manyToOneAssociationValue = entry.getValue(); - if (parameterValue == null) { + if (manyToOneAssociationValue == null) { addNullParameter(columnName, parameters); continue; } - if (parameterValue instanceof ReferentialDto) { - addReferentialDtoParameter(columnName, (ReferentialDto) parameterValue, parameters); + if (manyToOneAssociationValue instanceof ReferentialDto) { + addReferentialDtoParameter(columnName, (ReferentialDto) manyToOneAssociationValue, parameters); continue; } - if (parameterValue instanceof ReferentialReference) { - addReferentialReferenceParameter(columnName, (ReferentialReference) parameterValue, parameters); + if (manyToOneAssociationValue instanceof ReferentialReference) { + addReferentialReferenceParameter(columnName, (ReferentialReference) manyToOneAssociationValue, parameters); } } - String result = String.format(UPDATE_STATEMENT, - schemaName, - tableName, - parameters.substring(2), - referentialDto.getId()); + StringBuilder result = new StringBuilder(); + String sql = String.format(UPDATE_STATEMENT, + schemaName, + tableName, + parameters.substring(2), + referentialDto.getId()); + result.append(sql); if (log.isDebugEnabled()) { - log.debug("sql: " + result); + log.debug("sql: " + sql); } - for (NmAssociation nmAssociation : nmAssociations) { - String nmAssociationSql = generateNmAssociationSql(referentialDto, nmAssociation); - result += nmAssociationSql; + for (ManyToManyAssociationStruct manyToManyAssociation : manyToManyAssociations) { + String manyToManyAssociationSql = generateManyToManyAssociationSql(referentialDto, manyToManyAssociation); + result.append(manyToManyAssociationSql); } - return result; + return result.toString(); } - private String generateNmAssociationSql(R referentialDto, NmAssociation nmAssociation) { + private String generateManyToManyAssociationSql(R referentialDto, ManyToManyAssociationStruct manyToManyAssociation) { StringBuilder builder = new StringBuilder(); String referentialDtoId = referentialDto.getId(); - String nmAssociationTableName = nmAssociation.getTableName(); + String manyToManyAssociationTableName = manyToManyAssociation.tableName; // On commence toujours par supprimer toutes les anciennes associations, elles seront ré-ajoutées juste après - String deleteSql = String.format(NM_ASSOCIATION_DELETE_STATEMENT, + String deleteSql = String.format(MANY_TO_MANY_ASSOCIATION_DELETE_STATEMENT, schemaName, - nmAssociationTableName, + manyToManyAssociationTableName, tableName, referentialDtoId); builder.append(deleteSql); @@ -193,22 +183,22 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { log.debug("sql: " + deleteSql); } - Collection<ReferentialReference<?>> nmAssociationValues = binder.obtainSourceProperty(referentialDto, nmAssociation.getPropertyName()); - if (CollectionUtils.isNotEmpty(nmAssociationValues)) { + Collection<ReferentialReference<?>> manyToManyAssociationValues = binder.obtainSourceProperty(referentialDto, manyToManyAssociation.propertyName); + if (CollectionUtils.isNotEmpty(manyToManyAssociationValues)) { - String nmAssociationDbColumnName = nmAssociation.getDbColumnName(); + String manyToManyAssociationDbColumnName = manyToManyAssociation.dbColumnName; - for (ReferentialReference<?> nmAssociationValue : nmAssociationValues) { + for (ReferentialReference<?> manyToManyAssociationValue : manyToManyAssociationValues) { - String sql = String.format(NM_ASSOCIATION_INSERT_STATEMENT, + String sql = String.format(MANY_TO_MANY_ASSOCIATION_INSERT_STATEMENT, schemaName, - nmAssociationTableName, + manyToManyAssociationTableName, tableName, - nmAssociationDbColumnName, + manyToManyAssociationDbColumnName, referentialDtoId, - nmAssociationValue.getId()); + manyToManyAssociationValue.getId()); if (log.isDebugEnabled()) { log.debug("sql: " + sql); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm