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 f40b800a0cf8fd0975f4429b4857ebb250912187 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jun 28 12:28:08 2016 +0200 Ajout des informations sur les propriétés simples dans le méta-modèle simplifié + les informations sur les noms en base --- .../persistence/metadata/TopiaMetadataEntity.java | 110 ++++++++++++++++++--- .../persistence/metadata/TopiaMetadataModel.java | 4 +- .../metadata/TopiaMetadataModelVisitor.java | 40 +++++--- .../sql/batch/tables/TopiaSqlTablesFactory.java | 5 + .../templates/TopiaMetadataModelGenerator.java | 52 ++++++++-- 5 files changed, 178 insertions(+), 33 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 789063a..02fdd0d 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 @@ -40,14 +40,50 @@ public class TopiaMetadataEntity { private static final Log log = LogFactory.getLog(TopiaMetadataEntity.class); + /** + * Le nom simple de l'entité (correspond au nom de l'énumération qui caractérise cette entité). + */ protected final String type; + /** + * Le nom du schéma qui contient la table correspondant à l'entité. + */ + protected final String dbSchemaName; + /** + * Le nom de la table qui correspond à l'entité. + */ + protected final String dbTableName; + /** + * 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<>(); + /** + * Le dictionnaire des associations inversées (la clef est le nom de la propriété, la valeur son type). + */ protected final Map<String, String> reversedAssociations = new LinkedHashMap<>(); + /** + * 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<>(); + /** + * 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<>(); - - public TopiaMetadataEntity(String type) { + /** + * 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). + */ + protected final Map<String, String> properties = new LinkedHashMap<>(); + /** + * Le nom des colunnes correspondants aux propriétés de l'entité. + * <b>Note: </b> On ne conserve que les correspondances qui diffèrent du nom de la propriété. + * + * @see #getDbColumnName(String) + */ + protected final Map<String, String> dbColumnsName = new LinkedHashMap<>(); + + public TopiaMetadataEntity(String type, String dbSchemaName, String dbTableName) { this.type = type; + this.dbSchemaName = dbSchemaName; + this.dbTableName = dbTableName; } public String getType() { @@ -70,8 +106,17 @@ public class TopiaMetadataEntity { @Override public String toString() { return MoreObjects.toStringHelper(this) - .add("type", type) - .toString(); + .add("type", type) + .add("dbName", dbSchemaName + "." + dbTableName) + .toString(); + } + + public String getDbSchemaName() { + return dbSchemaName; + } + + public String getDbTableName() { + return dbTableName; } public Map<String, String> getReversedAssociations() { @@ -90,32 +135,60 @@ public class TopiaMetadataEntity { return required; } - public void addAssociation(TopiaMetadataEntity associationClazz, String name) { - log.info(getType() + "/" + name + "→" + associationClazz.getType()); + public Map<String, String> getProperties() { + return properties; + } + + public Map<String, String> getDbColumnsName() { + return dbColumnsName; + } + + public String getDbColumnName(String propertyName) { + String dbColumnName = dbColumnsName.get(propertyName); + if (dbColumnName == null) { + dbColumnName = propertyName; + } + return dbColumnName; + } + + public void addAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); associations.put(name, associationClazz.getType()); + addDbColumnName(name, dbColumnName); } - public void addReversedAssociation(TopiaMetadataEntity associationClazz, String name) { - log.info(getType() + "/" + name + "→" + associationClazz.getType()); + public void addReversedAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); reversedAssociations.put(name, associationClazz.getType()); + addDbColumnName(name, dbColumnName); } - public void addNmAssociation(TopiaMetadataEntity associationClazz, String name) { - log.info(getType() + "/" + name + "→" + associationClazz.getType()); + public void addNmAssociation(TopiaMetadataEntity associationClazz, String name, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + associationClazz.getType()); nmAssociations.put(name, associationClazz.getType()); + addDbColumnName(name, dbColumnName); } - public void addRequired(TopiaMetadataEntity attributeClazz, String name) { - log.info(getType() + "/" + name + "→" + attributeClazz.getType()); + public void addRequired(TopiaMetadataEntity attributeClazz, String name, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + attributeClazz.getType()); required.put(name, attributeClazz.getType()); + addDbColumnName(name, dbColumnName); + } + + public void addProperty(String name, String type, String dbColumnName) { + log.info(getType() + "/" + name + "(" + dbColumnName + ") →" + type); + properties.put(name, type); + addDbColumnName(name, dbColumnName); } public TopiaMetadataEntity copy() { - TopiaMetadataEntity copy = new TopiaMetadataEntity(type); + TopiaMetadataEntity copy = new TopiaMetadataEntity(type, dbSchemaName, dbTableName); copy.associations.putAll(associations); copy.reversedAssociations.putAll(reversedAssociations); copy.nmAssociations.putAll(nmAssociations); copy.required.putAll(required); + copy.properties.putAll(properties); + copy.dbColumnsName.putAll(dbColumnsName); return copy; } @@ -141,10 +214,21 @@ public class TopiaMetadataEntity { String propertyType = entry.getValue(); visitor.visitRequired(metadataModel, this, propertyName, metadataModel.getEntity(propertyType)); } + for (Map.Entry<String, String> entry : properties.entrySet()) { + String propertyName = entry.getKey(); + String propertyType = entry.getValue(); + visitor.visitProperty(metadataModel, this, propertyName, propertyType); + } visitor.visitEntiyEnd(metadataModel, this); } public boolean withShell() { return !(reversedAssociations.isEmpty() && associations.isEmpty() && nmAssociations.isEmpty()); } + + private void addDbColumnName(String name, String dbColumnName) { + if (!name.equals(dbColumnName)) { + dbColumnsName.put(name, dbColumnName); + } + } } 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 19812fe..5aef1d1 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 @@ -63,9 +63,9 @@ public class TopiaMetadataModel { visitor.visitModelEnd(this); } - public TopiaMetadataEntity newEntity(String type) { + public TopiaMetadataEntity newEntity(String type, String dbSchemaName, String dbTableName) { Preconditions.checkState(!entities.containsKey(type), type + " already in cache"); - TopiaMetadataEntity clazz = new TopiaMetadataEntity(type); + TopiaMetadataEntity clazz = new TopiaMetadataEntity(type, dbSchemaName, dbTableName); entities.put(type, clazz); log.info(clazz.getType()); return clazz; 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 2aefd8f..3573c3a 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 @@ -52,6 +52,8 @@ public interface TopiaMetadataModelVisitor { void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType); + void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType); + class TopiaMetadataModelVisitorAdapter implements TopiaMetadataModelVisitor { @Override @@ -94,6 +96,10 @@ public interface TopiaMetadataModelVisitor { } + @Override + public void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + + } } class PrintVisitor implements TopiaMetadataModelVisitor { @@ -128,7 +134,7 @@ public interface TopiaMetadataModelVisitor { @Override public void visitReversedAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendPrefix("ReversedAssociation: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("ReversedAssociation: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } @@ -136,7 +142,7 @@ public interface TopiaMetadataModelVisitor { @Override public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendPrefix("Association: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("Association: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } @@ -144,7 +150,7 @@ public interface TopiaMetadataModelVisitor { @Override public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendPrefix("NmAssociation: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("NmAssociation: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } @@ -152,16 +158,19 @@ public interface TopiaMetadataModelVisitor { @Override public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { - appendPrefix("Required: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("Required: ", metadataEntity, propertyName, propertyType.getType()); if (visited.add(propertyType.getType())) { propertyType.accept(this, metadataModel); } } - protected StringBuilder appendPrefix(String prefix) { + private StringBuilder appendPrefix(String prefix) { return builder.append(this.prefix).append(prefix); } + private StringBuilder appendProperty(String prefix, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + return appendPrefix(prefix).append(metadataEntity).append("/").append(propertyName).append("(").append(metadataEntity.getDbColumnName(propertyName)).append(")→").append(propertyType).append(eol); + } } public PrintVisitor(boolean deepVisit, String eol) { @@ -186,7 +195,7 @@ public interface TopiaMetadataModelVisitor { if (deepVisit) { metadataEntity.accept(new DeepVisitor(prefix), metadataModel); - }else { + } else { prefix += " "; appendPrefix("E → ").append(metadataEntity).append(eol); } @@ -203,37 +212,46 @@ public interface TopiaMetadataModelVisitor { @Override public void visitReversedAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { - appendPrefix("ReversedAssociation: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("ReversedAssociation: ", metadataEntity, propertyName, propertyType.getType()); } } @Override public void visitAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { - appendPrefix("Association: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("Association: ", metadataEntity, propertyName, propertyType.getType()); } } @Override public void visitNmAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { - appendPrefix("NmAssociation: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("NmAssociation: ", metadataEntity, propertyName, propertyType.getType()); } } @Override public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { if (!deepVisit) { - appendPrefix("Required: ").append(metadataEntity).append("/").append(propertyName).append("→").append(propertyType.getType()).append(eol); + appendProperty("Required: ", metadataEntity, propertyName, propertyType.getType()); } } @Override + public void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + appendProperty("Property: ", metadataEntity, propertyName, propertyType); + } + + @Override public String toString() { return builder.toString(); } - protected StringBuilder appendPrefix(String prefix) { + private StringBuilder appendProperty(String prefix, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + return appendPrefix(prefix).append(metadataEntity).append("/").append(propertyName).append("(").append(metadataEntity.getDbColumnName(propertyName)).append(")→").append(propertyType).append(eol); + } + + private StringBuilder appendPrefix(String prefix) { return builder.append(this.prefix).append(prefix); } 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 0ee5d12..2da7191 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 @@ -185,6 +185,11 @@ public class TopiaSqlTablesFactory { public void visitRequired(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { } + @Override + public void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + + } + protected void visitChild(TopiaMetadataEntity propertyType) { dones.add(propertyType); propertyType.accept(this, model); 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 79de4e2..fa93caa 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 @@ -32,6 +32,7 @@ import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelGenerator; +import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; import org.nuiton.topia.persistence.metadata.TopiaMetadataModelVisitor; @@ -208,7 +209,11 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { log.info("Start " + entityClassName); - metadataEntity = metadataModel.newEntity(entityClassName); + ObjectModelPackage aPackage = model.getPackage(entityClass); + String dbSchemaName = topiaTagValues.getDbSchemaNameTagValue(entityClass, aPackage, model); + String dbTableName = templateHelper.getDbName(entityClass); + + metadataEntity = metadataModel.newEntity(entityClassName, dbSchemaName, dbTableName); Collection<ObjectModelAttribute> attributes = entityClass.getAttributes(); for (ObjectModelAttribute attr : attributes) { @@ -221,7 +226,42 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { continue; } + String name = attr.getName(); + String attrColumn = templateHelper.getDbName(attr); + if (attr.getClassifier() == null || !getTemplateHelper().isEntity(attr.getClassifier())) { + + String attrType = attr.getType(); + switch (attrType) { + case "String": + attrType="java.lang.String"; + break; + case "Boolean": + attrType="java.lang.Boolean"; + break; + case "Byte": + attrType="java.lang.Byte"; + break; + case "Character": + attrType="java.lang.Character"; + break; + case "Short": + attrType="java.lang.Short"; + break; + case "Integer": + attrType="java.lang.Integer"; + break; + case "Long": + attrType="java.lang.Long"; + break; + case "Float": + attrType="java.lang.Float"; + break; + case "Double": + attrType="java.lang.Double"; + break; + } + metadataEntity.addProperty(name, attrType, attrColumn); continue; } @@ -229,8 +269,6 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { Optional<TopiaMetadataEntity> optionalAttributeClass = metadataModel.getOptionalEntity(attributeClass.getName()); - String name = attr.getName(); - TopiaMetadataEntity attributeClazz; if (optionalAttributeClass.isPresent()) { attributeClazz = optionalAttributeClass.get().copy(); @@ -242,23 +280,23 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { if (GeneratorUtil.isNMultiplicity(attr.getReverseMaxMultiplicity()) && !attr.hasAssociationClass()) { // many to many - metadataEntity.addNmAssociation(attributeClazz, name); + metadataEntity.addNmAssociation(attributeClazz, name, attrColumn); } else { // one to many - metadataEntity.addAssociation(attributeClazz, name); + metadataEntity.addAssociation(attributeClazz, name, attrColumn); } } else { if (GeneratorUtil.isNMultiplicity(attr.getReverseMaxMultiplicity()) && !attr.hasAssociationClass()) { // many to one - metadataEntity.addRequired(attributeClazz, name); + metadataEntity.addRequired(attributeClazz, name, attrColumn); } else { // one to one - metadataEntity.addReversedAssociation(attributeClazz, name); + metadataEntity.addReversedAssociation(attributeClazz, name, attrColumn); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.