Index: topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.14 topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.15 --- topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java:1.14 Thu Nov 8 20:14:59 2007 +++ topia2/src/java/org/codelutin/topia/generator/EntityInterfaceGenerator.java Fri Mar 7 09:34:09 2008 @@ -24,9 +24,9 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.14 $ +* @version $Revision: 1.15 $ * -* Mise a jour: $Date: 2007-11-08 20:14:59 $ +* Mise a jour: $Date: 2008-03-07 09:34:09 $ * par : $Author: thimel $ */ @@ -240,6 +240,7 @@ }*/ } } else { //NMultiplicity + String collectionInterface = GeneratorUtil.getNMultiplicityInterfaceType(attr); if (!attr.hasAssociationClass()) { //Méthodes remplacées par des add/set sur les classes d'assoc /*{ /** }*/ @@ -259,7 +260,7 @@ } /*{ * @param <%=Util.toLowerCaseFirstLetter(attr.getName())%> Les instances de <%=attr.getName()%> à ajouter. *) - public void addAll<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> <%=Util.toLowerCaseFirstLetter(attr.getName())%>); + public void addAll<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>> <%=Util.toLowerCaseFirstLetter(attr.getName())%>); /** }*/ @@ -269,7 +270,7 @@ } /*{ * @param <%=Util.toLowerCaseFirstLetter(attr.getName())%> La Collection de <%=attr.getName()%> à positionner. *) - public void set<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> <%=Util.toLowerCaseFirstLetter(attr.getName())%>); + public void set<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>> <%=Util.toLowerCaseFirstLetter(attr.getName())%>); /** }*/ @@ -303,12 +304,12 @@ /** * @param <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%> Les instances de <%=attr.getAssociationClass().getName()%> à ajouter. *) - public void addAll<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%>); + public void addAll<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%>); /** * @param <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%> La Collection de <%=attr.getAssociationClass().getName()%> à positionner. *) - public void set<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%>); + public void set<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%>); /** * @param <%=Util.toLowerCaseFirstLetter(attr.getAssociationClass().getName())%> L'instance de <%=attr.getAssociationClass().getName()%> à retirer. @@ -332,7 +333,7 @@ } /*{ * @return La Liste de <%=attr.getName()%>. *) - public <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> get<%=Util.capitalize(attr.getName())%>(); + public <%=collectionInterface%><<%=attr.getType()%>> get<%=Util.capitalize(attr.getName())%>(); /** * @return Le nombre d'éléments de la collection <%=attr.getName()%>. @@ -346,7 +347,7 @@ /*{ /** * @return La liste des attributs <%=attr.getAssociationClass().getName()%>. *) - public <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> get<%=Util.capitalize(assocAttrName)%>(); + public <%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> get<%=Util.capitalize(assocAttrName)%>(); /** * @return L'attribut <%=attr.getAssociationClass().getName()%> associé à la valeur value de l'attribut <%=attr.getName()%>. Index: topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java diff -u topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.20 topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.21 --- topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java:1.20 Thu Nov 8 20:15:00 2007 +++ topia2/src/java/org/codelutin/topia/generator/GeneratorUtil.java Fri Mar 7 09:34:09 2008 @@ -25,9 +25,9 @@ * * @author Arnaud Thimel * - * @version $Revision: 1.20 $ + * @version $Revision: 1.21 $ * - * Mise a jour: $Date: 2007-11-08 20:15:00 $ par : $Author: thimel $ + * Mise a jour: $Date: 2008-03-07 09:34:09 $ par : $Author: thimel $ */ package org.codelutin.topia.generator; @@ -81,6 +81,11 @@ public static final String STEREOTYPE_INDEXED = "indexed"; /** + * Stéréotype pour les collections avec unicité + */ + public static final String STEREOTYPE_UNIQUE = "unique"; + + /** * Stéréotype pour les attributs étant des clés primaires */ public static final String STEREOTYPE_PRIMARYKAY = "primaryKey"; @@ -474,7 +479,7 @@ * @param attr l'attribut servant de base au calcul du nom * @return le nom de la table */ - static public String getManyToManyTableName(ObjectModelAttribute attr) { + public static String getManyToManyTableName(ObjectModelAttribute attr) { String result; if (attr.hasAssociationClass()) { @@ -498,4 +503,43 @@ return result.toLowerCase(); } + /** + * Renvoie le type d'interface à utiliser en fonction de l'attribut + * @return String + */ + public static String getNMultiplicityInterfaceType(ObjectModelAttribute attr) { + if (attr.hasStereotype(STEREOTYPE_UNIQUE)) { + return "java.util.Set"; + } else if (attr.isOrdered()) { + return "java.util.List"; + } + return "java.util.Collection"; + } + + /** + * Renvoie le type d'objet (instance) à utiliser en fonction de l'attribut + * @return String + */ + public static String getNMultiplicityObjectType(ObjectModelAttribute attr) { + if (attr.hasStereotype(STEREOTYPE_UNIQUE)) { + return "java.util.HashSet"; + } else if (attr.isOrdered()) { + return "java.util.ArrayList"; + } + return "java.util.ArrayList"; + } + + /** + * Renvoie le type d'interface à utiliser en fonction de l'attribut + * @return String + */ + public static String getNMultiplicityHibernateType(ObjectModelAttribute attr) { + if (attr.hasStereotype(STEREOTYPE_UNIQUE)) { + return "set"; + } else if (attr.isOrdered()) { + return "list"; + } + return "bag"; + } + } // GeneratorUtil Index: topia2/src/java/org/codelutin/topia/generator/EntityHibernateMappingGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/EntityHibernateMappingGenerator.java:1.43 topia2/src/java/org/codelutin/topia/generator/EntityHibernateMappingGenerator.java:1.44 --- topia2/src/java/org/codelutin/topia/generator/EntityHibernateMappingGenerator.java:1.43 Thu Dec 20 13:53:47 2007 +++ topia2/src/java/org/codelutin/topia/generator/EntityHibernateMappingGenerator.java Fri Mar 7 09:34:09 2008 @@ -24,9 +24,9 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.43 $ +* @version $Revision: 1.44 $ * -* Mise a jour: $Date: 2007-12-20 13:53:47 $ +* Mise a jour: $Date: 2008-03-07 09:34:09 $ * par : $Author: thimel $ */ @@ -342,25 +342,27 @@ } lazy += "\""; + String collType = GeneratorUtil.getNMultiplicityHibernateType(attr); if (!isIndexed) { -/*{ <%=((!isInverse)?"":"inverse=\"true\"")%> <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="true"> +/*{ <<%=collType%> name="<%=getName(attr)%>" <%=orderBy%> <%=((!isInverse)?"":"inverse=\"true\"")%> <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="true"> - + > }*/ }else { -/*{ <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="false"> +/*{ <<%=collType%> name="<%=getName(attr)%>"<%=((!isInverse)?"":" inverse=\"true\"")%> <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="false"> - + > }*/ } } protected void generateHibernateMany(Writer output, ObjectModelAttribute attr) throws IOException { boolean isIndexed = attr.isIndexed(); -/*{ <<%=(isIndexed?"list":"bag")%> name="<%=getName(attr)%>" node="<%=getName(attr)%>" embed-xml="true"> + String collType = GeneratorUtil.getNMultiplicityHibernateType(attr); +/*{ <<%=collType%> name="<%=getName(attr)%>" node="<%=getName(attr)%>" embed-xml="true"> }*/ if (isIndexed) { @@ -368,7 +370,7 @@ }*/ } /*{ - > + > }*/ } @@ -422,8 +424,9 @@ lazy += "true"; } lazy += "\""; + String collType = GeneratorUtil.getNMultiplicityHibernateType(attr); -/*{ <<%=(isIndexed?"list":"bag")%> name="<%=getName(attr)%>" table="<%=GeneratorUtil.getManyToManyTableName(attr)%>" <%=(isInverse?"inverse=\"true\" ":"")%> <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="true"> +/*{ <<%=collType%> name="<%=getName(attr)%>" table="<%=GeneratorUtil.getManyToManyTableName(attr)%>" <%=(isInverse?"inverse=\"true\" ":"")%> <%=lazy%> <%=cascade%> node="<%=getName(attr)%>" embed-xml="true"> }*/ if (isIndexed) { @@ -431,7 +434,7 @@ }*/ } /*{ - > + > }*/ } Index: topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java diff -u topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.27 topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.28 --- topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java:1.27 Thu Nov 8 20:14:59 2007 +++ topia2/src/java/org/codelutin/topia/generator/EntityAbstractGenerator.java Fri Mar 7 09:34:10 2008 @@ -24,9 +24,9 @@ * Created: 12 déc. 2005 * * @author Arnaud Thimel -* @version $Revision: 1.27 $ +* @version $Revision: 1.28 $ * -* Mise a jour: $Date: 2007-11-08 20:14:59 $ +* Mise a jour: $Date: 2008-03-07 09:34:10 $ * par : $Author: thimel $ */ @@ -179,13 +179,14 @@ }*/ } } else { + String collectionType = GeneratorUtil.getNMultiplicityInterfaceType(attr); if (!attr.hasAssociationClass()) { -/*{ <%=attr.getVisibility()%> <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> <%=attr.getName()%>; +/*{ <%=attr.getVisibility()%> <%=collectionType%><<%=attr.getType()%>> <%=attr.getName()%>; }*/ } else { String assocAttrName = GeneratorUtil.getAssocAttrName(attr); -/*{ <%=attr.getVisibility()%> <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(assocAttrName)%>; +/*{ <%=attr.getVisibility()%> <%=collectionType%><<%=attr.getAssociationClass().getQualifiedName()%>> <%=Util.toLowerCaseFirstLetter(assocAttrName)%>; }*/ } @@ -375,6 +376,8 @@ }*/ } } else { //NMultiplicity + String collectionInterface = GeneratorUtil.getNMultiplicityInterfaceType(attr); + String collectionObject = GeneratorUtil.getNMultiplicityObjectType(attr); if (!attr.hasAssociationClass()) { //Méthodes remplacées par des accesseurs sur les classes d'assoc /*{ /* (non-Javadoc) * @see <%=clazz.getQualifiedName()%>#add<%=Util.capitalize(attr.getName())%>(<%=attr.getType()%>) @@ -382,7 +385,7 @@ public void add<%=Util.capitalize(attr.getName())%>(<%=attr.getType()%> <%=Util.toLowerCaseFirstLetter(attr.getName())%>) { fireOnPreWrite("<%=attr.getName()%>", null, <%=attr.getName()%>); if (this.<%=attr.getName()%> == null) { - this.<%=attr.getName()%> = new java.util.ArrayList<<%=attr.getType()%>>(); + this.<%=attr.getName()%> = new <%=collectionObject%><<%=attr.getType()%>>(); } }*/ if (reverse != null && (reverse.isNavigable() || @@ -400,9 +403,9 @@ } /* (non-Javadoc) - * @see <%=clazz.getQualifiedName()%>#addAll<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>>) + * @see <%=clazz.getQualifiedName()%>#addAll<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>>) *) - public void addAll<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> values) { + public void addAll<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>> values) { if (values == null) { return; } @@ -412,10 +415,10 @@ } /* (non-Javadoc) - * @see <%=clazz.getQualifiedName()%>#set<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>>) + * @see <%=clazz.getQualifiedName()%>#set<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>>) *) - public void set<%=Util.capitalize(attr.getName())%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> values) { - <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> _oldValue = <%=attr.getName()%>; + public void set<%=Util.capitalize(attr.getName())%>(<%=collectionInterface%><<%=attr.getType()%>> values) { + <%=collectionInterface%><<%=attr.getType()%>> _oldValue = <%=attr.getName()%>; fireOnPreWrite("<%=attr.getName()%>", _oldValue, values); <%=attr.getName()%> = values; fireOnPostWrite("<%=attr.getName()%>", _oldValue, values); @@ -466,7 +469,7 @@ /*{ } }*/ } -/*{ java.util.List _oldValue = new java.util.ArrayList(this.<%=attr.getName()%>); +/*{ <%=collectionInterface%> _oldValue = new <%=collectionObject%>(this.<%=attr.getName()%>); fireOnPreWrite("<%=attr.getName()%>", _oldValue, this.<%=attr.getName()%>); this.<%=attr.getName()%>.clear(); fireOnPostWrite("<%=attr.getName()%>", _oldValue, this.<%=attr.getName()%>); @@ -482,7 +485,7 @@ public void add<%=Util.capitalize(assocAttrName)%>(<%=attr.getAssociationClass().getQualifiedName()%> value) { fireOnPreWrite("<%=Util.toLowerCaseFirstLetter(assocAttrName)%>", null, value); if (this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%> == null) { - this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%> = new java.util.ArrayList<<%=attr.getAssociationClass().getQualifiedName()%>>(); + this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%> = new <%=collectionObject%><<%=attr.getAssociationClass().getQualifiedName()%>>(); } }*/ if (reverse != null && (reverse.isNavigable() || @@ -495,9 +498,9 @@ } /* (non-Javadoc) - * @see <%=clazz.getQualifiedName()%>#addAll<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>>() + * @see <%=clazz.getQualifiedName()%>#addAll<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>>() *) - public void addAll<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> values) { + public void addAll<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> values) { if (values == null) { return; } @@ -507,13 +510,13 @@ } /* (non-Javadoc) - * @see <%=clazz.getQualifiedName()%>#set<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>>() + * @see <%=clazz.getQualifiedName()%>#set<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>>() *) - public void set<%=Util.capitalize(assocAttrName)%>(<%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> values) { + public void set<%=Util.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> values) { // clear<%=Util.capitalize(assocAttrName)%>(); // addAll<%=Util.capitalize(assocAttrName)%>(values); // FIXME - <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> _oldValue = <%=Util.toLowerCaseFirstLetter(assocAttrName)%>; + <%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> _oldValue = <%=Util.toLowerCaseFirstLetter(assocAttrName)%>; fireOnPreWrite("Util.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, values); <%=Util.toLowerCaseFirstLetter(assocAttrName)%> = values; fireOnPostWrite("Util.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, values); @@ -551,7 +554,7 @@ } }*/ } -/*{ java.util.List _oldValue = new java.util.ArrayList(this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%>); +/*{ <%=collectionInterface%> _oldValue = new <%=collectionObject%>(this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%>); fireOnPreWrite("<%=Util.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, null); this.<%=Util.toLowerCaseFirstLetter(assocAttrName)%>.clear(); fireOnPostWrite("<%=Util.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, null); @@ -563,7 +566,7 @@ /*{ /* (non-Javadoc) * @see <%=clazz.getQualifiedName()%>#get<%=Util.capitalize(attr.getName())%>() *) - public <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getType()%>> get<%=Util.capitalize(attr.getName())%>() { + public <%=collectionInterface%><<%=attr.getType()%>> get<%=Util.capitalize(attr.getName())%>() { return <%=attr.getName()%>; } @@ -584,7 +587,7 @@ /*{ /* (non-Javadoc) * @see <%=clazz.getQualifiedName()%>#get<%=Util.capitalize(assocAttrName)%>() *) - public <%=(attr.isOrdered()?"java.util.List":"java.util.Collection")%><<%=attr.getAssociationClass().getQualifiedName()%>> get<%=Util.capitalize(assocAttrName)%>() { + public <%=collectionInterface%><<%=attr.getAssociationClass().getQualifiedName()%>> get<%=Util.capitalize(assocAttrName)%>() { return <%=Util.toLowerCaseFirstLetter(assocAttrName)%>; }