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 e29483113f2a6fca5cbbead039996db280dbf451 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jun 28 18:29:32 2016 +0200 Mettre à plat la notion d'héritage pour tout avoir de disponible dans le méta-modèle allégé --- .../persistence/metadata/TopiaMetadataEntity.java | 14 ++++++- .../persistence/metadata/TopiaMetadataModel.java | 4 +- .../templates/TopiaMetadataModelGenerator.java | 43 +++++++++++++++++++++- 3 files changed, 56 insertions(+), 5 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 02fdd0d..8c16f2c 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 @@ -41,6 +41,10 @@ public class TopiaMetadataEntity { private static final Log log = LogFactory.getLog(TopiaMetadataEntity.class); /** + * L'entité parent (optionnelle). + */ + protected final String parent; + /** * Le nom simple de l'entité (correspond au nom de l'énumération qui caractérise cette entité). */ protected final String type; @@ -80,7 +84,8 @@ public class TopiaMetadataEntity { */ protected final Map<String, String> dbColumnsName = new LinkedHashMap<>(); - public TopiaMetadataEntity(String type, String dbSchemaName, String dbTableName) { + public TopiaMetadataEntity(String parent, String type, String dbSchemaName, String dbTableName) { + this.parent=parent; this.type = type; this.dbSchemaName = dbSchemaName; this.dbTableName = dbTableName; @@ -111,6 +116,11 @@ public class TopiaMetadataEntity { .toString(); } + public boolean withParent() { return parent!=null;} + public String getParent() { + return parent; + } + public String getDbSchemaName() { return dbSchemaName; } @@ -182,7 +192,7 @@ public class TopiaMetadataEntity { } public TopiaMetadataEntity copy() { - TopiaMetadataEntity copy = new TopiaMetadataEntity(type, dbSchemaName, dbTableName); + TopiaMetadataEntity copy = new TopiaMetadataEntity(parent, type, dbSchemaName, dbTableName); copy.associations.putAll(associations); copy.reversedAssociations.putAll(reversedAssociations); copy.nmAssociations.putAll(nmAssociations); 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 5aef1d1..d4de2b1 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, String dbSchemaName, String dbTableName) { + public TopiaMetadataEntity newEntity(String parent, String type, String dbSchemaName, String dbTableName) { Preconditions.checkState(!entities.containsKey(type), type + " already in cache"); - TopiaMetadataEntity clazz = new TopiaMetadataEntity(type, dbSchemaName, dbTableName); + TopiaMetadataEntity clazz = new TopiaMetadataEntity(parent, type, dbSchemaName, dbTableName); entities.put(type, clazz); log.info(clazz.getType()); return clazz; 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 fa93caa..4d79925 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 @@ -80,10 +80,18 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { List<ObjectModelClass> entityClasses = getTemplateHelper().getEntityClasses(model, true); TopiaMetadataModel metadataModel = new TopiaMetadataModel(); + + // Première passe pour construire toutes les entités for (ObjectModelClass entityClass : entityClasses) { buildMetadataEntity(entityClass, metadataModel); } + // Seconde passe pour aggréger les héritages + for (ObjectModelClass entityClass : entityClasses) { + TopiaMetadataEntity metadataEntity = metadataModel.getEntity(entityClass.getName()); + applyInheritance(metadataEntity, entityClass, metadataModel); + } + if (log.isDebugEnabled()) { TopiaMetadataModelVisitor.PrintVisitor visitor = new TopiaMetadataModelVisitor.PrintVisitor(true, "\n"); metadataModel.accept(visitor); @@ -195,6 +203,32 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { // content.append(" /* ").append(comment).append(" */"); // } + + + + protected void applyInheritance(TopiaMetadataEntity metadataEntity, ObjectModelClass entityClass, TopiaMetadataModel metadataModel) { + + boolean haveSuper = entityClass.getSuperclasses().size() > 0; + if (haveSuper) { + ObjectModelClass superClass = entityClass.getSuperclasses().iterator().next(); + String parentName = superClass.getName(); + Optional<TopiaMetadataEntity> optionalEntity = metadataModel.getOptionalEntity(parentName); + if (optionalEntity.isPresent()) { + + TopiaMetadataEntity parentMetadataEntity = optionalEntity.get(); + metadataEntity.getAssociations().putAll(parentMetadataEntity.getAssociations()); + metadataEntity.getReversedAssociations().putAll(parentMetadataEntity.getReversedAssociations()); + metadataEntity.getNmAssociations().putAll(parentMetadataEntity.getNmAssociations()); + metadataEntity.getRequired().putAll(parentMetadataEntity.getRequired()); + metadataEntity.getProperties().putAll(parentMetadataEntity.getProperties()); + metadataEntity.getDbColumnsName().putAll(parentMetadataEntity.getDbColumnsName()); + + applyInheritance(metadataEntity, superClass, metadataModel); + + } + } + + } protected TopiaMetadataEntity buildMetadataEntity(ObjectModelClass entityClass, TopiaMetadataModel metadataModel) { TopiaMetadataEntity metadataEntity; @@ -213,7 +247,14 @@ public class TopiaMetadataModelGenerator extends ObjectModelGenerator { String dbSchemaName = topiaTagValues.getDbSchemaNameTagValue(entityClass, aPackage, model); String dbTableName = templateHelper.getDbName(entityClass); - metadataEntity = metadataModel.newEntity(entityClassName, dbSchemaName, dbTableName); + boolean haveSuper = entityClass.getSuperclasses().size() > 0; + + String parent = null; + if (haveSuper) { + ObjectModelClass superClass = entityClass.getSuperclasses().iterator().next(); + parent = superClass.getName(); + } + metadataEntity = metadataModel.newEntity(parent, entityClassName, dbSchemaName, dbTableName); Collection<ObjectModelAttribute> attributes = entityClass.getAttributes(); for (ObjectModelAttribute attr : attributes) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.