Index: topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.10 topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.11 --- topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.10 Fri Mar 3 10:46:36 2006 +++ topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java Fri May 5 08:05:38 2006 @@ -24,14 +24,16 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.10 $ +* @version $Revision: 1.11 $ * -* Mise a jour: $Date: 2006/03/03 10:46:36 $ +* Mise a jour: $Date: 2006/05/05 08:05:38 $ * par : $Author: thimel $ */ package org.codelutin.topia.generator; +import static org.codelutin.topia.generator.GeneratorUtil.hasUnidirectionalRelationOnAbstractType; + import java.io.File; import java.io.IOException; import java.io.Writer; @@ -133,7 +135,9 @@ generateInterfaceHeader(output, clazz); for (Iterator it = clazz.getAttributes().iterator(); it.hasNext();) { ObjectModelAttribute attr = (ObjectModelAttribute)it.next(); - if (!attr.isNavigable()) { + ObjectModelAttribute reverse = attr.getReverseAttribute(); + if (!attr.isNavigable() + && !hasUnidirectionalRelationOnAbstractType(reverse, model)) { continue; } if (!Util.isNMultiplicity(attr)) { Index: topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java diff -u topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.11 topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.12 --- topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.11 Thu Apr 27 08:28:40 2006 +++ topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java Fri May 5 08:05:38 2006 @@ -25,9 +25,9 @@ * * @author Arnaud Thimel * - * @version $Revision: 1.11 $ + * @version $Revision: 1.12 $ * - * Mise a jour: $Date: 2006/04/27 08:28:40 $ par : $Author: thimel $ + * Mise a jour: $Date: 2006/05/05 08:05:38 $ par : $Author: thimel $ */ package org.codelutin.topia.generator; @@ -100,6 +100,11 @@ public static final String TAG_LENGTH = "length"; /** + * Tag pour ajouter une annotation à un champ + */ + public static final String TAG_ANNOTATION = "annotation"; + + /** * Type de persistence Hibernate */ public static final String PERSISTENCE_TYPE_HIBERNATE = "hibernate"; Index: topia2/src/java/org/codelutin/topia/generator/TopiaRelationValidator.java diff -u topia2/src/java/org/codelutin/topia/generator/TopiaRelationValidator.java:1.2 topia2/src/java/org/codelutin/topia/generator/TopiaRelationValidator.java:1.3 --- topia2/src/java/org/codelutin/topia/generator/TopiaRelationValidator.java:1.2 Thu Apr 27 08:28:40 2006 +++ topia2/src/java/org/codelutin/topia/generator/TopiaRelationValidator.java Fri May 5 08:05:38 2006 @@ -34,6 +34,7 @@ package org.codelutin.topia.generator; import static org.codelutin.generator.Util.isFirstAttribute; +import static org.codelutin.topia.generator.GeneratorUtil.hasUnidirectionalRelationOnAbstractType; import org.codelutin.generator.models.object.ObjectModel; import org.codelutin.generator.models.object.ObjectModelAttribute; @@ -46,6 +47,7 @@ *
  • Toutes les relations ont au moins une navigabilité
  • *
  • Une relation 1-n unidirectionnelle pointant sur une classe ayant des * sous-classes dans le modèle est incompatibe avec Hibernate
  • + *
  • Toutes les relations ont des reverseAttribute
  • * */ public class TopiaRelationValidator extends ObjectModelValidator { @@ -80,18 +82,23 @@ } } -// // N'a plus de sens car bug corrigé dans la version 2.0.5 -// /* Relation héritage */ -// if (GeneratorUtil.hasUnidirectionalRelationOnAbstractType(attr, model)) { -// isValid = false; -// addError(attr, -// "La relation entre " + -// "\"" + reverse.getType() + "\"[" + attr.getName() + "] et "+ -// "\"" + attr.getType() + "\"[" + reverse.getName() + "] " + -// "n'est pas compatible avec Hibernate car:\n" + -// "1. La relation est 1-n et n'est navigable que dans un sens;\n" + -// "2. \"" + attr.getType() + "\" a des sous-classes."); -// } + /* Relation héritage */ + if (hasUnidirectionalRelationOnAbstractType(attr, model)) { + isValid = false; + addError(attr, + "La relation entre " + + "\"" + reverse.getType() + "\"[" + attr.getName() + "] et "+ + "\"" + attr.getType() + "\"[" + reverse.getName() + "] " + + "n'est navigable que dans un sens et " + + "la classe \""+ attr.getType() + "\" a des sous-classes. " + + "Des accesseurs doivent donc etre generes pour Hibernate."); + } + + /* Pas d'inverse */ + if (reverse == null && model.hasClass(attr.getType())) { + isValid = false; + addError(attr, "Cet attribut n'a pas d'inverse."); + } return isValid; } Index: topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.16 topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.17 --- topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.16 Thu Apr 27 08:28:40 2006 +++ topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java Fri May 5 08:05:38 2006 @@ -24,15 +24,16 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.16 $ +* @version $Revision: 1.17 $ * -* Mise a jour: $Date: 2006/04/27 08:28:40 $ +* Mise a jour: $Date: 2006/05/05 08:05:38 $ * par : $Author: thimel $ */ package org.codelutin.topia.generator; import static org.codelutin.topia.generator.GeneratorUtil.hasUnidirectionalRelationOnAbstractType; +import static org.codelutin.topia.generator.GeneratorUtil.TAG_ANNOTATION; import java.io.File; import java.io.IOException; @@ -50,6 +51,11 @@ import org.codelutin.generator.models.object.ObjectModelClassifier; import org.codelutin.generator.models.object.ObjectModelOperation; +/** + * Generateur d'entites abstraites. Il s'agit de l'implatation par defaut d'une + * entite. Les classes generees sont surchargees par un XXXImpl lorsque l'entite + * n'est pas abstraite. La surcharge peut etre ecrite par l'utilisateur. + */ public class EntityAbstractGenerator extends ObjectModelGenerator { /** @@ -130,6 +136,11 @@ /*{ * Nom de l'attribut en BD : <%=attr.getTagValue(GeneratorUtil.TAG_DB_NAME)%>. *) }*/ + String annotation = attr.getTagValue(TAG_ANNOTATION); + if (annotation != null && annotation.length() > 0) { +/*{ <%=annotation%> +}*/ + } if (!Util.isNMultiplicity(attr)) { if (!attr.hasAssociationClass()) { /*{ <%=attr.getVisibility()%> <%=attr.getType()%> <%=attr.getName()%>; @@ -184,10 +195,11 @@ for (Iterator it = clazz.getAttributes().iterator(); it.hasNext();) { ObjectModelAttribute attr = (ObjectModelAttribute)it.next(); - if (!attr.isNavigable()) { + ObjectModelAttribute reverse = attr.getReverseAttribute(); + if (!attr.isNavigable() + && !hasUnidirectionalRelationOnAbstractType(reverse, model)) { continue; } - ObjectModelAttribute reverse = attr.getReverseAttribute(); if (!Util.isNMultiplicity(attr)) { if (!attr.hasAssociationClass()) { /*{ /* (non-Javadoc) @@ -238,7 +250,8 @@ this.<%=attr.getName()%> = new java.util.ArrayList<<%=attr.getType()%>>(); } }*/ - if (reverse != null && reverse.isNavigable()) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { if (!Util.isNMultiplicity(reverse)) { /*{ <%=attr.getName()%>.set<%=Util.capitalize(reverse.getName())%>(this); }*/ @@ -283,7 +296,8 @@ throw new IllegalArgumentException("List does not contain given element"); } }*/ - if (reverse != null && reverse.isNavigable()) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { if (!Util.isNMultiplicity(reverse)) { /*{ value.set<%=Util.capitalize(reverse.getName())%>(null); }*/ @@ -303,7 +317,8 @@ return; } }*/ - if (reverse != null && reverse.isNavigable()) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { /*{ for (<%=attr.getType()%> item : this.<%=attr.getName()%>) { }*/ @@ -334,7 +349,8 @@ this.<%=Util.toLowerCaseFirstLetter(attr.getName())%> = new java.util.ArrayList<<%=attr.getAssociationClass().getQualifiedName()%>>(); } }*/ - if (reverse != null) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { /*{ value.set<%=Util.capitalize(reverse.getName())%>(this); }*/ } @@ -374,7 +390,8 @@ throw new IllegalArgumentException("List does not contain given element"); } }*/ - if (reverse != null && reverse.isNavigable()) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { /*{ value.set<%=Util.capitalize(reverse.getName())%>(null); }*/ } @@ -389,7 +406,8 @@ return; } }*/ - if (reverse != null && reverse.isNavigable()) { + if (reverse != null && (reverse.isNavigable() || + hasUnidirectionalRelationOnAbstractType(attr, model))) { /*{ for (<%=attr.getAssociationClass().getQualifiedName()%> item : this.<%=Util.toLowerCaseFirstLetter(attr.getName())%>) { item.set<%=Util.capitalize(reverse.getName())%>(null); } Index: topia2/src/java/org/codelutin/topia/generator/TopiaMetaGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/TopiaMetaGenerator.java:1.4 topia2/src/java/org/codelutin/topia/generator/TopiaMetaGenerator.java:1.5 --- topia2/src/java/org/codelutin/topia/generator/TopiaMetaGenerator.java:1.4 Fri Mar 31 18:11:56 2006 +++ topia2/src/java/org/codelutin/topia/generator/TopiaMetaGenerator.java Fri May 5 08:05:38 2006 @@ -24,9 +24,9 @@ * @author Grégoire DESSARD Copyright Code Lutin, Grégoire * Dessard * - * @version $Revision: 1.4 $ + * @version $Revision: 1.5 $ * - * Mise a jour: $Date: 2006/03/31 18:11:56 $ par : $Author: thimel $ + * Mise a jour: $Date: 2006/05/05 08:05:38 $ par : $Author: thimel $ */ package org.codelutin.topia.generator; @@ -44,6 +44,11 @@ import org.codelutin.generator.models.object.validator.ClassNamesValidator; import org.codelutin.generator.models.object.validator.ObjectModelValidator; +/** + * Cette classe est un Generateur qui constitue le point d'entree dans ToPIA. + * Il repercute la generation de code sur chacun des generateurs de ToPIA en se + * positionnant en tant que parent de ces generateurs. + */ public class TopiaMetaGenerator extends ObjectModelGenerator { protected static final Log log = LogFactory.getLog(TopiaMetaGenerator.class); @@ -69,7 +74,7 @@ for (ObjectModelValidator validator : validators) { if (!validator.validate()) { for (String error : validator.getErrors()) { - log.error("WARNING " + error); + log.info("[VALIDATION] " + error); } isValid = false; }