Author: fdesbois Date: 2010-05-07 18:34:39 +0200 (Fri, 07 May 2010) New Revision: 1936 Url: http://nuiton.org/repositories/revision/topia/1936 Log: - Evo #298 : Remove old deprecated Generator - Refactor package.html in package-info.java - Clean headers Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package-info.java Removed: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package.html Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaRelationValidator.java Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,635 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* BeanGenerator.java -* -* Created: 17 avril 2009 -* -* @author tony Chemit <chemit@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import org.apache.commons.lang.StringUtils; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.TAG_ANNOTATION; - -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.Iterator; - -import java.util.List; -import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.java.ImportsManager; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelDependency; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; -import org.nuiton.topia.persistence.TopiaEntity; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isPrimitiveType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isDateType; - -/** - * DTO generator - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : {@link BeanTransformer} - * @see BeanTransformer - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.BeanGenerator" - */ -@Deprecated -public class BeanGenerator extends ObjectModelGenerator { - - /** - * Logger for this class - */ - private static final Log log = LogFactory.getLog(BeanGenerator.class); - - public BeanGenerator() { - super(); - } - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_BEAN) && - !clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - return; - } - // - // première phase : calcul des variables - // - String copyright = TopiaGeneratorUtil.getCopyright(model); - String clazzName = clazz.getName(); - String abstractStr = isAbstract(clazz) ? " abstract " : " "; - boolean needGetEntityMethod = false; - boolean generateToString = TopiaGeneratorUtil.generateToString(clazz, model); - - ImportsManager imports = new ImportsManager(); - - String extendClass = ""; - Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator(); - if (j.hasNext()) { - ObjectModelClassifier p = j.next(); - imports.addImport(p.getQualifiedName()); - extendClass += p.getName(); - } - String implInterface = ""; - for (Iterator<ObjectModelInterface> i=clazz.getInterfaces().iterator(); i.hasNext();) { - ObjectModelClassifier parentInterface = i.next(); - imports.addImport(parentInterface.getQualifiedName()); - implInterface += parentInterface.getName(); - if (i.hasNext()) { - implInterface += ", "; - } - } - // Add Serializable implements for DTO generation - if (clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - imports.addImport(Serializable.class); - if (!implInterface.isEmpty()) { - implInterface += ", "; - } - implInterface += Serializable.class.getName(); - } - String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model); - - List<ObjectModelAttribute> attributes = new ArrayList<ObjectModelAttribute>(); - List<ObjectModelAttribute> multipleAttr = new ArrayList<ObjectModelAttribute>(); - - setAttributesForDTO(clazz, attributes,imports); - - boolean needListInImport=false; - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (attr.isNavigable()) { - attributes.add(attr); - imports.addImport(attr.getType()); - if (GeneratorUtil.isNMultiplicity(attr)) { - multipleAttr.add(attr); - ObjectModelClass attrEntity = null; - if (model.hasClass(attr.getType())) { - attrEntity = model.getClass(attr.getType()); - } - boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)); - needGetEntityMethod |= isEntity; - if (attr.isOrdered()) { - needListInImport = true; - } - } - } - } - - imports.addImport(java.beans.PropertyChangeListener.class.getName()); - imports.addImport(java.beans.PropertyChangeSupport.class.getName()); - - for (ObjectModelOperation operation : clazz.getOperations()) { - imports.addImport(operation.getReturnType()); - for (ObjectModelParameter parameter : operation.getParameters()) { - imports.addImport(parameter.getType()); - } - } - - if (needGetEntityMethod) { - imports.addImport(TopiaEntity.class); - } - if (!multipleAttr.isEmpty()) { - imports.addImport(Collection.class); - } - if (needListInImport) { - imports.addImport(List.class); - } - if (generateToString) { - imports.addImport(org.apache.commons.lang.builder.ToStringBuilder.class); - } - - boolean sortAttribute = TopiaGeneratorUtil.sortAttribute(clazz, model); - if (sortAttribute) { - Comparator<ObjectModelAttribute> comp = new Comparator<ObjectModelAttribute>(){ - - @Override - public int compare(ObjectModelAttribute o1, ObjectModelAttribute o2) { - return o1.getName().compareTo(o2.getName()); - } - }; - java.util.Collections.sort(attributes,comp); - java.util.Collections.sort(multipleAttr,comp); - } - // - // seconde phase : génération - // - - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - -/*{package <%=clazz.getPackageName()%>; - - }*/ - - if (log.isDebugEnabled()) { - log.debug("imports for class <" + clazzName + ">"); - } - //for (String anImport : imports) { - for (String anImport : imports.getImports(clazz.getPackageName())) { - if (log.isDebugEnabled()) { - log.debug("import " + anImport); - } -/*{import <%=anImport%>; -}*/ - } -/*{ -public<%=abstractStr%>class <%=clazzName%>}*/ - -/* - * Définition de la super classe : il ne doit y avoir qu'une - */ - if (extendClass.length() > 0) { -/*{ extends <%=extendClass%>}*/ - } - - if (implInterface.length() > 0) { -/*{ implements <%=implInterface%> { - -}*/ - } else { - /*{ { - -}*/ - } - - - // TODO Calculer un serialVersionUID si il n'y en a pas - if (svUID != null) { -/*{ public static final long serialVersionUID = <%=svUID%>; - -}*/ - } - generateInterfaceOperations(output, clazz); - generateAttributes(output, attributes); -/*{ protected final PropertyChangeSupport pcs; - - /** - * Default constructor of <%=clazzName%>. - *) - public <%=clazzName%>() { - pcs = new PropertyChangeSupport(this); - } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - pcs.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - pcs.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - pcs.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - pcs.removePropertyChangeListener(propertyName, listener); - } - -}*/ - generateGetters(output, attributes); - generateSetters(output, attributes); - generateGetChild(output, multipleAttr); - generateAddChild(output, multipleAttr); - generateRemoveChild(output, multipleAttr); - if (generateToString) { - generateToString(output, clazz); - } - if (!multipleAttr.isEmpty()) { -/*{ - - protected <T> T getChild(Collection<T> childs, int index) { - if (childs != null) { - int i = 0; - for (T o : childs) { - if (index == i) { - return o; - } - i++; - } - } - return null; - } - - }*/ - if (needGetEntityMethod) { -/*{ protected <T extends TopiaEntity> T getEntity(Collection<T> childs, String topiaId) { - if (childs != null) { - for (T o : childs) { - if (topiaId.equals(o.getTopiaId())) { - return o; - } - } - } - return null; - } - }*/ - } - } - -/*{ - protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - pcs.firePropertyChange(propertyName, oldValue, newValue); - } - -} //<%=clazz.getName()%> -}*/ - } - - protected void generateAttributes(Writer output, List<ObjectModelAttribute> attributes) throws IOException { - - for (ObjectModelAttribute attr : attributes) { - - if (!(attr.isNavigable() - || attr.hasAssociationClass())) { - continue; - } - - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ /** - * <%=attr.getDocumentation()%> - *) -}*/ - } - String annotation = attr.getTagValue(TAG_ANNOTATION); - if (annotation != null && annotation.length() > 0) { -/*{ <%=annotation%> -}*/ - } - String attrName = attr.getName(); - String attrVisibility = attr.getVisibility(); - String attrType = attr.getType(); - if (attr.hasAssociationClass()) { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - attrType = attr.getAssociationClass().getName(); - } - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } - if (GeneratorUtil.isNMultiplicity(attr)) { - attrType = getCollection(attr, attrType); - } - -/*{ <%=attrVisibility%> <%=attrType%> <%=attrName%>; -}*/ - } - } - - protected void generateGetters(Writer output, List<ObjectModelAttribute> attributes) throws IOException { - /* - * Définition des getteurs et setteurs - */ - for (ObjectModelAttribute attr : attributes) { - - if (!attr.isNavigable()) { - continue; - } - - String attrName = attr.getName(); - String attrType = attr.getType(); - if (attr.hasAssociationClass()) { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - attrType = attr.getAssociationClass().getName(); - } - String attrNameCapitalized = StringUtils.capitalize(attrName); - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } - if (GeneratorUtil.isNMultiplicity(attr)) { - attrType = getCollection(attr, attrType); - } -/*{ public <%=attrType%> get<%=attrNameCapitalized%>() { - return <%=attrName%>; - } - -}*/ - } - } - - protected void generateSetters(Writer output, List<ObjectModelAttribute> attributes) throws IOException { - /* - * Définition des getteurs et setteurs - */ - for (ObjectModelAttribute attr : attributes) { - - if (!attr.isNavigable()) { - continue; - } - - String attrName = attr.getName(); - String attrType = attr.getType(); - - if (attr.hasAssociationClass()) { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - attrType = attr.getAssociationClass().getName(); - } - String attrNameCapitalized = StringUtils.capitalize(attrName); - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } - if (GeneratorUtil.isNMultiplicity(attr)) { - attrType = getCollection(attr, attrType); - } -/*{ public void set<%=attrNameCapitalized%>(<%=attrType%> newValue) { - <%=attrType%> oldValue = get<%=attrNameCapitalized%>(); - this.<%=attrName%> = newValue; - firePropertyChange("<%=attrName%>", oldValue, newValue); - } - -}*/ - } - } - - protected void generateGetChild(Writer output, List<ObjectModelAttribute> multipleAttr) throws IOException { - - for (ObjectModelAttribute attr : multipleAttr) { - - String attrName = attr.getName(); - String attrNameCapitalized = StringUtils.capitalize(attrName); - String attrType = attr.getType(); - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } - ObjectModelClass attrEntity=null; - if (model.hasClass(attr.getType())) { - attrEntity = model.getClass(attr.getType()); - } - boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)); -/*{ public <%=attrType%> get<%=attrNameCapitalized%>(int index) { - <%=attrType%> o = getChild(<%=attrName%>, index); - return o; - } - -}*/ - if (isEntity) { -/*{ public <%=attrType%> get<%=attrNameCapitalized%>(String topiaId) { - <%=attrType%> o = getEntity(<%=attrName%>, topiaId); - return o; - } - -}*/ - } - } - } - protected void generateAddChild(Writer output, List<ObjectModelAttribute> multipleAttr) throws IOException { - for (ObjectModelAttribute attr : multipleAttr) { - - String attrName = attr.getName(); - String attrNameCapitalized = StringUtils.capitalize(attrName); - String attrType = attr.getType(); - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } -/*{ public <%=attrType%> add<%=attrNameCapitalized%>(<%=attrType%> <%=attrName%>) { - get<%=attrNameCapitalized%>().add(<%=attrName%>); - firePropertyChange("<%=attrName%>", null, <%=attrName%>); - return <%=attrName%>; - } - -}*/ - } - } - - protected void generateRemoveChild(Writer output, List<ObjectModelAttribute> multipleAttr) throws IOException { - for (ObjectModelAttribute attr : multipleAttr) { - String attrName = attr.getName(); - String attrNameCapitalized = StringUtils.capitalize(attrName); - String attrType = attr.getType(); - int dot = attrType.lastIndexOf("."); - if (dot>-1) { - attrType = attrType.substring(dot + 1); - } -/*{ public boolean remove<%=attrNameCapitalized%>(<%=attrType%> <%=attrName%>) { - boolean removed = get<%=attrNameCapitalized%>().remove(<%=attrName%>); - if (removed) { - firePropertyChange("<%=attrName%>", <%=attrName%>, null); - } - return removed; - } - -}*/ - } - } - - protected void generateInterfaceOperations(Writer output, ObjectModelClassifier classifier) throws IOException { - for (ObjectModelOperation op : classifier.getOperations()) { - String opName = op.getName(); -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(op)) { - String opDocumentation = op.getDocumentation(); -/*{ * <%=opName%> : <%=opDocumentation%> -}*/ - } - Collection<ObjectModelParameter> params = op.getParameters(); - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramDocumentation = param.getDocumentation(); -/*{ * @param <%=paramName%> <%=paramDocumentation%> - }*/ - } - String opVisibility = op.getVisibility(); - String opType = op.getReturnType(); -/*{ *) - <%=opVisibility%> abstract <%=opType%> <%=opName%>(}*/ - String comma = ""; - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramType = param.getType(); -/*{<%=comma%><%=paramType%> <%=paramName%>}*/ - comma = ", "; - } -/*{)}*/ - Set<String> exceptions = op.getExceptions(); - comma = " throws "; - for (String exception : exceptions) { -/*{<%=comma%><%=exception%>}*/ - comma = ", "; - } -/*{; - -}*/ - } - } - protected void generateToString(Writer output, ObjectModelClass clazz) throws IOException { -/*{ - @Override - public String toString() { - String result = new ToStringBuilder(this). -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (!(attr.isNavigable() || attr.hasAssociationClass())) { - continue; - } - //FIXME possibilité de boucles (non directes) - String attrName = attr.getName(); -/*{ append("<%=attrName%>", this.<%=attrName%>). -}*/ - } -/*{ toString(); - return result; - } - }*/ - } - - protected String getCollection(ObjectModelAttribute attr, String attrType) { - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<"; - } else { - nMultType = "Collection<"; - } - nMultType += attrType; - nMultType += ">"; - return nMultType; - } - - protected boolean isAbstract(ObjectModelClass clazz) { - if (clazz.isAbstract()) { - return true; - } - return !clazz.getOperations().isEmpty(); - } - - /** - * Dependecy gestion for DTO generation. - * All primitives attributes (and dates) of dependencies entities of the DTO are - * copied in the DTO. This method only prepare a list of attributes to be generated. - * @param clazz DTO ObjectModelClass - * @param attributes list of attributes for the generation (may be not empty) - * @param imports the ImportsManager used to generate the header imports of the DTO - * @return the same list of attributes in parameter with attributes from entities dependencies - * @see org.nuiton.eugene.ImportsManager - * @see org.nuiton.eugene.models.object.ObjectModelDependency - */ - private List<ObjectModelAttribute> setAttributesForDTO(ObjectModelClass clazz, - List<ObjectModelAttribute> attributes, ImportsManager imports) { - - if (clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - if (log.isInfoEnabled()) { - log.info("DTO dependency gestion"); - } - for (ObjectModelDependency dependency : clazz.getDependencies()) { - ObjectModelClass supplier = (ObjectModelClass)dependency.getSupplier(); - - // ENTITY dependency - // Copy all primitives attributes from the Entity (supplier) to the DTO - // Prepare a list to future generation of all object generated attributes - if (supplier.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - if (log.isInfoEnabled()) { - log.info("Create primitive and date fields in DTO from Entity : " - + supplier.getQualifiedName()); - } - for (ObjectModelAttribute attr : supplier.getAttributes()) { - if (isPrimitiveType(attr) || isDateType(attr)) { - attributes.add(attr); - imports.addImport(attr.getType()); - } - if (GeneratorUtil.isNMultiplicity(attr)) { - imports.addImport("java.util.Collection"); - } - } - } - } - } - return attributes; - } -} //BeanGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -45,11 +45,10 @@ * <p/> * Created: 28 oct. 2009 * - * @author fdesbois - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ - * par : @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.BeanTransformer" + * @author fdesbois <fdesbois@codelutin.com> + * @author tchemit <tchemit@codelutin.com> + * @version $Id$ + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.BeanTransformer" */ public class BeanTransformer extends ObjectModelTransformerToJava { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -49,6 +49,7 @@ * A template to generate a helper for {@link TopiaEntityBinder}. * * @author tchemit <chemit@codelutin.com> + * @version $Id$ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.BinderHelperTransformer" * @since 2.3.1 */ Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,537 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.lang.StringUtils; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; -import org.nuiton.util.StringUtil; - -/** - * Genere des DAOs abstrait par defaut, l'utilisateur peut ensuite en herite - * pour implanter d'autre methode find, ou bien laisser l'implantation par - * defaut de l'autre generateur qui genere une classe DAO qui herite de celle-ci - * mais completement vide. - - * @author poussin - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link DAOAbstractTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOAbstractGenerator" - */ -@Deprecated -public class DAOAbstractGenerator extends ObjectModelGenerator { - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "DAOAbstract.java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } -/*{package <%=clazz.getPackageName()%>; - -import java.util.List; - -}*/ - Collection<ObjectModelOperation> DAOoperations = getDAOOperations(clazz); - if (isCollectionNeeded(DAOoperations)) { -/*{ -import java.util.Collection; -}*/ - } - if (isSetNeeded(DAOoperations)) { -/*{ -import java.util.Set; -}*/ - } -/*{ -import java.util.Arrays; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaContextImplementor; -}*/ - boolean enableSecurity = ( - clazz.hasTagValue(TopiaGeneratorUtil.TAG_SECURITY_CREATE) || - clazz.hasTagValue(TopiaGeneratorUtil.TAG_SECURITY_LOAD) || - clazz.hasTagValue(TopiaGeneratorUtil.TAG_SECURITY_UPDATE) || - clazz.hasTagValue(TopiaGeneratorUtil.TAG_SECURITY_DELETE) - ); - - if (enableSecurity) { -/*{ -import java.util.ArrayList; -import java.security.Permission; -import org.nuiton.topia.taas.entities.TaasAuthorizationImpl; -import org.nuiton.topia.taas.jaas.TaasPermission; -import org.nuiton.topia.persistence.TopiaDAO; -import static org.nuiton.topia.taas.TaasUtil.CREATE; -import static org.nuiton.topia.taas.TaasUtil.DELETE; -import static org.nuiton.topia.taas.TaasUtil.LOAD; -import static org.nuiton.topia.taas.TaasUtil.UPDATE; -}*/ - } - String clazzName = clazz.getName(); -/*{ -/** - * Implantation DAO pour l'entité <%=GeneratorUtil.toUpperCaseFirstLetter(clazz.getName())%>. - * Cette classe contient une implantation de TopiaDAO a laquel elle peut - * deleguer des traitements - * - *) -public abstract class <%=clazzName%>DAOAbstract<E extends <%=clazzName%>> extends }*/ - String extendClass = ""; - for (Iterator<ObjectModelClass> i=clazz.getSuperclasses().iterator(); i.hasNext();) { - ObjectModelClassifier parent = i.next(); - extendClass += parent.getQualifiedName(); - if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - extendClass += "DAOImpl<E>"; - } - if (i.hasNext()) { - extendClass += ", "; - } - } - if (extendClass.length() == 0) { - extendClass += "org.nuiton.topia.persistence.TopiaDAOImpl<E>"; - } - - /*{<%=extendClass%> implements org.nuiton.topia.persistence.TopiaDAO<E> { - - public Class<E> getEntityClass() { - return (Class<E>)<%=clazzName%>.class; - } -}*/ - - generateDAOOperations(output, DAOoperations); -/*{ - public void delete(E entity) throws TopiaException { -}*/ - String modelName = StringUtils.capitalize(model.getName()); - String providerFQN = getProperty("defaultPackage") + "." + modelName + "DAOHelper.getImplementationClass"; - for (ObjectModelAttribute attr : clazz.getAttributes()) { - String attrType = attr.getType(); - String reverseAttrName = attr.getReverseAttributeName(); - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if (!attr.hasAssociationClass() && reverse != null && reverse.isNavigable() - && GeneratorUtil.isNMultiplicity(attr) && GeneratorUtil.isNMultiplicity(reverse)) { - // On doit absolument supprimer pour les relations many-to-many - // le this de la collection de l'autre cote - - String attrDBName = TopiaGeneratorUtil.getDBName(attr); - String attrClassifierDBName = TopiaGeneratorUtil.getDBName(attr.getClassifier()); - String attrJoinTableName = TopiaGeneratorUtil.getManyToManyTableName(attr); - String attrReverseDBName = TopiaGeneratorUtil.getReverseDBName(attr); -/*{ - { - List<<%=attrType%>> list = getContext().getHibernate().createSQLQuery( - "SELECT main.topiaid " + - "from <%=attrClassifierDBName%> main, <%=attrJoinTableName%> secondary " + - "where main.topiaid=secondary.<%=attrDBName%>" + - " and secondary.<%=attrReverseDBName%>='" + entity.getTopiaId() + "'") - .addEntity("main", <%=providerFQN%>(<%=attrType%>.class)).list(); - for (<%=attrType%> item : list) { - item.remove<%=TopiaGeneratorUtil.capitalize(reverseAttrName)%>(entity); - } - } -}*/ - } else if (!attr.hasAssociationClass() && reverse != null - && reverse.isNavigable() && !GeneratorUtil.isNMultiplicity(reverse)) { - // On doit mettre a null les attributs qui ont cet objet sur les - // autres entites en one-to-* - // TODO peut-etre qu'hibernate est capable de faire ca tout seul ? - // THIMEL: J'ai remplacé reverse.getName() par reverseAttrName sans certitude - /*{ - { - List<<%=attrType%>> list = getContext() - .getDAO(<%=attrType%>.class) - .findAllByProperties("<%=reverseAttrName%>", entity); - for (<%=attrType%> item : list) { - item.set<%=GeneratorUtil.capitalize(reverseAttrName)%>(null); -}*/ - if(attr.isAggregate()){ -/*{ - item.delete(); -}*/ - } -/*{ - } - } - }*/ - - } - } -/*{ - super.delete(entity); - } - -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (!attr.isNavigable()) { - continue; - } - String attrName = attr.getName(); - -/*{ /** - * Recherche sur l'attribut <%=attrName%> - *) -}*/ - if (!GeneratorUtil.isNMultiplicity(attr)) { - generateNoNMultiplicity(output, attr, false); - } else { - generateNMultiplicity(output, attr); - } - } - - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assocClass = (ObjectModelAssociationClass)clazz; - for (ObjectModelAttribute attr : assocClass.getParticipantsAttributes()) { - if (attr != null) { - if (!GeneratorUtil.isNMultiplicity(attr)) { - generateNoNMultiplicity(output, attr, true); - } else { - generateNMultiplicity(output, attr); - } - } - } - } - - if(enableSecurity) { -/*{ - /** - * Retourne les permissions a verifier pour l'acces a l'entite pour le service Taas - * @param topiaId topiaId d'une entite - * @param actions actions souhaitées - * @return la liste des permissions - *) - public List<Permission> getRequestPermission(String topiaId, int actions) throws TopiaException { - List<Permission> resultPermissions = new ArrayList<Permission>(); - if ((actions & CREATE) == CREATE) { -}*/ - generateSecurity(output, clazz, TopiaGeneratorUtil.TAG_SECURITY_CREATE); -/*{ - } - if ((actions & LOAD) == LOAD) { -}*/ - generateSecurity(output, clazz, TopiaGeneratorUtil.TAG_SECURITY_LOAD); -/*{ - } - if ((actions & UPDATE) == UPDATE) { -}*/ - generateSecurity(output, clazz, TopiaGeneratorUtil.TAG_SECURITY_UPDATE); -/*{ - } - if ((actions & DELETE) == DELETE) { -}*/ - generateSecurity(output, clazz, TopiaGeneratorUtil.TAG_SECURITY_DELETE); -/*{ - } - return resultPermissions; - } - -}*/ - // THIMEL : Le code suivant doit pouvoir être déplacé dans DAODelegator ? -/*{ - /** - * Retourne les permissions a verifier pour l'acces a l'entite pour le service Taas - * @param topiaId topiaId d'une entite - * @param actions actions souhaitées - * @param query requete pour avoir le prochain topiaId - * @param daoClass delegation du getRequestPermission - * @return la liste des permissions - *) - protected List<Permission> getRequestPermission(String topiaId, int actions, String query, Class daoClass) throws TopiaException { - TopiaContextImplementor context = getContext(); - List<String> result = context.find(query, "id", topiaId); - - List<Permission> resultPermissions = new ArrayList<Permission>(); - for (String topiaIdPermission : result) { - TopiaDAO dao = context.getDAO(daoClass); - List<Permission> permissions = dao.getRequestPermission(topiaIdPermission, actions); - if(permissions != null) { - resultPermissions.addAll(permissions); - } else { - TaasPermission permission = new TaasPermission(topiaIdPermission, actions); - resultPermissions.add(permission); - } - } - return resultPermissions; - } -}*/ - } -/*{ -} // <%=clazz.getName()%>DAOAbstract -}*/ - } - - /** - * Generation of DAO operations signatures from class. - * These operations are abstract and identified by <<dao>> stereotype in the model. - * The developper must defined these methods in the DAOImpl associated to this DAOAbstract. - * @param output - * @param operations operations to generate - */ - private void generateDAOOperations(Writer output, Collection<ObjectModelOperation> operations) throws IOException { - for (ObjectModelOperation op : operations) { - String opName = op.getName(); - -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(op)) { - String opDocumentation = op.getDocumentation(); -/*{ * <%=opName%> : <%=opDocumentation%> -}*/ - } - Collection<ObjectModelParameter> params = op.getParameters(); - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramDocumentation = param.getDocumentation(); -/*{ * @param <%=paramName%> <%=paramDocumentation%> - }*/ - } - String opVisibility = op.getVisibility(); - String opType = op.getReturnType(); - //ObjectModelClass clazz = (ObjectModelClass)op.getDeclaringElement(); - //opType = opType.replace(clazz.getQualifiedName(),clazz.getName()); - //opType = opType.replace(clazz.getName(), "E"); // Generic usage for inheritance -/*{ *) - <%=opVisibility%> abstract <%=opType%> <%=opName%>(}*/ - String comma = ""; - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramType = param.getType(); -/*{<%=comma%><%=paramType%> <%=paramName%>}*/ - comma = ", "; - } -/*{)}*/ - Set<String> exceptions = op.getExceptions(); - exceptions.add("TopiaException"); - comma = " throws "; - for (String exception : exceptions) { -/*{<%=comma%><%=exception%>}*/ - comma = ", "; - } -/*{; - -}*/ - } - } - - private boolean isCollectionNeeded(Collection<ObjectModelOperation> operations) { - return isImportNeeded(operations, "Collection"); - } - - private boolean isSetNeeded(Collection<ObjectModelOperation> operations) { - return isImportNeeded(operations, "Set"); - } - - private boolean isImportNeeded(Collection<ObjectModelOperation> operations, String importName) { - for (ObjectModelOperation op : operations) { - if (op.getReturnType().contains(importName)){ - return true; - } - for (ObjectModelParameter param : op.getParameters()) { - if (param.getType().contains(importName)){ - return true; - } - } - } - return false; - } - - public static Collection<ObjectModelOperation> getDAOOperations(ObjectModelClass clazz) { - Collection<ObjectModelOperation> results = new ArrayList<ObjectModelOperation>(); - for (ObjectModelOperation op : clazz.getOperations()) { - if (op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { - results.add(op); - } - } - return results; - } - - private void generateSecurity(Writer output, ObjectModelClass clazz, String securityTagName) throws IOException { - if (clazz.hasTagValue(securityTagName)) { - String security = clazz.getTagValue(securityTagName); - Pattern propertiesPattern = Pattern - .compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)attribute\\.(?:([_a-z0-9][_a-zA-Z0-9]*))#(?:(create|load|update|delete))"); - String[] valuesSecurity = security.split(":"); - - for (String valueSecurity : valuesSecurity) { - Matcher matcher = propertiesPattern.matcher(valueSecurity); - matcher.find(); - // className is fully qualified name of class - String className = matcher.group(1); - className = StringUtil.substring(className, 0, -1); // remove ended - // . - // target is class, attribute or operation - String attributeName = matcher.group(2); - String actions = matcher.group(3).toUpperCase(); - - String query = ""; - String daoClass = ""; - if(className.equals(clazz.getQualifiedName())) { - query = "select " + attributeName + ".topiaId from " + clazz.getQualifiedName() + " where topiaId = :id"; - daoClass = clazz.getAttribute(attributeName).getClassifier().getQualifiedName(); - } else { - query = "select at.topiaId from " + className + " at inner join at." + attributeName + " cl where cl.topiaId = :id"; - daoClass = className; - } -/*{ resultPermissions.addAll(getRequestPermission(topiaId, - <%=actions%>, - "<%=query%>", - <%=daoClass%>.class)); -}*/ - } - } else { -/*{ return null; -}*/ - } - } - - protected void generateNoNMultiplicity(Writer output, ObjectModelAttribute attr, boolean isAssoc) throws IOException { - String attrName = attr.getName(); - String attrType = attr.getType(); - String propertyName = attrName; - if (!isAssoc && attr.hasAssociationClass()) { - propertyName = TopiaGeneratorUtil.toLowerCaseFirstLetter(attr.getAssociationClass().getName()) + "." + propertyName; - } -/*{ - /** - * Retourne le premier élément trouvé ayant comme valeur pour l'attribut - * <%=attrName%> le paramètre - * @param v la valeur que doit avoir <%=attrName%> - * @return un element ou null - *) - public E findBy<%=TopiaGeneratorUtil.capitalize(attrName)%>(<%=attrType%> v) throws TopiaException { - E result = findByProperty("<%=propertyName%>", v); - return result; - } - - /** - * Retourne les éléments ayant comme valeur pour l'attribut - * <%=attrName%> le paramètre - * @param v la valeur que doit avoir <%=attrName%> - * @return une liste - *) - public List<E> findAllBy<%=TopiaGeneratorUtil.capitalize(attrName)%>(<%=attrType%> v) throws TopiaException { - List<E> result = findAllByProperty("<%=propertyName%>", v); - return result; - } -}*/ - if (attr.hasAssociationClass()) { - String assocClassName = attr.getAssociationClass().getName(); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); -/*{ - /** - * Retourne le premier élément trouvé ayant comme valeur pour l'attribut - * <%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> le paramètre - * @param value la valeur que doit avoir <%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> - * @return un element ou null - *) - public E findBy<%=TopiaGeneratorUtil.capitalize(assocClassName)%>(<%=assocClassFQN%> value) throws TopiaException { - E result = findByProperty("<%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>", value); - return result; - } - - /** - * Retourne les éléments ayant comme valeur pour l'attribut - * <%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> le paramètre - * @param value la valeur que doit avoir <%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> - * @return une liste - *) - public List<E> findAllBy<%=TopiaGeneratorUtil.capitalize(assocClassName)%>(<%=assocClassFQN%> value) throws TopiaException { - List<E> result = findAllByProperty("<%=TopiaGeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>", value); - return result; - } -}*/ - } - } - - protected void generateNMultiplicity(Writer output, ObjectModelAttribute attr) throws IOException { - String attrName = attr.getName(); - String attrType = attr.getType(); -/*{ - /** - * Retourne le premier élément trouvé dont l'attribut - * <%=attrName%> contient le paramètre - * @param v la valeur que doit contenir <%=attrName%> - * @return un element ou null - *) - public E findContains<%=TopiaGeneratorUtil.capitalize(attrName)%>(<%=attrType%> ... v) throws TopiaException { - E result = findContainsProperties("<%=TopiaGeneratorUtil.toLowerCaseFirstLetter(attrName)%>", Arrays.asList(v)); - return result; - } - /** - * Retourne les éléments trouvé dont l'attribut - * <%=attrName%> contient le paramètre - * @param v la valeur que doit contenir <%=attrName%> - * @return une liste - *) - public List<E> findAllContains<%=TopiaGeneratorUtil.capitalize(attrName)%>(<%=attrType%> ... v) throws TopiaException { - List<E> results = findAllContainsProperties("<%=TopiaGeneratorUtil.toLowerCaseFirstLetter(attrName)%>", Arrays.asList(v)); - return results; - } -}*/ - } - -} //DAOAbstractGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -51,11 +51,8 @@ /** * Created: 13 déc. 2009 * - * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @author tchemit <chemit@codelutin.com> + * @version $Id$ * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOAbstractTransformer" */ Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,92 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityPOJOGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; - -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModelClass; - -/** - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link DAOTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOGenerator" - */ -@Deprecated -public class DAOGenerator extends ObjectModelGenerator { - - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "DAO.java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); - String clazzFQN = clazz.getQualifiedName(); -/*{package <%=clazz.getPackageName()%>; - -/** - * Cette classe etend le DAOImpl pour parametrer la classe avec le bon type - * Cette classe est marque finale car l'heritage entre les DAO se fait - * sur les DOAImpl, c-a-d que DAOAbstract peut etendre le DAOImpl - *) -public final class <%=clazzName%>DAO extends <%=clazzFQN%>DAOImpl<<%=clazzName%>> { - -}*/ - -/*{} //<%=clazzName%>DAO -}*/ - } - -} //DAOGenerator Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,369 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/******************************************************************************* - * DAOHelperGenerator.java - * - * Created: 12 déc. 2005 - * - * @author Arnaud Thimel <thimel@codelutin.com> - * - * @version $Revision$ - * - * Mise a jour: $Date$ par : $Author$ - */ - -package org.nuiton.topia.generator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Iterator; -import java.util.List; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelClass; - -/** - * Ce generateur permet d'avoir une classe permettant de recuperer les DAO - * sans cast. - * - * La classe générée contient aussi une énumération nommée <code>EntityEnum</code> qui permet - * d'avoir facilement les types d'entités gérées par ce dao. - * - * @author poussin - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link DAOHelperTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOHelperGenerator" - */ -@Deprecated -public class DAOHelperGenerator extends ObjectModelGenerator { - - private Log log = LogFactory.getLog(DAOHelperGenerator.class); - - @Override - public String getFilenameForModel(ObjectModel model) { - - String modelName = StringUtils.capitalize(model.getName()); - - return (getProperty("defaultPackage") + ".").replace('.', - File.separatorChar) - + modelName + "DAOHelper.java"; - } - - @Override - public void generateFromModel(Writer output, ObjectModel model) - throws IOException { - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String packageName = getProperty("defaultPackage"); -/*{package <%=packageName%>; - -}*/ - String modelName = StringUtils.capitalize(model.getName()); - String modelVersion = model.getVersion(); - String daoHelperClazzName = modelName+"DAOHelper"; - String entityEnumName = modelName+"EntityEnum"; - List<ObjectModelClass> classes = TopiaGeneratorUtil.getEntityClasses(model,true); - boolean generateOperator = TopiaGeneratorUtil.shouldgenerateOperatorForDAOHelper(null, model); - - List<String> imports = computeImports(generateOperator,packageName, classes); - if (log.isDebugEnabled()) { - log.debug("imports for class <" + daoHelperClazzName + ">"); - } - for (String anImport : imports) { - if (log.isDebugEnabled()) { - log.debug("import " + anImport); - } -/*{import <%=anImport%>; -}*/ - } -/*{ -public class <%=daoHelperClazzName%> { - -}*/ - -/*{ /** - * no instance for this helper - *) - protected <%=daoHelperClazzName%>() { - } - - /** - * Model version. - * - * @return model version - *) - public static String getModelVersion() { - return "<%=modelVersion%>"; - } -}*/ - - for (ObjectModelClass clazz : classes) { - String clazzName = clazz.getName(); - String daoClazzName = clazzName + "DAO"; -/*{ - public static <%=daoClazzName%> get<%=daoClazzName%>(TopiaContext context) throws TopiaException { - TopiaContextImplementor ci = (TopiaContextImplementor) context; - <%=daoClazzName%> result = (<%=daoClazzName%>) ci.getDAO(<%=clazzName%>.class); - return result; - } -}*/ - } -/*{ - @SuppressWarnings({"unchecked"}) - public static <T extends TopiaEntity, D extends TopiaDAO<? super T>> D getDAO(TopiaContext context, Class<T> klass) throws TopiaException { - TopiaContextImplementor ci = (TopiaContextImplementor) context; - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - D dao = (D) ci.getDAO(constant.getContract()); - return dao; - } - - @SuppressWarnings({"unchecked"}) - public static <T extends TopiaEntity, D extends TopiaDAO<? super T>> D getDAO(TopiaContext context, T entity) throws TopiaException { - TopiaContextImplementor ci = (TopiaContextImplementor) context; - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(entity); - D dao = (D) ci.getDAO(constant.getContract()); - return dao; - } - - @SuppressWarnings({"unchecked"}) - public static <T extends TopiaEntity> Class<T> getContractClass(Class<T> klass) { - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return (Class<T>) constant.getContract(); - } - - @SuppressWarnings({"unchecked"}) - public static <T extends TopiaEntity> Class<T> getImplementationClass(Class<T> klass) { - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return (Class<T>) constant.getImplementation(); - } - - @SuppressWarnings({"unchecked"}) - public static Class<? extends TopiaEntity>[] getContractClasses() { - <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); - Class<? extends TopiaEntity>[] result = (Class<? extends TopiaEntity>[]) Array.newInstance(Class.class, values.length); - for (int i = 0; i < values.length; i++) { - result[i] = values[i].getContract(); - } - return result; - } - - @SuppressWarnings({"unchecked"}) - public static Class<? extends TopiaEntity>[] getImplementationClasses() { - <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); - Class<? extends TopiaEntity>[] result = (Class<? extends TopiaEntity>[]) Array.newInstance(Class.class, values.length); - for (int i = 0; i < values.length; i++) { - result[i] = values[i].getImplementation(); - } - return result; - } - - public static String getImplementationClassesAsString() { - StringBuilder buffer = new StringBuilder(); - for (Class<? extends TopiaEntity> aClass : getImplementationClasses()) { - buffer.append(',').append(aClass.getName()); - } - return buffer.substring(1); - } - - public static <%=entityEnumName%>[] getContracts() { - return <%=entityEnumName%>.values(); - } -}*/ - if (generateOperator) { -/*{ - @SuppressWarnings({"unchecked"}) - public static <T extends TopiaEntity> EntityOperator<T> getOperator(Class<T> klass) { - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return (EntityOperator<T>) EntityOperatorStore.getOperator(constant); - } -}*/ - } -/*{ - /* - * Enumeration of all types of entities managed by this helper. - *) - public enum <%=entityEnumName%> implements org.nuiton.topia.persistence.TopiaEntityEnum { -}*/ - - for (Iterator<ObjectModelClass> i=classes.iterator(); i.hasNext();) { - ObjectModelClass clazz = i.next(); - String clazzName = clazz.getName(); -/*{ - <%=clazzName%>(<%=clazzName%>.class)<%=(i.hasNext() ? "," : ";")%>}*/ - } -/*{ - - /** the contract of the entity *) - private Class<? extends TopiaEntity> contract; - - /** the fully qualified name of the implementation of the entity *) - private String implementationFQN; - - /** the implementation class of the entity (will be lazy computed at runtime)*) - private Class<? extends TopiaEntity> implementation; - - <%=entityEnumName%>(Class<? extends TopiaEntity > contract) { - this.contract = contract; - this.implementationFQN = contract.getName()+"Impl"; - } - - @Override - public Class<? extends TopiaEntity> getContract() { - return contract; - } - - @Deprecated - public Class<? extends TopiaEntity> getContractClass() { - return getContract(); - } - - @Deprecated - public Class<? extends TopiaEntity> getImplementationClass() { - return getImplementation(); - } - - @Override - public String getImplementationFQN() { - return implementationFQN; - } - - @Override - public synchronized void setImplementationFQN(String implementationFQN) { - this.implementationFQN = implementationFQN; - this.implementation = null; -}*/ - if (generateOperator) { -/*{ // on reinitialise le magasin d'operators - EntityOperatorStore.clear(); -}*/ - } -/*{ } - - @Override - public boolean accept(Class<? extends TopiaEntity> klass) { - return <%=daoHelperClazzName%>.getContractClass(klass) == contract; - } - - @Override - @SuppressWarnings({"unchecked"}) - public Class<? extends TopiaEntity> getImplementation() { - if (implementation == null) { - try { - implementation = (Class<? extends TopiaEntity>) Class.forName(implementationFQN); - } catch (ClassNotFoundException e) { - throw new RuntimeException("could not find class " + implementationFQN); - } - } - return implementation; - } - - public static <%=entityEnumName%> valueOf(TopiaEntity entity) { - return valueOf(entity.getClass()); - } - - public static <%=entityEnumName%> valueOf(Class<?> klass) { - if (klass.isInterface()) { - return <%=entityEnumName%>.valueOf(klass.getSimpleName()); - } - for (<%=entityEnumName%> entityEnum : <%=entityEnumName%>.values()) { - if (entityEnum.getContract().isAssignableFrom(klass)) { - //todo check it works for inheritance - return entityEnum; - } - } - throw new IllegalArgumentException("no entity defined for the class " + klass + " in : " + Arrays.toString(<%=entityEnumName%>.values())); - } - } -}*/ - String entitiesList = ""; - if (classes.isEmpty()) { -/*{ - /** - * @eprecated (prefer use {@link #getImplementationClassesAsString()} - *) - public static final String entitiesList = ""; -}*/ - } else { -/*{ - /** - * use {@link #getImplementationClassesAsString()} - * - * @deprecated (will be removed soon). - *) - public static final String entitiesList = "" + -}*/ - - for (Iterator<ObjectModelClass> i=classes.iterator(); i.hasNext();) { - ObjectModelClass clazz = i.next(); - String doType = TopiaGeneratorUtil.getDOType(clazz, model); - entitiesList += doType + (i.hasNext()?",":""); -/*{ "<%=doType%><%=(i.hasNext()?",\" +":"\";")%> -}*/ - } - } - if (log.isDebugEnabled()) { - log.debug("Full entities list : " + entitiesList); - } -/*{ -} //<%=daoHelperClazzName%> -}*/ - } - - protected List<String> computeImports(boolean generateOperator,String packageName, List<ObjectModelClass> classes) { - java.util.Set<String> imports = new java.util.HashSet<String>(java.util.Arrays.asList( - java.lang.reflect.Array.class.getName(), - java.util.Arrays.class.getName(), - org.nuiton.topia.TopiaContext.class.getName(), - org.nuiton.topia.TopiaException.class.getName(), - org.nuiton.topia.framework.TopiaContextImplementor.class.getName(), - org.nuiton.topia.persistence.TopiaDAO.class.getName(), - org.nuiton.topia.persistence.TopiaEntity.class.getName())); - if (generateOperator) { - imports.add(org.nuiton.topia.persistence.util.EntityOperator.class.getName()); - imports.add(org.nuiton.topia.persistence.util.EntityOperatorStore.class.getName()); - - } - for (ObjectModelClass clazz : classes) { - String clazzFQN = clazz.getQualifiedName(); - imports.add(clazzFQN); - imports.add(clazzFQN + "DAO"); - } - List<String> cleanImports = TopiaGeneratorUtil.cleanImports(packageName, imports); - java.util.Collections.sort(cleanImports); - return cleanImports; - } -} //DAOHelperGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -51,10 +51,10 @@ /*{generator option: writeString = +}*/ /** - * User: chemit - * Date: 13 nov. 2009 - * Time: 09:05:17 + * Created: 13 nov. 2009 09:05:17 * + * @author tchemit <chemit@codelutin.com> + * @version $Id$ * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOHelperTransformer" */ Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,104 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityPOJOGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; - -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelOperation; -/** - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link DAOImplTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOImplGenerator" - */ -@Deprecated -public class DAOImplGenerator extends ObjectModelGenerator { - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "DAOImpl.java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY) || hasDAOOperations(clazz)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); - String clazzFQN = clazz.getQualifiedName(); -/*{package <%=clazz.getPackageName()%>; - -/** - * Implantation du DAO pour l'entité <%=clazzName%>. - * L'utilisateur peut remplacer cette classe par la sienne en la mettant - * simplement dans ces sources. Cette classe générée sera alors simplement - * écrasée. - *) -public class <%=clazzName%>DAOImpl<E extends <%=clazzName%>> extends <%=clazzFQN%>DAOAbstract<E> { - -} //<%=clazzName%>DAO -}*/ - } - - /** - * Detect if the class has DAO operations identified with <<dao>> stereotype. - * @param clazz The ObjectModelClass with operations (Corresponding to the Entity) - * @return true if the class has some dao operations, false if not - */ - public static boolean hasDAOOperations(ObjectModelClass clazz) { - for (ObjectModelOperation op : clazz.getOperations()) { - if (op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { - return true; - } - } - return false; - } - -} //DAOGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -33,10 +33,8 @@ * Created: 14 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOImplTransformer" */ public class DAOImplTransformer extends ObjectModelTransformerToJava { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -35,10 +35,7 @@ * Created: 13 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DAOTransformer" */ Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,552 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityAbstractGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import static org.nuiton.topia.generator.TopiaGeneratorUtil.TAG_ANNOTATION; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Iterator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.Transformer; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelInterface; - -// do not remove me :) -import org.apache.commons.lang.StringUtils; - -/** - * DTO generator - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DTOGenerator" - * @deprecated since 2.3.0, prefer use the corresponding {@link Transformer} : - * {@link DTOTransformer}. - */ -@Deprecated -public class DTOGenerator extends ObjectModelGenerator { - - /** - * Logger for this class - */ - private static final Log log = LogFactory.getLog(DTOGenerator.class); - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "DTO.java"; - } - - public boolean isDTO(String type) { - ObjectModelClassifier clazz = model.getClassifier(type); - return clazz != null && clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO); - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); -/*{package <%=clazz.getPackageName()%>; - -import org.apache.commons.lang.builder.ToStringBuilder; -import java.beans.PropertyChangeListener; -import java.util.List; -import java.util.Collection; - -/** - * DTO implantation for <%=StringUtils.capitalize(clazzName)%> entity. - *) -public class <%=clazzName%>DTO}*/ - -/* - * Définition de la super classe : il ne doit y avoir qu'une - */ - - String extendClass = ""; - Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator(); - if (j.hasNext()) { - ObjectModelClassifier parent = j.next(); - if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - extendClass += parent.getName() + "DTO"; - } else { - extendClass += parent.getName(); - } - } - - if (extendClass.length() > 0) { -/*{ extends <%=extendClass%>}*/ - } -/* - * Définition des interfaces - */ -/*{ implements java.io.Serializable}*/ - String implInterface = ""; - for (Iterator<ObjectModelInterface> i=clazz.getInterfaces().iterator(); i.hasNext();) { - ObjectModelClassifier parentInterface = i.next(); - if (parentInterface.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - implInterface += parentInterface.getName() + "DTO"; - } else { - implInterface += parentInterface.getName(); - } - - if (i.hasNext()) { - implInterface += ", "; - } - } - if (implInterface.length() > 0) { -/*{, <%=implInterface%> { - -}*/ - } else { - /*{ { - -}*/ - } - - String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model); - // TODO Calculer un serialVersionUID si il n'y en a pas - if (svUID != null) { -/*{ public static final long serialVersionUID = <%=svUID%>; - -}*/ - } -/* - * Définition des attributs - */ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - if (!(attr.isNavigable() - || attr.hasAssociationClass())) { - continue; - } - - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ /** - * <%=attr.getDocumentation()%> - *) -}*/ - } - String annotation = attr.getTagValue(TAG_ANNOTATION); - if (annotation != null && annotation.length() > 0) { -/*{ <%=annotation%> -}*/ - } - String attrName = attr.getName(); - String attrVisibility = attr.getVisibility(); - String attrType = attr.getType(); - if (!GeneratorUtil.isNMultiplicity(attr)) { - if (!attr.hasAssociationClass()) { - if (isDTO(attrType)) { - attrType += "DTO"; - } -/*{ <%=attrVisibility%> <%=attrType%> <%=attrName%>; -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); -/*{ <%=attrVisibility%> <%=assocClassFQN%>DTO <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; -}*/ - } - } else { - if (!attr.hasAssociationClass()) { - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<"; - } else { - nMultType = "Collection<"; - } - nMultType += attrType; - if (isDTO(attrType)) { - nMultType += "DTO"; - } - nMultType += ">"; -/*{ <%=attrVisibility%> <%=nMultType%> <%=attrName%>; -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<"; - } else { - nMultType = "Collection<"; - } - nMultType += assocClassFQN; - if (isDTO(attrType)) { - nMultType += "DTO"; - } - nMultType += ">"; -/*{ <%=attrVisibility%> <%=nMultType%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; -}*/ - } - } - } /* end for*/ - - //Déclaration des attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrName = attr.getName(); - String attrVisibility = attr.getVisibility(); - String attrType = attr.getType(); - if (isDTO(attrType)) { - attrType += "DTO"; - } -/*{ <%=attrVisibility%> <%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>; -}*/ - } - } - } -/*{ - protected java.beans.PropertyChangeSupport p; - - /** - * Default constructor of <%=clazzName%>DTO. - *) - public <%=clazzName%>DTO() { - p = new java.beans.PropertyChangeSupport(this); - } - - /** - * Constructor of <%=clazzName%>DTO with all parameters. - *) - public <%=clazzName%>DTO(}*/ - - boolean une_fois = true; - for (ObjectModelAttribute attr : clazz.getAttributes()) { - - if (!(attr.isNavigable() - || attr.hasAssociationClass())) { - continue; - } - - if (une_fois) { - une_fois = false; - } else { -/*{, }*/ - } - - String attrName = attr.getName(); - String attrVisibility = attr.getVisibility(); - String attrType = attr.getType(); - String attrTypeDTO = attr.getType(); - if (isDTO(attrType)) { - attrTypeDTO += "DTO"; - } - if (!GeneratorUtil.isNMultiplicity(attr)) { - if (!attr.hasAssociationClass()) { -/*{<%=attrTypeDTO%> <%=attrName%>}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); -/*{<%=assocClassFQN%>DTO <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>}*/ - } - } else { - if (!attr.hasAssociationClass()) { - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + attrTypeDTO + ">"; - } else { - nMultType = "Collection<" + attrTypeDTO + ">"; - } -/*{<%=nMultType%> <%=attrName%>}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + assocClassFQN + "DTO>"; - } else { - nMultType = "Collection<" + assocClassFQN + "DTO>"; - } -/*{<%=nMultType%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>}*/ - } - } - - - } // end for - - /*{ ) { - this(); -}*/ - - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - - if (!(attr.isNavigable() - || attr.hasAssociationClass())) { - continue; - } - - String attrName = attr.getName(); - - if (!GeneratorUtil.isNMultiplicity(attr)) { - if (!attr.hasAssociationClass()) { -/*{ this.<%=attrName%> = <%=attrName%>; -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); -/*{ this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; -}*/ - } - } else { - if (!attr.hasAssociationClass()) { -/*{ this.<%=attrName%> = <%=attrName%>; -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); -/*{ this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; -}*/ - } - } - } -/*{ } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - p.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - p.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.removePropertyChangeListener(propertyName, listener); - } - -}*/ - - - /* - * Définition des getteurs et setteurs - */ - for (Object o : clazz.getAttributes()) { - ObjectModelAttribute attr = (ObjectModelAttribute) o; - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - if (!attr.isNavigable()) { - continue; - } - - String attrName = attr.getName(); - String attrType = attr.getType(); - String attrTypeDTO = attr.getType(); - if (isDTO(attrType)) { - attrTypeDTO += "DTO"; - } - - if (!GeneratorUtil.isNMultiplicity(attr)) { - if (!attr.hasAssociationClass()) { -/*{ public void set<%=StringUtils.capitalize(attrName)%>(<%=attrTypeDTO%> value) { - <%=attrTypeDTO%> oldValue = this.<%=attrName%>; - this.<%=attrName%> = value; - p.firePropertyChange("<%=attrName%>", oldValue, value); - } - - public <%=attrTypeDTO%> get<%=StringUtils.capitalize(attrName)%>() { - return <%=attrName%>; - } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - if (log.isTraceEnabled()) { - log.trace("assocAttrName: " + assocAttrName); - } -/*{ public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>DTO association) { - <%=assocClassFQN%>DTO oldAssocation = this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = association; - p.firePropertyChange("<%=attrName%>", oldAssocation, assocation); - } - - public <%=assocClassFQN%>DTO get<%=StringUtils.capitalize(assocAttrName)%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - -}*/ - } - } else { //NMultiplicity - if (!attr.hasAssociationClass()) { //Méthodes remplacées par des accesseurs sur les classes d'assoc - - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + attrTypeDTO + ">"; - } else { - nMultType = "Collection<" + attrTypeDTO + ">"; - } -/*{ public void set<%=StringUtils.capitalize(attrName)%>(<%=nMultType%> values) { - <%=nMultType%> oldValues = this.<%=attrName%>; - this.<%=attrName%> = values; - p.firePropertyChange("<%=attrName%>", oldValues, values); - } - -}*/ - - //AddChild -/*{ public <%=attrTypeDTO%> addChild(<%=attrTypeDTO%> <%=attrName%>) { - this.<%=attrName%>.add(<%=attrName%>); -}*/ - if (reverse != null && reverse.isNavigable()) { - String reverseAttrName = reverse.getName(); -/*{ <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(this); -}*/ - } -/*{ return <%=attrName%>; - } - -}*/ - //RemoveChild -/*{ public void removeChild(<%=attrTypeDTO%> <%=attrName%>) { - this.<%=attrName%>.remove(<%=attrName%>); -}*/ - if (reverse != null && reverse.isNavigable()) { - String reverseAttrName = reverse.getName(); -/*{ <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(null); -}*/ - } -/*{ } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + assocClassFQN + "DTO>"; - } else { - nMultType = "Collection<" + assocClassFQN + "DTO>"; - } - if (log.isTraceEnabled()) { - log.trace("assocAttrName: " + assocAttrName); - } -/*{ public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=nMultType%> values) { - <%=nMultType%> oldValues = this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = values; - p.firePropertyChange("<%=attrName%>", oldValues, values); - } - -}*/ - } - if (!attr.hasAssociationClass()) { - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + attrTypeDTO + ">"; - } else { - nMultType = "Collection<" + attrTypeDTO + ">"; - } -/*{ public <%=nMultType%> get<%=StringUtils.capitalize(attrName)%>() { - return this.<%=attrName%>; - } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - String nMultType; - if (attr.isOrdered()) { - nMultType = "List<" + assocClassFQN + "DTO>"; - } else { - nMultType = "Collection<" + assocClassFQN + "DTO>"; - } - if (log.isTraceEnabled()) { - log.trace("assocAttrName: " + assocAttrName); - } -/*{ public <%=nMultType%> get<%=StringUtils.capitalize(assocAttrName)%>() { - return this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - -}*/ - } - } - } - -/*{ - @Override - public String toString() { - String result = new ToStringBuilder(this). -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (!(attr.isNavigable() - || attr.hasAssociationClass())) { - continue; - } - - //FIXME possibilité de boucles (non directes) - ObjectModelClass attrEntity = null; - if (model.hasClass(attr.getType())) { - attrEntity = model.getClass(attr.getType()); - } - boolean isDTO = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)); //THIMEL : STEREOTYPE ENTITY ??? - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if ((isDTO && (reverse == null || !reverse.isNavigable()) && !attr.hasAssociationClass()) || (!isDTO)) { - String attrName = attr.getName(); -/*{ append("<%=attrName%>", this.<%=attrName%>). -}*/ - } - } -/*{ toString(); - return result; - } - -} //<%=clazz.getName()%>DTO -}*/ - } - -} //DTOGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -49,12 +49,9 @@ * Created: 20 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DTOTransformer" + * @version $Id$ * @since 2.3.0 + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.DTOTransformer" */ public class DTOTransformer extends ObjectModelTransformerToJava { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,914 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityAbstractGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.shouldBeAbstract; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isPrimitiveType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isDateType; -import org.nuiton.topia.persistence.TopiaEntityAbstract; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Iterator; -import java.util.List; - - -/** - * 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. - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link EntityAbstractTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityAbstractGenerator" - */ -@Deprecated -public class EntityAbstractGenerator extends ObjectModelGenerator { - - /** Logger for this class */ - private static final Log log = LogFactory.getLog(EntityAbstractGenerator.class); - - // TODO THIMEL : Je pense qu'il faudrait que l'EntityInterfaceGenerator - // hérite de ce générateur, avec generateBody qui renvoie false, et que dans - // ce générateur, on ne génère pas les corps de méthode, etc ... quand - // generateBoody() renvoie false - protected boolean generateBody() { - return true; - } - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "Abstract.java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); - String clazzFQN = TopiaGeneratorUtil.getSimpleName(clazz.getQualifiedName()); -/*{package <%=clazz.getPackageName()%>; -}*/ - List<String> imports = TopiaGeneratorUtil.getImports(clazz, - org.apache.commons.lang.builder.ToStringBuilder.class.getName(), - org.nuiton.topia.TopiaException.class.getName(), - org.nuiton.topia.framework.TopiaContextImplementor.class.getName(), - org.nuiton.topia.persistence.TopiaEntity.class.getName(), - TopiaEntityAbstract.class.getName(), - org.nuiton.topia.persistence.EntityVisitor.class.getName(), - java.util.List.class.getName(), - java.util.ArrayList.class.getName(), - java.io.Serializable.class.getName() - ); - if (log.isDebugEnabled()) { - log.debug("imports for class <" + clazzFQN + ">"); - } - for (String anImport : imports) { - if (log.isDebugEnabled()) { - log.debug("import " + anImport); - } -/*{import <%=anImport%>; -}*/ - } -/*{ -/** - * Implantation POJO pour l'entité {@link <%=StringUtils.capitalize(clazzFQN)%>}. -}*/ - { - String dbName = clazz.getTagValue(TopiaGeneratorUtil.TAG_DB_NAME); - if (dbName != null) { -/*{ * - * <p>Nom de l'entité en BD : <%=dbName%>.</p> -}*/ - } - } -/*{ *) -}*/ - String extendClass = ""; - for (Iterator<ObjectModelClass> i = clazz.getSuperclasses().iterator(); i.hasNext();) { - ObjectModelClass parent = i.next(); - extendClass += parent.getQualifiedName(); - //Si une des classes parentes définies des méthodes abstraites, son - // impl ne sera pas créé - boolean abstractParent = false; - if (parent instanceof ObjectModelClass) { - abstractParent = shouldBeAbstract(parent); - } - if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - if (abstractParent) { - extendClass += "Abstract"; - } else { - extendClass += "Impl"; - } - } - if (i.hasNext()) { - extendClass += ", "; - } - } - if (extendClass.length() == 0) { - extendClass += TopiaEntityAbstract.class.getSimpleName(); - } - -/*{public abstract class <%=clazzName%>Abstract extends <%=extendClass%> implements <%=clazzName%> { - -}*/ - - String svUID = TopiaGeneratorUtil.findTagValue("serialVersionUID", clazz, model); - if (svUID != null) { -/*{ public static final long serialVersionUID = <%=svUID%>; - -}*/ - } - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - // pour les asso quoi qu'il arrive il faut les lier des 2 cotes - // pour pouvoir supprimer en cascade l'asso lors de la suppression - // d'un des cotes - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model) - || attr.hasAssociationClass())) { - continue; - } - if (TopiaGeneratorUtil.hasDocumentation(attr) || attr.hasTagValue(TopiaGeneratorUtil.TAG_DB_NAME)) { -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { - String attrDocumentation = attr.getDocumentation(); -/*{ * <%=attrDocumentation%> -}*/ - } - if (attr.hasTagValue(TopiaGeneratorUtil.TAG_DB_NAME)) { - String dbName = attr.getTagValue(TopiaGeneratorUtil.TAG_DB_NAME); -/*{ * Nom de l'attribut en BD : <%=dbName%>. -}*/ - } -/*{ *) -}*/ - } - if (attr.hasTagValue(TopiaGeneratorUtil.TAG_ANNOTATION)) { - String annotation = attr.getTagValue(TopiaGeneratorUtil.TAG_ANNOTATION); -/*{ <%=annotation%> -}*/ - } - - String attrVisibility = attr.getVisibility(); - - // In case attribute is NMultiplicity - String collectionType = TopiaGeneratorUtil.getSimpleName(TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr)); - - if (!attr.hasAssociationClass()) { - String attrName = attr.getName(); - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ <%=attrVisibility%> <%=attrType%> <%=attrName%>; - -}*/ - } else { -/*{ <%=attrVisibility%> <%=collectionType%><<%=attrType%>> <%=attrName%>; - -}*/ - } - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); - if (!GeneratorUtil.isNMultiplicity(attr)) { - //TODO THIMEL : Je pense que les GeneratorUtil.toLowerCaseFirstLetter sont inutiles ici, ou alors il faudrait le faire partout -/*{ <%=attrVisibility%> <%=assocClassFQN%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - -}*/ - } else { -/*{ <%=attrVisibility%> <%=collectionType%><<%=assocClassFQN%>> <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - -}*/ - } - } - } - - //Déclaration des attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrVisibility = attr.getVisibility(); - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - String attrName = attr.getName(); -/*{ <%=attrVisibility%> <%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>; - -}*/ - } - } - } - -/*{ /** - * Constructeur de <%=clazzName%>Abstract par défaut. - *) - public <%=clazzName%>Abstract() { - } - - @Override - public void update() throws TopiaException { - ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=clazzName%>.class).update(this); - } - - @Override - public void delete() throws TopiaException { - ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=clazzName%>.class).delete(this); - } - - /** - * Envoi via les methodes du visitor l'ensemble des champs de l'entity - * avec leur nom, type et valeur. - * - * @param visitor le visiteur de l'entite. - * - * @throws TopiaException if any pb while visit - *) - @Override - public void accept(EntityVisitor visitor) throws TopiaException { - visitor.start(this); -}*/ - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - // pour les asso quoi qu'il arrive il faut les lier des 2 cotes - // pour pouvoir supprimer en cascade l'asso lors de la suppression - // d'un des cotes - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model) - || attr.hasAssociationClass())) { - continue; - } - - if (!attr.hasAssociationClass()) { - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - String attrName = attr.getName(); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ visitor.visit(this, "<%=attrName%>", <%=attrType%>.class, <%=attrName%>); -}*/ - } else { - String collectionType = TopiaGeneratorUtil.getSimpleName(TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr)); -/*{ visitor.visit(this, "<%=attrName%>", <%=collectionType%>.class, <%=attrType%>.class, <%=attrName%>); -}*/ - } - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - assocAttrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ visitor.visit(this, "<%=assocAttrName%>", <%=assocClassFQN%>.class, <%=assocAttrName%>); -}*/ - } else { - String collectionType = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr); -/*{ visitor.visit(this, "<%=assocAttrName%>", <%=collectionType%>.class, <%=assocClassFQN%>.class, <%=assocAttrName%>); -}*/ - } - } - } - - //Déclaration des attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - String attrName = attr.getName(); - attrName = GeneratorUtil.toLowerCaseFirstLetter(attrName); -/*{ visitor.visit(this, "<%=attrName%>", <%=attrType%>.class, <%=attrName%>); -}*/ - } - } - } -/*{ visitor.end(this); - } - - @Override - public List<TopiaEntity> getAggregate() throws TopiaException { - List<TopiaEntity> tmp = new ArrayList<TopiaEntity>(); - - // pour tous les attributs rechecher les composites et les class d'asso - // on les ajoute dans tmp -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (attr.referenceClassifier() && attr.getClassifier().hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - if (attr.isAggregate()) { - String attrName = attr.getName(); - String getterName = "get" + StringUtils.capitalize(attrName); - if (GeneratorUtil.isNMultiplicity(attr)) { -/*{ tmp.addAll(<%=getterName%>()); -}*/ - } else { -/*{ tmp.add(<%=getterName%>()); -}*/ - } - } - } - } -/*{ - // on refait un tour sur chaque entity de tmp pour recuperer leur - // composite - List<TopiaEntity> result = new ArrayList<TopiaEntity>(); - for (TopiaEntity entity : tmp) { - result.add(entity); - result.addAll(entity.getAggregate()); - } - - return result; - } - - @Override - public List<TopiaEntity> getComposite() throws TopiaException { - List<TopiaEntity> tmp = new ArrayList<TopiaEntity>(); - - // pour tous les attributs rechecher les composites et les class d'asso - // on les ajoute dans tmp -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (attr.referenceClassifier() && attr.getClassifier().hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - if (attr.isComposite()) { - String attrName = attr.getName(); - String getterName = "get" + StringUtils.capitalize(attrName); - if (GeneratorUtil.isNMultiplicity(attr)) { -/*{ if (<%=getterName%>() != null) { - tmp.addAll(<%=getterName%>()); - } -}*/ - } else { -/*{ tmp.add(<%=getterName%>()); -}*/ - } - } else if (attr.hasAssociationClass()) { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); - String ref = "this." + GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ - if (<%=ref%> != null) { - tmp.add(<%=ref%>); - } -}*/ - } else { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - String reverseAttrName = reverse.getName(); - // On utilise pas l'attribut car il est potentiellement - // pas a jour, car pour les asso avec cardinalité - // personne ne fait de add. Ce qui est normal, mais - // pour pouvoir faire tout de meme des delete en cascade - // sur les asso, le champs est dans le mapping - // hibernate et donc il le faut aussi dans la classe - // sinon hibernate rale lorsqu'il charge l'objet -// if (<%=ref%> != null) { -// tmp.addAll(<%=ref%>); -// } -/*{ - { - org.nuiton.topia.persistence.TopiaDAO<<%=assocClassFQN%>> dao = ((TopiaContextImplementor) getTopiaContext()).getDAO(<%=assocClassFQN%>.class); - List<<%=assocClassFQN%>> findAllByProperties = dao.findAllByProperties("<%=reverseAttrName%>", this); - if (findAllByProperties != null) { - tmp.addAll(findAllByProperties); - } - } -}*/ - } - } - } - } -/*{ - // on refait un tour sur chaque entity de tmp pour recuperer leur - // composite - List<TopiaEntity> result = new ArrayList<TopiaEntity>(); - for (TopiaEntity entity : tmp) { - if (entity != null) { - result.add(entity); - result.addAll(entity.getComposite()); - } - } - - return result; - } - -}*/ - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - String attrName = attr.getName(); - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model))) { - continue; - } - if (!GeneratorUtil.isNMultiplicity(attr)) { - if (!attr.hasAssociationClass()) { -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#set<%=StringUtils.capitalize(attrName)%>(<%=attrType%>) - *) - @Override - public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%> value) { - <%=attrType%> _oldValue = this.<%=attrName%>; - fireOnPreWrite("<%=attrName%>", _oldValue, value); - this.<%=attrName%> = value; - fireOnPostWrite("<%=attrName%>", _oldValue, value); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(attrName)%>() - *) - @Override - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>() { - fireOnPreRead("<%=attrName%>", <%=attrName%>); - <%=attrType%> result = this.<%=attrName%>; - fireOnPostRead("<%=attrName%>", <%=attrName%>); - return result; - } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>) - *) - @Override - public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> association) { - <%=assocClassFQN%> _oldValue = this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - fireOnPreWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, association); - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = association; - fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, association); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(assocAttrName)%>() - *) - @Override - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - -}*/ - } - } else { //NMultiplicity - String collectionInterface = TopiaGeneratorUtil.getSimpleName(TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr)); - String collectionObject = TopiaGeneratorUtil.getSimpleName(TopiaGeneratorUtil.getNMultiplicityObjectType(attr)); - if (!attr.hasAssociationClass()) { //Méthodes remplacées par des accesseurs sur les classes d'assoc -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#add<%=StringUtils.capitalize(attrName)%>(<%=attrType%>) - *) - @Override - public void add<%=StringUtils.capitalize(attrName)%>(<%=attrType%> <%=attrName%>) { - fireOnPreWrite("<%=attrName%>", null, <%=attrName%>); - if (this.<%=attrName%> == null) { - this.<%=attrName%> = new <%=collectionObject%><<%=attrType%>>(); - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); - String reverseAttrType = TopiaGeneratorUtil.getSimpleName(reverse.getType()); - if (!GeneratorUtil.isNMultiplicity(reverse)) { -/*{ <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(this); -}*/ - } else { -/*{ if (<%=attrName%>.get<%=StringUtils.capitalize(reverseAttrName)%>() == null) { - <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(new <%=collectionObject%><<%=reverseAttrType%>>()); - } - <%=attrName%>.get<%=StringUtils.capitalize(reverseAttrName)%>().add(this); -}*/ - } - } -/*{ this.<%=attrName%>.add(<%=attrName%>); - fireOnPostWrite("<%=attrName%>", this.<%=attrName%>.size(), null, <%=attrName%>); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#addAll<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>>) - *) - @Override - public void addAll<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>> values) { - if (values == null) { - return; - } - for (<%=attrType%> item : values) { - add<%=StringUtils.capitalize(attrName)%>(item); - } - } -}*/ - if (!isPrimitiveType(attr) && !isDateType(attr)) { -/*{ - /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(attrName)%>ByTopiaId(String) - *) - @Override - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>ByTopiaId(String topiaId) { - return org.nuiton.topia.persistence.util.TopiaEntityHelper.getEntityByTopiaId(<%=attrName%>, topiaId); - } - }*/ - } -/*{ - /* (non-Javadoc) - * @see <%=clazzFQN%>#set<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>>) - *) - @Override - public void set<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>> values) { - <%=collectionInterface%><<%=attrType%>> _oldValue = <%=attrName%>; - fireOnPreWrite("<%=attrName%>", _oldValue, values); - <%=attrName%> = values; - fireOnPostWrite("<%=attrName%>", _oldValue, values); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#remove<%=StringUtils.capitalize(attrName)%>(<%=attrType%>) - *) - @Override - public void remove<%=StringUtils.capitalize(attrName)%>(<%=attrType%> value) { - fireOnPreWrite("<%=attrName%>", value, null); - if ((this.<%=attrName%> == null) || (!this.<%=attrName%>.remove(value))) { - throw new IllegalArgumentException("List does not contain given element"); - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); - if (!GeneratorUtil.isNMultiplicity(reverse)) { -/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(null); -}*/ - } else { -/*{ value.get<%=StringUtils.capitalize(reverseAttrName)%>().remove(this); -}*/ - } - } -/*{ fireOnPostWrite("<%=attrName%>", this.<%=attrName%>.size()+1, value, null); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#clear<%=StringUtils.capitalize(attrName)%>() - *) - @Override - public void clear<%=StringUtils.capitalize(attrName)%>() { - if (this.<%=attrName%> == null) { - return; - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); -/*{ for (<%=attrType%> item : this.<%=attrName%>) { -}*/ - if (!GeneratorUtil.isNMultiplicity(reverse)) { -/*{ item.set<%=StringUtils.capitalize(reverseAttrName)%>(null); -}*/ - } else { -/*{ item.get<%=StringUtils.capitalize(reverseAttrName)%>().remove(this); -}*/ - } -/*{ } -}*/ - } -/*{ <%=collectionInterface%><<%=attrType%>> _oldValue = new <%=collectionObject%><<%=attrType%>>(this.<%=attrName%>); - fireOnPreWrite("<%=attrName%>", _oldValue, this.<%=attrName%>); - this.<%=attrName%>.clear(); - fireOnPostWrite("<%=attrName%>", _oldValue, this.<%=attrName%>); - } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#add<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>) - *) - @Override - public void add<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> value) { - fireOnPreWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", null, value); - if (this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) { - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = new <%=collectionObject%><<%=assocClassFQN%>>(); - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); -/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(this); -}*/ - } -/*{ this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.add(value); - fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size(), null, value); - } -}*/ - if (!isPrimitiveType(attr) && !isDateType(attr)) { -/*{ - /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(attrName)%>ByTopiaId(String) - *) - @Override - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>ByTopiaId(String topiaId) { - return org.nuiton.topia.persistence.util.TopiaEntityHelper.getEntityByTopiaId(<%=assocAttrName%>, topiaId); - } -}*/ - } -/*{ - /* (non-Javadoc) - * @see <%=clazzFQN%>#addAll<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>>() - *) - @Override - public void addAll<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>> values) { - if (values == null) { - return; - } - for (<%=assocClassFQN%> item : values) { - add<%=StringUtils.capitalize(assocAttrName)%>(item); - } - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#set<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>>() - *) - @Override - public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>> values) { -// clear<%=StringUtils.capitalize(assocAttrName)%>(); -// addAll<%=StringUtils.capitalize(assocAttrName)%>(values); -// FIXME - <%=collectionInterface%><<%=assocClassFQN%>> _oldValue = <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - fireOnPreWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, values); - <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = values; - fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, values); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#remove<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>) - *) - @Override - public void remove<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> value) { - fireOnPreWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", value, null); - if ((this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) || (!this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.remove(value))) { - throw new IllegalArgumentException("List does not contain given element"); - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); -/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(null); -}*/ - } -/*{ fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size()+1, value, null); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#clear<%=StringUtils.capitalize(assocAttrName)%>() - *) - @Override - public void clear<%=StringUtils.capitalize(assocAttrName)%>() { - if (this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) { - return; - } -}*/ - if (reverse != null && (reverse.isNavigable() || - hasUnidirectionalRelationOnAbstractType(attr, model))) { - String reverseAttrName = reverse.getName(); -/*{ for (<%=assocClassFQN%> item : this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>) { - item.set<%=StringUtils.capitalize(reverseAttrName)%>(null); - } -}*/ - } -/*{ <%=collectionInterface%><<%=assocClassFQN%>> _oldValue = new <%=collectionObject%><<%=assocClassFQN%>>(this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>); - fireOnPreWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, null); - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.clear(); - fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", _oldValue, null); - } - -}*/ - } - if (!attr.hasAssociationClass()) { -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(attrName)%>() - *) - @Override - public <%=collectionInterface%><<%=attrType%>> get<%=StringUtils.capitalize(attrName)%>() { - return <%=attrName%>; - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#size<%=StringUtils.capitalize(attrName)%>() - *) - @Override - public int size<%=StringUtils.capitalize(attrName)%>() { - if (<%=attrName%> == null) { - return 0; - } - return <%=attrName%>.size(); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#is<%=StringUtils.capitalize(attrName)%>Empty() - *) - @Override - public boolean is<%=StringUtils.capitalize(attrName)%>Empty() { - int size = size<%=StringUtils.capitalize(attrName)%>(); - return size == 0; - } - -}*/ - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName()); -/*{ /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(assocAttrName)%>() - *) - @Override - public <%=collectionInterface%><<%=assocClassFQN%>> get<%=StringUtils.capitalize(assocAttrName)%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#get<%=StringUtils.capitalize(assocAttrName)%>(<%=attrType%>) - *) - @Override - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>(<%=attrType%> value) { - if (value == null || <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) { - return null; - } - for (<%=assocClassFQN%> item : <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>) { - if (value.equals(item.get<%=StringUtils.capitalize(attrName)%>())) { - return item; - } - } - return null; - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#size<%=StringUtils.capitalize(assocAttrName)%>() - *) - @Override - public int size<%=StringUtils.capitalize(assocAttrName)%>() { - if (<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) { - return 0; - } - return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size(); - } - - /* (non-Javadoc) - * @see <%=clazzFQN%>#is<%=StringUtils.capitalize(assocAttrName)%>Empty() - *) - @Override - public boolean is<%=StringUtils.capitalize(assocAttrName)%>Empty() { - int size = size<%=StringUtils.capitalize(assocAttrName)%>(); - return size == 0; - } - -}*/ - } - } - } - - //Méthodes d'accès aux attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType()); - String attrName = attr.getName(); - generateAssociationAccessors(output, attrName, attrType); -// //Ne sert plus à rien normalement avec la navigabilité -// ObjectModelAttribute reverse = attr.getReverseAttribute(); -// if (reverse == null) { -// attrType = ((ObjectModelClassifier)attr.getDeclaringElement()).getQualifiedName(); -// attrName = attr.getDeclaringElement().getName(); -// generateAssociationAccessors(output, attrName, attrType); -// } - } - } - } - boolean doGenerateToString = TopiaGeneratorUtil.generateToString(clazz, model); - if (doGenerateToString) { -/*{ /* (non-Javadoc) - * @see java.lang.Object#toString() - *) - @Override - public String toString() { - String result = new ToStringBuilder(this). -}*/ - for (ObjectModelAttribute attr : clazz.getAttributes()) { - //FIXME possibilité de boucles (non directes) - ObjectModelClass attrEntity = null; - if (model.hasClass(attr.getType())) { - attrEntity = model.getClass(attr.getType()); - } - boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)); - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if ((isEntity && (reverse == null || !reverse.isNavigable()) && !attr.hasAssociationClass()) || (!isEntity)) { - String attrName = attr.getName(); -/*{ append("<%=attrName%>", this.<%=attrName%>). -}*/ - } - } -/*{ toString(); - return result; - } -}*/ - } - String i18nPrefix = TopiaGeneratorUtil.getI18nPrefix(clazz, model); - if (i18nPrefix != null) { - // generate i18n prefix - generateI18n(output, i18nPrefix, clazz); - } -/*{ -} //<%=clazzName%>Abstract -}*/ - } - - private void generateAssociationAccessors(Writer output, String name, String type) throws IOException { -/*{ /** - * @param value La valeur de l'attribut <%=name%> à positionner. - *) - @Override - public void set<%=StringUtils.capitalize(name)%>(<%=type%> value) { - <%=type%> _oldValue = this.<%=GeneratorUtil.toLowerCaseFirstLetter(name)%>; - fireOnPreWrite("<%=name%>", _oldValue, value); - this.<%=GeneratorUtil.toLowerCaseFirstLetter(name)%> = value; - fireOnPostWrite("<%=name%>", _oldValue, value); - } - - /** - * @return La valeur de l'attribut <%=name%>. - *) - @Override - public <%=type%> get<%=StringUtils.capitalize(name)%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(name)%>; - } - -}*/ - } - - private void generateI18n(Writer output, String i18nPrefix, ObjectModelClass clazz) throws IOException { -/*{ - static { -}*/ - StringBuilder buffer = new StringBuilder(); - addI18n(buffer, i18nPrefix, java.beans.Introspector.decapitalize(clazz.getName())); - for (ObjectModelAttribute attr : clazz.getAttributes()) { - addI18n(buffer, i18nPrefix, java.beans.Introspector.decapitalize(attr.getName())); - } -/*{<%=buffer.toString()%>} -}*/ - } - - private void addI18n(StringBuilder buffer, String i18nPrefix, String suffix) { - buffer.append(" org.nuiton.i18n.I18n.n_(\"").append(i18nPrefix).append(suffix).append("\");\n"); - } - -} //EntityAbstractGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -51,10 +51,8 @@ * Created: 14 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityAbstractTransformer" */ public class EntityAbstractTransformer extends ObjectModelTransformerToJava { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,342 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityAbstractGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import org.nuiton.eugene.models.object.*; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.TAG_ANNOTATION; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Iterator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.GeneratorUtil; - -// do not remove me -import org.apache.commons.lang.StringUtils; -/** - * 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. - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link EntityDTOTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityDTOGenerator" - */ -@Deprecated -public class EntityDTOGenerator extends ObjectModelGenerator { - - /** - * Logger for this class - */ - private static final Log log = LogFactory.getLog(EntityDTOGenerator.class); - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "DTO.java"; - } - - public boolean isEntity(String type) { - ObjectModelClassifier clazz = model.getClassifier(type); - return clazz != null && clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY); - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); -/*{package <%=clazz.getPackageName()%>; - -import org.apache.commons.lang.builder.ToStringBuilder; -import java.beans.PropertyChangeListener; - -/** - * Implantation DTO pour l'entité <%=StringUtils.capitalize(clazzName)%>. - *) -}*/ - String extendClass = ""; - for (Iterator<ObjectModelClass> i=clazz.getSuperclasses().iterator(); i.hasNext();) { - ObjectModelClass parent = i.next(); - extendClass += parent.getQualifiedName() + "DTO"; - if (i.hasNext()) { - extendClass += ", "; - } - } - if (extendClass.length() > 0) { - extendClass = "extends " + extendClass + " "; - } - -/*{public class <%=clazzName%>DTO <%=extendClass%>implements java.io.Serializable { - -}*/ - - String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model); - if (svUID != null) { -/*{ public static final long serialVersionUID = <%=svUID%>; - -}*/ - } - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - // pour les asso quoi qu'il arrive il faut les lier des 2 cotes - // pour pouvoir supprimer en cascade l'asso lors de la suppression - // d'un des cotes - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model) - || attr.hasAssociationClass())) { - continue; - } - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ /** - * <%=attr.getDocumentation()%> - *) -}*/ - } - if (attr.hasTagValue(TAG_ANNOTATION)) { - String annotation = attr.getTagValue(TAG_ANNOTATION); -/*{ <%=annotation%> -}*/ - } - - String attrVisibility = attr.getVisibility(); - if (!attr.hasAssociationClass()) { - String attrType = attr.getType(); - String attrName = attr.getName(); - if (isEntity(attrType)) { - attrType += "DTO"; - } - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ <%=attrVisibility%> <%=attrType%> <%=attrName%>; - -}*/ - } else { -/*{ <%=attrVisibility%> <%=attrType%>[] <%=attrName%>; - -}*/ - } - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ <%=attrVisibility%> <%=assocClassFQN%>DTO <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - -}*/ - } else { -/*{ <%=attrVisibility%> <%=assocClassFQN%>DTO[] <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - -}*/ - } - } - } - - //Déclaration des attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrVisibility = attr.getVisibility(); - String attrType = attr.getType(); - String attrName = attr.getName(); - if (isEntity(attrType)) { - attrType += "DTO"; - } -/*{ <%=attrVisibility%> <%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>; - -}*/ - } - } - } - -/*{ - protected java.beans.PropertyChangeSupport p; - -}*/ - -/*{ /** - * Constructeur de <%=clazzName%>DTO par défaut. - *) - public <%=clazzName%>DTO() { p = new java.beans.PropertyChangeSupport(this); } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - p.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - p.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - p.removePropertyChangeListener(propertyName, listener); - } - -}*/ - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model))) { - continue; - } - String attrName = attr.getName(); - - if (!attr.hasAssociationClass()) { - String attrType = attr.getType(); - if (isEntity(attrType)) { - attrType += "DTO"; - } - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%> value) { - <%=attrType%> oldValue = this.<%=attrName%>; - this.<%=attrName%> = value; - p.firePropertyChange("<%=attrName%>", oldValue, value); - } - - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>() { - return <%=attrName%>; - } - -}*/ - } else { -/*{ public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%>[] values) { - <%=attrType%>[] oldValues = this.<%=attrName%>; - this.<%=attrName%> = values; - p.firePropertyChange("<%=attrName%>", oldValues, values); - } - - public <%=attrType%>[] get<%=StringUtils.capitalize(attrName)%>() { - return this.<%=attrName%>; - } - -}*/ - } - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>DTO association) { - <%=assocClassFQN%>DTO oldAssocation= this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = association; - p.firePropertyChange("<%=attrName%>", oldAssocation, assocation); - } - - public <%=assocClassFQN%>DTO get<%=StringUtils.capitalize(assocAttrName)%>() { - return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - -}*/ - } else { -/*{ public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%>DTO[] values) { - <%=assocClassFQN%>DTO[] oldValues = this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> = values; - p.firePropertyChange("<%=attrName%>", oldValues, values); - } - - public <%=assocClassFQN%>DTO[] get<%=StringUtils.capitalize(assocAttrName)%>() { - return this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; - } - -}*/ - } - } - - } - -/*{ - @Override - public String toString() { - String result = new ToStringBuilder(this). -}*/ - for (Object o : clazz.getAttributes()) { - ObjectModelAttribute attr = (ObjectModelAttribute) o; - //FIXME possibilité de boucles (non directes) - ObjectModelClass attrEntity = null; - if (model.hasClass(attr.getType())) { - attrEntity = model.getClass(attr.getType()); - } - boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)); - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if ((isEntity && (reverse == null || !reverse.isNavigable()) && !attr.hasAssociationClass()) || (!isEntity)) { - String attrName = attr.getName(); -/*{ append("<%=attrName%>", this.<%=attrName%>). -}*/ - } - } -/*{ toString(); - return result; - } - -} //<%=clazzName%>DTO -}*/ - } - - //TODO Check wether this method could be used to generate getter and setters - protected void generateNormalGetterAndSetterWithPropertyChangeSupport(Writer output, String attrType, String attrName) throws IOException { -/*{ public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%> value) { - <%=attrType%> _oldValue = this.<%=attrName%>; - this.<%=attrName%> = value; - p.firePropertyChange("<%=attrName%>", _oldValue, value); - } - - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>() { - return this.<%=attrName%>; - } - -}*/ - } - -} //EntityDTOGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -45,10 +45,8 @@ * Created: 14 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityDTOTransformer" */ public class EntityDTOTransformer extends ObjectModelTransformerToJava { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -65,8 +65,10 @@ import org.apache.commons.lang.BooleanUtils; /** - * FIXME mettre les attributs node="..." sur tous les attributs + * FIXME-poussin-20060102 mettre les attributs node="..." sur tous les attributs + * * @author poussin <poussin@codelutin.com> + * @version $Id$ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityHibernateMappingGenerator" */ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,161 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityPOJOGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Collection; - -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * - * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : - * {@link EntityImplTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityImplGenerator" - */ -@Deprecated -public class EntityImplGenerator extends ObjectModelGenerator { - - private static final Log log = LogFactory.getLog(EntityImplGenerator.class); - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + "Impl.java"; - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - // On ne génère pas le impl si l'entité a des opérations qui ne sont pas seulement pour le DAO - if (clazz.getOperations().size() > 0 && !hasOnlyDAOOperations(clazz)) { - return; - } - //De même, on ne génère pas le impl si il y a des opérations venant des - // superclasses non implémentées - for (ObjectModelOperation otherOp : clazz.getAllOtherOperations(false)) { - if (otherOp.isAbstract()) { - return; - } - } - - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } - String clazzName = clazz.getName(); - String clazzFQN = clazz.getQualifiedName(); - String abstractStr = isAbstract(clazz)?"abstract ":" "; -/*{package <%=clazz.getPackageName()%>; - -import java.io.Serializable; - -/** - * Implantation des operations pour l'entité <%=TopiaGeneratorUtil.capitalize(clazz.getName())%>. - *) -public <%=abstractStr%>class <%=clazzName%>Impl extends <%=clazzFQN%>Abstract implements Serializable, <%=clazzFQN%> { - - private static final long serialVersionUID = 1L; - -}*/ - -/*{} //<%=clazzName%>Impl -}*/ - } - - protected boolean isAbstract(ObjectModelClass clazz) { - if (clazz.isAbstract()) { - return true; - } - - //Une classe peut être abstraite si elle a des méthodes définies dans - // ses superinterface et non implantées dans ses superclasses - Collection<ObjectModelOperation> allInterfaceOperations = clazz.getAllInterfaceOperations(true); - allInterfaceOperations.removeAll(clazz.getAllOtherOperations(true)); - for (ObjectModelOperation op : allInterfaceOperations) { - boolean implementationFound = false; - for (ObjectModelClass superClazz : clazz.getSuperclasses()) { - for (ObjectModelOperation matchingOp : superClazz.getOperations(op.getName())) { - implementationFound = (op.equals(matchingOp) && !matchingOp.isAbstract()); - if (implementationFound) { - break; - } - } - if (implementationFound) { - break; - } - } - if (!implementationFound) { - log.info(clazz.getName()+" : abstract operation "+op); - return true; - } - } - return false; - } - - /** - * Detect if the clazz has only operations for DAO implementation. - * These operations are identified with the stereotype <<dao>>. - * @param clazz The ObjectModelClass with all operations. - * @return true if there is only dao operations, false if there is no operations or some without - * dao stereotype. - */ - public static boolean hasOnlyDAOOperations(ObjectModelClass clazz) { - boolean res = true; - Collection<ObjectModelOperation> operations = clazz.getOperations(); - if (operations.size() == 0) { - res = false; - } - for (ObjectModelOperation op : operations) { - res &= op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO); - } - return res; - } - -} //EntityImplGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -38,10 +38,8 @@ * Created: 14 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityImplTransformer" */ public class EntityImplTransformer extends ObjectModelTransformerToJava { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,567 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/* * -* EntityGenerator.java -* -* Created: 12 déc. 2005 -* -* @author Arnaud Thimel <thimel@codelutin.com> -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ - -package org.nuiton.topia.generator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.Transformer; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.GeneratorUtil; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.ObjectModelParameter; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isBooleanType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isNumericType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isTextType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isPrimitiveType; -import static org.nuiton.topia.generator.TopiaGeneratorUtil.isDateType; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -// do not remove me :) -import org.apache.commons.lang.StringUtils; - -/** - * - * @deprecated since 2.3.0, prefer use the corresponding {@link Transformer} : - * {@link EntityInterfaceTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityInterfaceGenerator" - */ -@Deprecated -public class EntityInterfaceGenerator extends ObjectModelGenerator { - - /** Logger for this class */ - private static final Log log = LogFactory.getLog(EntityInterfaceGenerator.class); - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; - } - - @Override - public String getFilenameForInterface(ObjectModelInterface interfacez) { - return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java"; - } - - //TC-20091214 : never used : always generate from a <<entity>> class -// @Override -// public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException { -// if (!interfacez.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { -// return; -// } -// -// if (log.isDebugEnabled()) { -// log.debug("Generating interface for : " + interfacez.getName()); -// } -// -// generateInterfaceHeaderFromClassifier(output, interfacez); -// -// generateInterfaceOperations(output, interfacez); -// -///{} //<%=interfacez.getName()%> -//}*/ -// } - - private String getStringRepresentation(List<String> strings) { - StringBuffer result = new StringBuffer(); - String doubleQuote = "\""; - String comma = ","; - Iterator<String> it = strings.iterator(); - while (it.hasNext()) { - result.append(doubleQuote); - result.append(it.next()); - result.append(doubleQuote); - if (it.hasNext()) { - result.append(comma); - } - } - return result.toString(); - } - - private void generateSearchFields(Writer output, ObjectModelClass clazz) throws IOException { - List<String> txtFields = new ArrayList<String>(); - List<String> numFields = new ArrayList<String>(); - List<String> boolFields = new ArrayList<String>(); - List<String> dateFields = new ArrayList<String>(); - List<ObjectModelAttribute> allAttrs = new ArrayList<ObjectModelAttribute>(); - allAttrs.addAll(clazz.getAttributes()); - allAttrs.addAll(clazz.getAllOtherAttributes()); - boolean needAnnotation = false; - for (ObjectModelAttribute attr : allAttrs) { - String name = GeneratorUtil.toLowerCaseFirstLetter(attr.getName()); - if (isTextType(attr)) { - txtFields.add(name); - needAnnotation = true; - } else if (isNumericType(attr)) { - numFields.add(name); - needAnnotation = true; - } else if (isBooleanType(attr)) { - boolFields.add(name); - needAnnotation = true; - } else if (isDateType(attr)) { - dateFields.add(name); - needAnnotation = true; - } - } -/*{@SearchFields (}*/ - if (needAnnotation) { - StringBuilder buffer = new StringBuilder(); - if (!txtFields.isEmpty()) { - buffer.append("\n txtFields={").append(getStringRepresentation(txtFields)).append("}"); - if (!numFields.isEmpty() || !boolFields.isEmpty() || !dateFields.isEmpty()) { - buffer.append(","); - } - } - if (!numFields.isEmpty()) { - buffer.append("\n numFields={").append(getStringRepresentation(numFields)).append("}"); - if (!boolFields.isEmpty() || !dateFields.isEmpty()) { - buffer.append(","); - } - } - if (!boolFields.isEmpty()) { - buffer.append("\n boolFields={").append(getStringRepresentation(boolFields)).append("}"); - if (!dateFields.isEmpty()) { - buffer.append(","); - } - } - if (!dateFields.isEmpty()) { - buffer.append("\n dateFields={").append(getStringRepresentation(dateFields)).append("}"); - } -/*{<%=buffer.toString()%> -}*/ - } -/*{) -}*/ - } - - private void generateInterfaceHeaderFromClassifier(Writer output, ObjectModelClassifier classifier) throws IOException { - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } -/*{package <%=classifier.getPackageName()%>; - -import org.nuiton.topia.persistence.SearchFields; -import org.nuiton.topia.persistence.TopiaEntity; - -}*/ - if (TopiaGeneratorUtil.hasDocumentation(classifier)) { - String documentation = classifier.getDocumentation(); -/*{ -/** - * <%=documentation%> - *) -}*/ - } - // - if (classifier instanceof ObjectModelClass) { - generateSearchFields(output, (ObjectModelClass) classifier); - } - String classifierName = classifier.getName(); -/*{public interface <%=classifierName%> extends }*/ - String extendClass = ""; - for (ObjectModelClassifier parent : classifier.getInterfaces()) { - extendClass += parent.getQualifiedName(); - extendClass += ", "; - } - if (classifier instanceof ObjectModelClass) { - ObjectModelClass clazz = (ObjectModelClass) classifier; - for (ObjectModelClassifier parent : clazz.getSuperclasses()) { - if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - extendClass += parent.getQualifiedName(); - } - extendClass += ", "; - } - } - -/*{<%=extendClass%>TopiaEntity { - -}*/ - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { - return; - } - String clazzName = clazz.getName(); - generateInterfaceHeaderFromClassifier(output, clazz); - - generateStaticColumnNames(output, clazz); - - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if (!attr.isNavigable() - && !hasUnidirectionalRelationOnAbstractType(reverse, model)) { - continue; - } - - String attrName = attr.getName(); - String attrType = attr.getType(); - if (!attr.hasAssociationClass()) { - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @param <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%> La valeur de l'attribut <%=attrName%> à positionner. - *) - public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>); - -}*/ -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @return La valeur de l'attribut <%=attrName%>. - *) - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>(); - -}*/ - } else { - String collectionInterface = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr); -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @param <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%> L'instance de <%=attrName%> à ajouter. - *) - public void add<%=StringUtils.capitalize(attrName)%>(<%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>); - - /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @param <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%> Les instances de <%=attrName%> à ajouter. - *) - public void addAll<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>); - - /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @param <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%> La Collection de <%=attrName%> à positionner. - *) - public void set<%=StringUtils.capitalize(attrName)%>(<%=collectionInterface%><<%=attrType%>> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>); - - /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @param <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%> L'instance de <%=attrName%> à retirer. - *) - public void remove<%=StringUtils.capitalize(attrName)%>(<%=attrType%> <%=GeneratorUtil.toLowerCaseFirstLetter(attrName)%>); - - /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * Vide la Collection de <%=attrName%>. - *) - public void clear<%=StringUtils.capitalize(attrName)%>(); - -}*/ - -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(attr)) { -/*{ * <%=attrName%> : <%=attr.getDocumentation()%> -}*/ - } -/*{ * @return La Liste de <%=attrName%>. - *) - public <%=collectionInterface%><<%=attrType%>> get<%=StringUtils.capitalize(attrName)%>(); - -}*/ - if (!isPrimitiveType(attr) && !isDateType(attr)) { -/*{ - /** - * Recupère l'attribut <%=attrName%> à partir de son topiaId. - * - * @param topiaId le topia id de l'entité recherchée - * - * @return l'attribut recherché, ou <code>null</code> s'il n'existe pas. - *) - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>ByTopiaId(String topiaId); - }*/ - } -/*{ - /** - * @return Le nombre d'éléments de la collection <%=attrName%>. - *) - public int size<%=StringUtils.capitalize(attrName)%>(); - - /** - * @return <code>true</code> si la collection <%=attrName%> est vide. - *) - public boolean is<%=StringUtils.capitalize(attrName)%>Empty(); - -}*/ - - } - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - String assocClassFQN = attr.getAssociationClass().getQualifiedName(); - String assocClassName = attr.getAssociationClass().getName(); - if (!GeneratorUtil.isNMultiplicity(attr)) { -/*{ /** - * @param <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> La valeur de l'attribut <%=assocClassName%> à positionner. - *) - public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>); - - /** - * @return La valeur de l'attribut <%=assocClassName%>. - *) - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>(); - -}*/ - } else { - String collectionInterface = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr); -/*{ /** - * @param <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> L'instance de <%=assocClassName%> à ajouter. - *) - public void add<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>); - - /** - * @param <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> Les instances de <%=assocClassName%> à ajouter. - *) - public void addAll<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>> <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>); - - /** - * @param <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> La Collection de <%=assocClassName%> à positionner. - *) - public void set<%=StringUtils.capitalize(assocAttrName)%>(<%=collectionInterface%><<%=assocClassFQN%>> <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>); - - /** - * @param <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%> L'instance de <%=assocClassName%> à retirer. - *) - public void remove<%=StringUtils.capitalize(assocAttrName)%>(<%=assocClassFQN%> <%=GeneratorUtil.toLowerCaseFirstLetter(assocClassName)%>); - - /** - * Vide la Collection de <%=assocClassName%>. - *) - public void clear<%=StringUtils.capitalize(assocAttrName)%>(); - - /** - * @return La liste des attributs <%=assocClassName%>. - *) - public <%=collectionInterface%><<%=assocClassFQN%>> get<%=StringUtils.capitalize(assocAttrName)%>(); -}*/ - if (!isPrimitiveType(attr) && !isDateType(attr)) { -/*{ - /** - * Recupère l'attribut <%=attrName%> à partir de son topiaId. - * - * @param topiaId le topia id de l'attribut recherchée - * - * @return l'attribut recherché, ou <code>null</code> s'il n'existe pas. - *) - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>ByTopiaId(String topiaId); -}*/ - } -/*{ - /** - * @return L'attribut <%=assocClassName%> associé à la valeur <code>value</code> de l'attribut <%=attrName%>. - *) - public <%=assocClassFQN%> get<%=StringUtils.capitalize(assocAttrName)%>(<%=attrType%> value); - - /** - * @return Le nombre d'éléments de la collection <%=attrName%>. - *) - public int size<%=StringUtils.capitalize(assocAttrName)%>(); - - /** - * @return <code>true</code> si la collection <%=assocAttrName%> est vide. - *) - public boolean is<%=StringUtils.capitalize(assocAttrName)%>Empty(); -}*/ - - } - } - } - - //Méthodes d'accès aux attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String type = attr.getType(); - String name = attr.getName(); - generateAssociationAccessors(output, name, type); - if (attr.getReverseAttribute() == null) { - type = ((ObjectModelClassifier) attr.getDeclaringElement()).getQualifiedName(); - name = attr.getDeclaringElement().getName(); - generateAssociationAccessors(output, name, type); - } - } - } - } - - generateInterfaceOperations(output, clazz); - -/*{} //<%=clazzName%> -}*/ - } - - private void generateInterfaceOperations(Writer output, ObjectModelClassifier classifier) throws IOException { - for (ObjectModelOperation op : classifier.getOperations()) { - // Pas de génération des signatures de méthodes pour celles à intégrer au DAO de l'entité - if (!op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { - String opName = op.getName(); -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(op)) { - String opDocumentation = op.getDocumentation(); -/*{ * <%=opName%> : <%=opDocumentation%> -}*/ - } - Collection<ObjectModelParameter> params = op.getParameters(); - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramDocumentation = param.getDocumentation(); -/*{ * @param <%=paramName%> <%=paramDocumentation%> - }*/ - } - String opVisibility = op.getVisibility(); - String opType = op.getReturnType(); -/*{ *) - <%=opVisibility%> <%=opType%> <%=opName%>(}*/ - String comma = ""; - for (ObjectModelParameter param : params) { - String paramName = param.getName(); - String paramType = param.getType(); -/*{<%=comma%><%=paramType%> <%=paramName%>}*/ - comma = ", "; - } -/*{)}*/ - Set<String> exceptions = op.getExceptions(); - comma = " throws "; - for (String exception : exceptions) { -/*{<%=comma%><%=exception%>}*/ - comma = ", "; - } -/*{; - -}*/ - } - } - } - - private void generateAssociationAccessors(Writer output, String attrName, String attrType) throws IOException { -/*{ /** - * @param value La valeur de l'attribut <%=attrName%> à positionner. - *) - public void set<%=StringUtils.capitalize(attrName)%>(<%=attrType%> value); - - /** - * @return La valeur de l'attribut <%=attrName%>. - *) - public <%=attrType%> get<%=StringUtils.capitalize(attrName)%>(); - -}*/ - } - - private void generateStaticColumnNames(Writer output, ObjectModelClass clazz) throws IOException { - for (ObjectModelAttribute attr : clazz.getAttributes()) { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - if (!(attr.isNavigable() - || hasUnidirectionalRelationOnAbstractType(reverse, model) - || attr.hasAssociationClass())) { - continue; - } - String attrName; - if (!attr.hasAssociationClass()) { - attrName = attr.getName(); - } else { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); - attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); - } - String attrColName = TopiaGeneratorUtil.convertVariableNameToConstantName(attrName); - //String attrColName = attrName.toUpperCase(); -/*{ public static final String <%=attrColName%> = "<%=attrName%>"; - -}*/ - } - - //Déclaration des noms des champs des attributs d'une classe d'associations - if (clazz instanceof ObjectModelAssociationClass) { - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { - if (attr != null) { - String attrName = attr.getName(); - String attrColName = TopiaGeneratorUtil.convertVariableNameToConstantName(attrName); - //String attrColName = attrName.toUpperCase(); -/*{ public static final String <%=attrColName%> = "<%=attrName%>"; - -}*/ - } - } - } - } - -} //EntityGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -45,10 +45,8 @@ * Created: 14 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.EntityInterfaceTransformer" */ public class EntityInterfaceTransformer extends ObjectModelTransformerToJava { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,187 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -/*{generator option: parentheses = true}*/ -/*{generator option: writeString = output.write}*/ - -/** - * InterfaceGenerator.java - * - * Created: 12 déc. 2005 - * - * @author Arnaud Thimel <thimel@codelutin.com> - * @version $Revision$ - * - * Mise a jour: $Date$ - * par : $Author$ - * @deprecated since 2.3.0, use {@link InterfaceTransformer} instead - */ - -package org.nuiton.topia.generator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.Transformer; -import org.nuiton.eugene.models.object.*; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.Collection; -import java.util.Set; - - -/** - * - * @deprecated since 2.3.0, prefer use the corresponding {@link Transformer} : - * {@link InterfaceTransformer}. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.InterfaceGenerator" - */ -@Deprecated -public class InterfaceGenerator extends ObjectModelGenerator { //InterfaceGenerator - - /** Logger for this class */ - private static final Log log = LogFactory.getLog(InterfaceGenerator.class); - - @Override - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; - } - - @Override - public String getFilenameForInterface(ObjectModelInterface interfacez) { - return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java"; - } - - @Override - public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException { - if (!interfacez.getStereotypes().isEmpty()) { - // can only generate an interface with there is no other stereotypes - return; - } - - // log - if (log.isDebugEnabled()) { - log.debug("Generating interface for : " + interfacez.getName()); - } - - String interfacezName = interfacez.getName(); - - generateInterfaceHeader(output, interfacez); - - generateInterfaceOperations(output, interfacez); - -/*{} //<%=interfacezName%> -}*/ - } - - private void generateInterfaceHeader(Writer output, ObjectModelInterface interfacez) throws IOException { - String copyright = TopiaGeneratorUtil.getCopyright(model); - if (TopiaGeneratorUtil.notEmpty(copyright)) { -/*{<%=copyright%> -}*/ - } -/*{package <%=interfacez.getPackageName()%>; - -}*/ - if (TopiaGeneratorUtil.hasDocumentation(interfacez)) { - String documentation = interfacez.getDocumentation(); -/*{ -/** - * <%=documentation%> - *) -}*/ - } - String interfacezName = interfacez.getName(); -/*{public interface <%=interfacezName%> }*/ - String extendClass = ""; - if (!interfacez.getInterfaces().isEmpty()) { - for (ObjectModelClassifier parent : interfacez.getInterfaces()) { - extendClass += parent.getQualifiedName(); - extendClass += ", "; - } - if (log.isTraceEnabled()) { - log.trace("Interface : " + extendClass); - } - -/*{ extends <%=extendClass%> { - -}*/ - } -/*{ { -}*/ - } - - private void generateInterfaceOperations(Writer output, ObjectModelClassifier classifier) throws IOException { - for (ObjectModelOperation op : classifier.getOperations()) { -/*{ /** -}*/ - if (TopiaGeneratorUtil.hasDocumentation(op)) { - String documentation = op.getDocumentation(); -/*{ * <%=documentation%> -}*/ - } - Collection<ObjectModelParameter> params = op.getParameters(); - for (ObjectModelParameter param : params) { - if (log.isTraceEnabled()) { - log.trace("Param" + param); - } - String paramName = param.getName(); - String paramDocumentation = param.getDocumentation(); -/*{ * @param <%=paramName%> <%=paramDocumentation%> - }*/ - } - String opVisibility = op.getVisibility(); - String opType = op.getReturnType(); - String opName = op.getName(); -/*{ *) - <%=opVisibility%> <%=opType%> <%=opName%>(}*/ - String comma = ""; - for (ObjectModelParameter param : params) { - if (log.isTraceEnabled()) { - log.trace("Param" + param + " comma" + comma); - } - String paramName = param.getName(); - String paramType = param.getType(); -/*{<%=comma%><%=paramType%> <%=paramName%>}*/ - comma = ", "; - } -/*{)}*/ - Set<String> exceptions = op.getExceptions(); - comma = " throws "; - for (String exception : exceptions) { - if (log.isTraceEnabled()) { - log.trace("exception" + exception + " vir" + comma); - } -/*{<%=comma%><%=exception%>}*/ - comma = ", "; - } -/*{; - -}*/ - } - } - -} //InterfaceGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -41,11 +41,8 @@ * * Created: 7 nov. 2009 * - * @author fdesbois - * @version $Revision$ - * - * Mise a jour: $Date$ - * par : $Author$ + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id$ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.InterfaceTransformer" * @deprecated since 2.4 use {@link org.nuiton.eugene.java.JavaInterfaceTransformer} instead */ Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -174,20 +174,19 @@ * to specify that all contract methods will throw this exception.</p> * </div> * <p>It is smooth, isn't it :p ?</p> - * <p>TODO : may be refactor to integrate JTA or webservice or may be not in this - * transformer.</p> - * <p>TODO : find a good way to change log level</p> + * <p> + * TODO : may be refactor to integrate JTA or webservice or may be not in this transformer. + * </p> + * <p> + * TODO : find a good way to change log level + * </p> * * Created: 23 mars 2010 * - * @author fdesbois - * @version $Revision$ - * - * Mise a jour: $Date$ - * par : $Author$ - * - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.ServiceTransformer" + * @author fdesbois <fdesbois@codelutin.com> + * @version $Id$ * @since 2.3.1 + * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.ServiceTransformer" */ public class ServiceTransformer extends ObjectModelTransformerToJava { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -55,6 +55,12 @@ /** * Classe regroupant divers méthodes utiles pour la génération des entités + * + * @author tchemit <tchemit@codelutin.com> + * @author fdesbois <fdesbois@codelutin.com> + * @author chatellier <chatellier@codelutin.com> + * @author thimel <thimel@codelutin.com> + * @version $Id$ */ public class TopiaGeneratorUtil extends JavaGeneratorUtil { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -39,11 +39,8 @@ * - les nom des attributs * - les duplication d'attibuts * - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ + * @author chatellier <chatellier@codelutin.com> + * @version $Id$ */ public class TopiaJavaValidator extends ObjectModelValidator { Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,184 +0,0 @@ -/* - * #%L - * ToPIA :: Persistence - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - - -/******************************************************************************* - * ObjectModelToEntityGenerator.java - * - * Created: 3 juil. 2004 - * - * @author Grégoire DESSARD <dessard@codelutin.com> Copyright Code Lutin, Grégoire - * Dessard - * - * @version $Revision$ - * - * Mise a jour: $Date$ par : $Author$ - */ - -package org.nuiton.topia.generator; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.AbstractGenerator; -import org.nuiton.eugene.models.object.ObjectModelGenerator; -import org.nuiton.eugene.Template; -import org.nuiton.eugene.Transformer; -import org.nuiton.eugene.models.object.ObjectModel; -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.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import org.nuiton.eugene.models.object.ObjectModelClass; - -/** - * 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. - * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.TopiaMetaGenerator" - * @deprecated since 2.3.0, prefer use the corresponding {@link Transformer} : {@link TopiaMetaTransformer}. - */ -@Deprecated -public class TopiaMetaGenerator extends ObjectModelGenerator { - - protected static Log log = LogFactory.getLog(TopiaMetaGenerator.class); - - /** - * la liste des generateurs par defaut a utiliser - */ - protected static final List<Class<? extends ObjectModelGenerator>> DEFAULT_GENERATORS = Collections - .unmodifiableList(Arrays.asList( - EntityInterfaceGenerator.class, - EntityAbstractGenerator.class, - EntityImplGenerator.class, - EntityHibernateMappingGenerator.class, - DAOGenerator.class, - DAOImplGenerator.class, - DAOAbstractGenerator.class, - DAOHelperGenerator.class - )); - - protected boolean validateModel(ObjectModel model) { - List<ObjectModelValidator> validators = new ArrayList<ObjectModelValidator>(); - - AttributeNamesValidator attrValidator = new AttributeNamesValidator( - model); - 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)); - - boolean isValid = true; - for (ObjectModelValidator validator : validators) { - if (!validator.validate()) { - for (String error : validator.getErrors()) { - log.info("[VALIDATION] " + error); - } - isValid = false; - } - } - return isValid; - } - - @Override - public void applyTemplate(ObjectModel model, File destDir) throws IOException { - - //On n'empeche pas la génération si le modèle n'est pas valide - validateModel(model); - - // test before all if there is some entities to generate - List<ObjectModelClass> classes = TopiaGeneratorUtil.getEntityClasses(model, true); - - if (classes.isEmpty()) { - // no entity to generate, can stop safely - log.warn("no entity to generate, " + getClass().getName() + " is skipped"); - return; - } - - generatePersistence(model, destDir); - } - - public void generatePersistence(ObjectModel model, File destDir) - throws IOException { - for (Class<? extends Template<ObjectModel>> generatorClass : DEFAULT_GENERATORS) { - Template<ObjectModel> generator; - if (getExcludeTemplates().contains(generatorClass.getName())) { - // exclude generator - log.info("exclude generator " + generatorClass); - continue; - } - try { - - generator = generatorClass.newInstance(); - - // init generator - - if (generator instanceof AbstractGenerator) { - ((AbstractGenerator<ObjectModel>)generator).setParent(this); - } - if (generator instanceof Transformer) { - generator.setProperties(properties); - } - } catch (Exception e) { - // should never happens - if(log.isErrorEnabled()) { - log.error("An error occurs when generating persistence", e); - } - throw new RuntimeException(e); - } - - // log - if(log.isDebugEnabled()) { - log.debug("call template : " + generatorClass.getSimpleName()); - } - generator.applyTemplate(model, destDir); - } - } - -} //TopiaMetaGenerator Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaTransformer.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaTransformer.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -41,10 +41,8 @@ * Created: 20 déc. 2009 * * @author Tony Chemit <chemit@codelutin.com> Copyright Code Lutin - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ par : - * $Author$ + * @version $Id$ + * @since 2.3.0 * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.topia.generator.TopiaMetaTransformer" */ public class TopiaMetaTransformer extends AbstractMetaTransformer<ObjectModel> { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaRelationValidator.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaRelationValidator.java 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaRelationValidator.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -51,6 +51,9 @@ * sous-classes dans le modèle est incompatibe avec Hibernate</li> * <li>Toutes les relations ont des reverseAttribute</li> * </ul> + * + * @author + * @version $Id$ */ public class TopiaRelationValidator extends ObjectModelValidator { Added: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package-info.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package-info.java (rev 0) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package-info.java 2010-05-07 16:34:39 UTC (rev 1936) @@ -0,0 +1,94 @@ +/** + * TODO-FD20100507 : Need update this javadoc for ToPIA 2.4 + * + * <h1>Les Générateurs</h1> + * + * <h2>TopiaMetaGenerator</h2> + * + * <p>TopiaMetaGenerator permet d'enchainer les différents + * générateurs.</p> + * + * <h2>Les DAO</h2> + * + * <p>Il il y a trois générateurs pour les DAO</p> + * + * <ul> + * <li>DAOHelperGenerator</li> + * + * <li>DAOAbstractGenerator</li> + * + * <li>DAOGenerator</li> + * </ul> + * + * <p><b><i>DAOHelperGenerator</i></b> permet de récupérer les DAOs + * générés spécifiquement pour l'application sans avoir besoin de passer + * le type de l'entité en paramètre. Cette classe contient donc une + * methode get par type d'entity qui permet de récupérer le DAO associé. + * Ces méthodes sont des méthodes statiques et prennent en paramètre un + * TopiaContext.</p> + * + * <p><b><i>DAOAbstractGenerator</i></b> est une classe abstraite même si + * elle peut implanter toutes les méthodes de l'interface TopiaDAO. De + * cette façon on oblige l'existance d'une classe concrète qui en hérite + * soit développé par le développeur soit généré par DAOGenerator. + * DAOAbstractGenerator contient toutes les méthodes findBy, findAllBy, + * ... associées aux attributs existants. La classe généré hérite + * directement ou indirectement de TopiaDAODelegator.</p> + * + * <p><b><i>DAOGenerator</i></b> génère une classe vide qui permet au + * programme de compiler, si le développeur à besoin de méthode find + * supplémentaire sur son DAO, il lui suffit de d'implanter cette classe + * dans ses sources, le processus de génération écrasera alors la classe + * généré par la classe développée spécifiquement.</p> + * + * <h2>Les entités</h2> + * + * <p>Les entités sont de pure POJO et ne contiennent pas de référence en + * interne sur le TopiaContext ou le DAO qui les à créée, elle peuvent + * donc facilement migrer, être utilisé dans différents context, ... le + * but etant qu'elle reste des classes complètement déconnecté à + * l'exécution du framework.</p> + * + * <p>La seul contrainte est qu'elles implante TopiaEntity</p> + * + * <p>Il il y a trois générateurs pour les entités, plus un pour le + * mapping hibernate</p> + * + * <ul> + * <li>EntityInterfaceGenerator</li> + * + * <li>EntityAbstractGenerator</li> + * + * <li>EntityImplGenerator</li> + * + * <li>EntityHibernateMappingGenerator</li> + * </ul> + * + * <p><b><i>EntityInterfaceGenerator</i></b> génère l'interface de + * l'entité avec les méthodes d'accès aux attributs et les opérations + * définis par l'utilisateur dans son diagrammme de classe. Elle implante + * TopiaEntity</p> + * + * <p><b><i>EntityAbstractGenerator</i></b> génère une classe qui + * implante l'interface de l'entité et étend TopiaEntityAbstract qui + * implante les méthodes du framework, méthode d'accès aux attributs + * topiaId, topiaVersion et topiaCreateDate.</p> + * + * <p><b><i>EntityImplGenerator</i></b> génère une classe vide qui permet + * au programme de compiler si l'entité n'a pas d'opération spécifique. + * Si elle a des opérations spécifiques le développeur doit implanter + * cette classe dans ses sources et y mettre le code pour les opérations + * spécifiques, le processus de génération écrasera alors la classe + * généré par la classe développée spécifiquement.</p> + * + * <p><b><i>EntityHibernateMappingGenerator</i></b> génère le fichier de + * mapping pour entité. L'interface est déclaré dans le mapping et est + * mappé sur une table préfixé par I. Ensuite le Impl est déclaré en + * union-subclass de cette interface. On a besoin de l'interface car les + * méthodes l'utilise dans les signatures de méthode lorsqu'il y a un + * lien entre deux entités.</p> + * + * @author poussin <poussin@codelutin.com> + * @version $Id$ + */ +package org.nuiton.topia.generator; \ No newline at end of file Property changes on: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package-info.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Deleted: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package.html =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package.html 2010-05-07 15:19:41 UTC (rev 1935) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/package.html 2010-05-07 16:34:39 UTC (rev 1936) @@ -1,101 +0,0 @@ -<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> - -<html> - <head> - <meta - name="generator" - content="HTML Tidy, see www.w3.org"> - - <title></title> - </head> - - <body> - <h1>Les G�n�rateurs</h1> - - <h2>TopiaMetaGenerator</h2> - - <p>TopiaMetaGenerator permet d'enchainer les diff�rents - g�n�rateurs.</p> - - <h2>Les DAO</h2> - - <p>Il il y a trois g�n�rateurs pour les DAO</p> - - <ul> - <li>DAOHelperGenerator</li> - - <li>DAOAbstractGenerator</li> - - <li>DAOGenerator</li> - </ul> - - <p><b><i>DAOHelperGenerator</i></b> permet de r�cup�rer les DAOs - g�n�r�s sp�cifiquement pour l'application sans avoir besoin de passer - le type de l'entit� en param�tre. Cette classe contient donc une - methode get par type d'entity qui permet de r�cup�rer le DAO associ�. - Ces m�thodes sont des m�thodes statiques et prennent en param�tre un - TopiaContext.</p> - - <p><b><i>DAOAbstractGenerator</i></b> est une classe abstraite m�me si - elle peut implanter toutes les m�thodes de l'interface TopiaDAO. De - cette fa�on on oblige l'existance d'une classe concr�te qui en h�rite - soit d�velopp� par le d�veloppeur soit g�n�r� par DAOGenerator. - DAOAbstractGenerator contient toutes les m�thodes findBy, findAllBy, - ... associ�es aux attributs existants. La classe g�n�r� h�rite - directement ou indirectement de TopiaDAODelegator.</p> - - <p><b><i>DAOGenerator</i></b> g�n�re une classe vide qui permet au - programme de compiler, si le d�veloppeur � besoin de m�thode find - suppl�mentaire sur son DAO, il lui suffit de d'implanter cette classe - dans ses sources, le processus de g�n�ration �crasera alors la classe - g�n�r� par la classe d�velopp�e sp�cifiquement.</p> - - <h2>Les entit�s</h2> - - <p>Les entit�s sont de pure POJO et ne contiennent pas de r�f�rence en - interne sur le TopiaContext ou le DAO qui les � cr��e, elle peuvent - donc facilement migrer, �tre utilis� dans diff�rents context, ... le - but etant qu'elle reste des classes compl�tement d�connect� � - l'ex�cution du framework.</p> - - <p>La seul contrainte est qu'elles implante TopiaEntity</p> - - <p>Il il y a trois g�n�rateurs pour les entit�s, plus un pour le - mapping hibernate</p> - - <ul> - <li>EntityInterfaceGenerator</li> - - <li>EntityAbstractGenerator</li> - - <li>EntityImplGenerator</li> - - <li>EntityHibernateMappingGenerator</li> - </ul> - - <p><b><i>EntityInterfaceGenerator</i></b> g�n�re l'interface de - l'entit� avec les m�thodes d'acc�s aux attributs et les op�rations - d�finis par l'utilisateur dans son diagrammme de classe. Elle implante - TopiaEntity</p> - - <p><b><i>EntityAbstractGenerator</i></b> g�n�re une classe qui - implante l'interface de l'entit� et �tend TopiaEntityAbstract qui - implante les m�thodes du framework, m�thode d'acc�s aux attributs - topiaId, topiaVersion et topiaCreateDate.</p> - - <p><b><i>EntityImplGenerator</i></b> g�n�re une classe vide qui permet - au programme de compiler si l'entit� n'a pas d'op�ration sp�cifique. - Si elle a des op�rations sp�cifiques le d�veloppeur doit implanter - cette classe dans ses sources et y mettre le code pour les op�rations - sp�cifiques, le processus de g�n�ration �crasera alors la classe - g�n�r� par la classe d�velopp�e sp�cifiquement.</p> - - <p><b><i>EntityHibernateMappingGenerator</i></b> g�n�re le fichier de - mapping pour entit�. L'interface est d�clar� dans le mapping et est - mapp� sur une table pr�fix� par I. Ensuite le Impl est d�clar� en - union-subclass de cette interface. On a besoin de l'interface car les - m�thodes l'utilise dans les signatures de m�thode lorsqu'il y a un - lien entre deux entit�s.</p> - </body> -</html> -