This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See http://git.nuiton.org/topia.git commit 5342aeeca8f1bdd460653c8060fade0c9b791ba7 Author: Brendan Le Ny <bleny@codelutin.com> Date: Fri Aug 29 15:52:10 2014 +0200 Refactor MetaTransformer validation and stop generation when model use forbidden class names and attributes (fixes #3487) --- .../topia/templates/TopiaMetaTransformer.java | 78 +++++++++++----------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaMetaTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaMetaTransformer.java index 544aacf..973679e 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaMetaTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaMetaTransformer.java @@ -24,6 +24,7 @@ package org.nuiton.topia.templates; * #L% */ +import com.google.common.collect.ImmutableSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.AbstractMetaTransformer; @@ -36,7 +37,6 @@ import org.nuiton.eugene.models.object.validator.AttributeNamesValidator; import org.nuiton.eugene.models.object.validator.ClassNamesValidator; import org.nuiton.eugene.models.object.validator.ObjectModelValidator; -import java.util.ArrayList; import java.util.List; /** @@ -51,6 +51,13 @@ public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> { /** Logger */ private static final Log log = LogFactory.getLog(TopiaMetaTransformer.class); + protected static final ImmutableSet<String> FORBIDDEN_ATTRIBUTE_NAMES = + ImmutableSet.of("analyze", "next", "value", "values", "begin", "end", "authorization", + "order"); + + protected static final ImmutableSet<String> FORBIDDEN_CLASS_NAMES = + ImmutableSet.of("constraint", "user"); + public TopiaMetaTransformer() { setTemplateTypes( @@ -68,43 +75,17 @@ public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> { } protected boolean validateModel(ObjectModel model) { - List<ObjectModelValidator> validators = new ArrayList<ObjectModelValidator>(); - - AttributeNamesValidator attrValidator = new AttributeNamesValidator( - model); - attrValidator.addNameAndReason("analyze", - "Le nom d'attribut \"analyze\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("next", - "Le nom d'attribut \"next\" est incompatible avec HSQL"); - attrValidator.addNameAndReason("value", - "Le nom d'attribut \"value\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("values", - "Le nom d'attribut \"values\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("begin", - "Le nom d'attribut \"begin\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("end", - "Le nom d'attribut \"end\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("authorization", - "Le nom d'attribut \"authorization\" est incompatible avec certains SGBD"); - attrValidator.addNameAndReason("order", - "Le nom d'attribut \"order\" est incompatible avec certains SGBD"); - validators.add(attrValidator); - - ClassNamesValidator classValidator = new ClassNamesValidator(model); - classValidator.addNameAndReason("constraint", "Nom de classe incompatible avec certains SGBD"); - classValidator.addNameAndReason("user", "Nom de classe incompatible avec certains SGBD"); - validators.add(classValidator); - - validators.add(new TopiaJavaValidator(model)); - validators.add(new TopiaRelationValidator(model)); - - for (ObjectModelValidator validator : validators) { - if (!validator.validate()) { + + boolean validationSuccess = true; + + for (ObjectModelValidator validator : getValidators(model)) { + if ( ! validator.validate()) { for (String error : validator.getErrors()) { if (log.isWarnEnabled()) { log.warn("[VALIDATION] " + error); } } + validationSuccess = false; } } @@ -116,13 +97,34 @@ public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> { if (classes.isEmpty()) { // no entity to generate, can stop safely if (log.isWarnEnabled()) { - log.warn("No entity to generate, " + getClass().getName() + - " is skipped"); + log.warn("No entity to generate, " + getClass().getName() + " is skipped"); } - return false; + validationSuccess = false; } - //FIXME-TC20091220 seems we still generate if there is some validation errors ? not very normal - return true; + + return validationSuccess; + } + + protected ImmutableSet<ObjectModelValidator> getValidators(ObjectModel model) { + + AttributeNamesValidator attributeNamesValidator = new AttributeNamesValidator(model); + for (String sqlKeyword : FORBIDDEN_ATTRIBUTE_NAMES) { + attributeNamesValidator.addNameAndReason( + sqlKeyword, "Le nom d'attribut \"" + sqlKeyword + "\" est incompatible avec certains SGBD"); + } + + ClassNamesValidator classNamesValidator = new ClassNamesValidator(model); + for (String sqlKeyword : FORBIDDEN_CLASS_NAMES) { + classNamesValidator.addNameAndReason( + sqlKeyword, "Le nom de classe \"" + sqlKeyword + "\" est incompatible avec certains SGBD"); + } + + TopiaJavaValidator topiaJavaValidator = new TopiaJavaValidator(model); + + TopiaRelationValidator topiaRelationValidator = new TopiaRelationValidator(model); + + return ImmutableSet.of(attributeNamesValidator, classNamesValidator, topiaJavaValidator, topiaRelationValidator); + } } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.