Topia-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
December 2009
- 3 participants
- 67 discussions
r1711 - in branches/from2.2.2-eugene2-beta/topia-persistence: . src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Dec '09
by tchemit@users.nuiton.org 14 Dec '09
14 Dec '09
Author: tchemit
Date: 2009-12-15 00:19:01 +0100 (Tue, 15 Dec 2009)
New Revision: 1711
Added:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
Log:
- add EntityAbstractTransformer
- use common config in eugene goal
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 23:17:25 UTC (rev 1710)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 23:19:01 UTC (rev 1711)
@@ -134,18 +134,20 @@
<plugin>
<groupId>org.nuiton.eugene</groupId>
<artifactId>maven-eugene-plugin</artifactId>
+ <configuration>
+ <testPhase>true</testPhase>
+ <extraClassPathDirectory>target/classes</extraClassPathDirectory>
+ </configuration>
<executions>
<execution>
<id>Test Generator models</id>
<phase>generate-test-sources</phase>
<configuration>
- <testPhase>true</testPhase>
<modelType>objectmodel</modelType>
<includes>
<include>src/test/xmi:**/*.zargo</include>
</includes>
<outputDirectory>target/generated-sources/test-models</outputDirectory>
- <extraClassPathDirectory>target/classes</extraClassPathDirectory>
<fullPackagePath>org.nuiton.topia</fullPackagePath>
<resolver>org.nuiton.util.FasterCachedResourceResolver</resolver>
</configuration>
@@ -157,7 +159,6 @@
<id>Test Generator</id>
<phase>generate-test-sources</phase>
<configuration>
- <testPhase>true</testPhase>
<reader>org.nuiton.eugene.ObjectModelReader</reader>
<includes>**/*.objectmodel</includes>
<templates>org.nuiton.topia.generator.TopiaMetaGenerator,
@@ -166,7 +167,6 @@
org.nuiton.topia.generator.EntityDTOTransformer
</templates>
<defaultPackage>org.nuiton.topia</defaultPackage>
- <extraClassPathDirectory>target/classes</extraClassPathDirectory>
</configuration>
<goals>
<goal>generate</goal>
Added: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java 2009-12-14 23:19:01 UTC (rev 1711)
@@ -0,0 +1,1043 @@
+package org.nuiton.topia.generator;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.GeneratorUtil;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.*;
+import org.nuiton.topia.TopiaException;
+import org.nuiton.topia.framework.TopiaContextImplementor;
+import static org.nuiton.topia.generator.TopiaGeneratorUtil.*;
+import org.nuiton.topia.persistence.EntityVisitor;
+import org.nuiton.topia.persistence.TopiaEntity;
+import org.nuiton.topia.persistence.TopiaEntityAbstract;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/*{generator option: parentheses = false}*/
+
+/*{generator option: writeString = +}*/
+
+/**
+ * Created: 14 déc. 2009
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com> Copyright Code Lutin
+ * @version $Revision$
+ * <p/>
+ * Mise a jour: $Date$ par :
+ * $Author: tchemit $
+ */
+public class EntityAbstractTransformer extends ObjectModelTransformerToJava {
+
+ /**
+ * Logger
+ */
+ private static final Log log = LogFactory.getLog(EntityAbstractTransformer.class);
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
+ return;
+ }
+
+ String clazzName = clazz.getName();
+ String clazzFQN = TopiaGeneratorUtil.getSimpleName(clazz.getQualifiedName());
+
+ ObjectModelClass result;
+
+ if (log.isInfoEnabled()) {
+ log.info("for entity : " + clazz.getQualifiedName());
+ }
+
+ result = createAbstractClass(clazzName + "Abstract", clazz.getPackageName());
+
+ addInterface(result, clazzName);
+
+ addImport(result, ArrayList.class);
+ addImport(result, List.class);
+ addImport(result, Serializable.class);
+ addImport(result, ToStringBuilder.class);
+ addImport(result, TopiaEntity.class);
+ addImport(result, TopiaContextImplementor.class);
+
+ // javadoc
+
+ StringBuilder doc = new StringBuilder();
+ doc.append("Implantation POJO pour l'entité {@link ").append(StringUtils.capitalize(clazzFQN)).append("}\n");
+
+ {
+ String dbName = clazz.getTagValue(TopiaGeneratorUtil.TAG_DB_NAME);
+ if (dbName != null) {
+ doc.append("<p>Nom de l'entité en BD : ").append(dbName).append(".</p>");
+ }
+ }
+
+ setDocumentation(result, doc.toString());
+
+ // super classes
+
+ for (ObjectModelClass parent : clazz.getSuperclasses()) {
+ String extendClass = parent.getQualifiedName();
+ //Si une des classes parentes définies des méthodes abstraites, son
+ // impl ne sera pas créé
+ boolean abstractParent = shouldBeAbstract(parent);
+ if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
+ if (abstractParent) {
+ extendClass += "Abstract";
+ } else {
+ extendClass += "Impl";
+ }
+ }
+ setSuperClass(result, extendClass);
+ }
+
+ if (result.getSuperclasses().isEmpty()) {
+ setSuperClass(result, TopiaEntityAbstract.class);
+ }
+
+ // serialVersionUID
+
+ String svUID = TopiaGeneratorUtil.findTagValue("serialVersionUID", clazz, model);
+ if (svUID != null) {
+ addAttribute(result, "serialVersionUID", long.class, svUID, ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC, ObjectModelModifier.FINAL);
+
+ }
+
+ ObjectModelParameter attr2;
+
+ 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;
+ }
+
+ String type;
+ String name;
+
+ if (!attr.hasAssociationClass()) {
+ String attrName = attr.getName();
+ name = attrName;
+ type = attr.getType();
+// type = TopiaGeneratorUtil.getSimpleName(attr.getType());
+ } else {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ //TODO THIMEL : Je pense que les GeneratorUtil.toLowerCaseFirstLetter sont inutiles ici, ou alors il faudrait le faire partout
+ name = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName);
+ type = attr.getAssociationClass().getQualifiedName();
+// type = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName());
+ }
+
+ if (GeneratorUtil.isNMultiplicity(attr)) {
+ String collectionType = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr);
+ type = collectionType + "<" + type + ">";
+ }
+
+ String attrVisibility = attr.getVisibility();
+
+ attr2 = addAttribute(result, name, type, null, ObjectModelModifier.toValue(attrVisibility));
+
+
+ doc = new StringBuilder();
+
+ if (TopiaGeneratorUtil.hasDocumentation(attr) || attr.hasTagValue(TopiaGeneratorUtil.TAG_DB_NAME)) {
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ String attrDocumentation = attr.getDocumentation();
+ doc.append(attrDocumentation).append("\n");
+ }
+ if (attr.hasTagValue(TopiaGeneratorUtil.TAG_DB_NAME)) {
+ String dbName = attr.getTagValue(TopiaGeneratorUtil.TAG_DB_NAME);
+ doc.append("Nom de l'attribut en BD : ").append(dbName).append("\n");
+ }
+ }
+
+ setDocumentation(attr2, doc.toString());
+
+
+ if (attr.hasTagValue(TopiaGeneratorUtil.TAG_ANNOTATION)) {
+ String annotation = attr.getTagValue(TopiaGeneratorUtil.TAG_ANNOTATION);
+ //FIXME Make annotation works...
+///* <%=annotation%>
+//*/
+ }
+ }
+
+ //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();
+ addAttribute(result, GeneratorUtil.toLowerCaseFirstLetter(attrName), attrType, null, ObjectModelModifier.toValue(attrVisibility));
+ }
+ }
+ }
+
+ ObjectModelOperation op = addOperation(result, "update", "void", ObjectModelModifier.PUBLIC);
+ addException(op, TopiaException.class);
+ setOperationBody(op, ""
+/*{
+ ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=clazzName%>.class).update(this);
+}*/
+ );
+
+ op = addOperation(result, "delete", "void", ObjectModelModifier.PUBLIC);
+ addException(op, TopiaException.class);
+ setOperationBody(op, ""
+/*{
+ ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=clazzName%>.class).delete(this);
+}*/
+ );
+
+ generateAcceptMethod(result, clazz);
+
+ generateAggregateMethod(result, clazz);
+
+ generateCompositeMethod(result, clazz);
+
+
+ for (ObjectModelAttribute attr : clazz.getAttributes()) {
+ ObjectModelAttribute reverse = attr.getReverseAttribute();
+
+ if (!(attr.isNavigable()
+ || hasUnidirectionalRelationOnAbstractType(reverse, model))) {
+ continue;
+ }
+
+ transformAttribute(result, attr, reverse);
+ }
+
+
+ //Méthodes d'accès aux attributs d'une classe d'associations
+ if (clazz instanceof ObjectModelAssociationClass) {
+ generateAssociationAccessors(result, (ObjectModelAssociationClass) clazz);
+ }
+
+ boolean doGenerateToString = TopiaGeneratorUtil.generateToString(clazz, model);
+ if (doGenerateToString) {
+ generateToStringMethod(result, clazz);
+ }
+
+ String i18nPrefix = TopiaGeneratorUtil.getI18nPrefix(clazz, model);
+ if (i18nPrefix != null) {
+ // generate i18n prefix
+ generateI18n(result, i18nPrefix, clazz);
+ }
+ }
+
+ protected void transformAttribute(ObjectModelClass result, ObjectModelAttribute attr, ObjectModelAttribute reverse) {
+
+ String attrName = attr.getName();
+ String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType());
+ addImport(result, attrType);
+
+ attrType = TopiaGeneratorUtil.getSimpleName(attrType);
+
+ ObjectModelOperation op;
+
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+
+ if (attr.hasAssociationClass()) {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+ addImport(result, assocClassFQN);
+ assocClassFQN = TopiaGeneratorUtil.getSimpleName(assocClassFQN);
+ String name = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName);
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, assocClassFQN, "association");
+ setOperationBody(op, ""
+/*{
+ <%=assocClassFQN%> _oldValue = this.<%=name%>;
+ fireOnPreWrite("<%=name%>", _oldValue, association);
+ this.<%=name%> = association;
+ fireOnPostWrite("<%=name%>", _oldValue, association);
+}*/
+ );
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=name%>;
+}*/
+ );
+ } else {
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType, "value");
+ setOperationBody(op, ""
+/*{
+ <%=attrType%> _oldValue = this.<%=attrName%>;
+ fireOnPreWrite("<%=attrName%>", _oldValue, value);
+ this.<%=attrName%> = value;
+ fireOnPostWrite("<%=attrName%>", _oldValue, value);
+}*/
+
+ );
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName), attrType, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ fireOnPreRead("<%=attrName%>", <%=attrName%>);
+ <%=attrType%> result = this.<%=attrName%>;
+ fireOnPostRead("<%=attrName%>", <%=attrName%>);
+ return result;
+}*/
+ );
+ }
+ } else { //NMultiplicity
+ String collectionInterface = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr);
+ String collectionObject = TopiaGeneratorUtil.getNMultiplicityObjectType(attr);
+ addImport(result, collectionInterface);
+ addImport(result, collectionObject);
+ collectionInterface = TopiaGeneratorUtil.getSimpleName(collectionInterface);
+ collectionObject = TopiaGeneratorUtil.getSimpleName(collectionObject);
+
+ if (!attr.hasAssociationClass()) {
+ //Méthodes remplacées par des accesseurs sur les classes d'assoc
+
+ // addXXX
+
+ op = addOperation(result, "add" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType, attrName);
+ StringBuilder body = new StringBuilder();
+
+ body.append(""
+/*{
+ 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)) {
+ body.append(""
+/*{ <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(this);
+}*/
+ );
+ } else {
+ body.append(""
+/*{ if (<%=attrName%>.get<%=StringUtils.capitalize(reverseAttrName)%>() == null) {
+ <%=attrName%>.set<%=StringUtils.capitalize(reverseAttrName)%>(new <%=collectionObject%><<%=reverseAttrType%>>());
+ }
+ <%=attrName%>.get<%=StringUtils.capitalize(reverseAttrName)%>().add(this);
+}*/
+ );
+ }
+ }
+ body.append(""
+/*{ this.<%=attrName%>.add(<%=attrName%>);
+ fireOnPostWrite("<%=attrName%>", this.<%=attrName%>.size(), null, <%=attrName%>);
+}*/
+ );
+ setOperationBody(op, body.toString());
+
+ // addAllXXX
+
+ op = addOperation(result, "addAll" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, collectionInterface + "<" + attrType + ">", "values");
+
+ setOperationBody(op, ""
+/*{
+ if (values == null) {
+ return;
+ }
+ for (<%=attrType%> item : values) {
+ add<%=StringUtils.capitalize(attrName)%>(item);
+ }
+}*/
+ );
+
+ if (!isPrimitiveType(attr) && !isDateType(attr)) {
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName) + "ByTopiaId", attrType, ObjectModelModifier.PUBLIC);
+ addParameter(op, String.class, "topiaId");
+ setOperationBody(op, ""
+/*{
+ return org.nuiton.topia.persistence.util.TopiaEntityHelper.getEntityByTopiaId(<%=attrName%>, topiaId);
+ }*/
+ );
+
+ }
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, collectionInterface + "<" + attrType + ">", "values");
+
+ setOperationBody(op, ""
+/*{
+ <%=collectionInterface%><<%=attrType%>> _oldValue = <%=attrName%>;
+ fireOnPreWrite("<%=attrName%>", _oldValue, values);
+ <%=attrName%> = values;
+ fireOnPostWrite("<%=attrName%>", _oldValue, values);
+}*/
+ );
+
+
+ // removeXXX
+
+
+ op = addOperation(result, "remove" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType, "value");
+ body = new StringBuilder();
+
+ body.append(""
+/*{
+ 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)) {
+ body.append(""
+/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(null);
+}*/
+ );
+ } else {
+ body.append(""
+/*{ value.get<%=StringUtils.capitalize(reverseAttrName)%>().remove(this);
+}*/
+ );
+ }
+ }
+ body.append(""
+/*{ fireOnPostWrite("<%=attrName%>", this.<%=attrName%>.size()+1, value, null);
+}*/
+ );
+ setOperationBody(op, body.toString());
+
+
+ // clearXXX
+
+ op = addOperation(result, "clear" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC);
+
+ body = new StringBuilder();
+
+ body.append(""
+/*{
+ if (this.<%=attrName%> == null) {
+ return;
+ }
+}*/
+ );
+
+ if (reverse != null && (reverse.isNavigable() ||
+ hasUnidirectionalRelationOnAbstractType(attr, model))) {
+ String reverseAttrName = reverse.getName();
+ body.append(""
+/*{ for (<%=attrType%> item : this.<%=attrName%>) {
+}*/
+ );
+ if (!GeneratorUtil.isNMultiplicity(reverse)) {
+ body.append(""
+/*{ item.set<%=StringUtils.capitalize(reverseAttrName)%>(null);
+}*/
+ );
+ } else {
+ body.append(""
+/*{ item.get<%=StringUtils.capitalize(reverseAttrName)%>().remove(this);
+}*/
+ );
+ }
+ body.append(""
+/*{ }
+}*/
+ );
+ }
+ body.append(""
+/*{ <%=collectionInterface%><<%=attrType%>> _oldValue = new <%=collectionObject%><<%=attrType%>>(this.<%=attrName%>);
+ fireOnPreWrite("<%=attrName%>", _oldValue, this.<%=attrName%>);
+ this.<%=attrName%>.clear();
+ fireOnPostWrite("<%=attrName%>", _oldValue, this.<%=attrName%>);
+}*/
+ );
+
+ setOperationBody(op, body.toString());
+
+ } else {
+
+
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+// String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName());
+
+ // addXXX
+
+ op = addOperation(result, "add" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, assocClassFQN, "value");
+
+ StringBuilder body = new StringBuilder();
+
+ body.append(""
+/*{
+ 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();
+ body.append(""
+/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(this);
+}*/
+ );
+ }
+ body.append(""
+/*{ this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.add(value);
+ fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size(), null, value);
+}*/
+ );
+ setOperationBody(op, body.toString());
+
+
+ if (!isPrimitiveType(attr) && !isDateType(attr)) {
+
+ // getXXXByTopiaId
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName) + "ByTopiaId", assocClassFQN, ObjectModelModifier.PUBLIC);
+ addParameter(op, String.class, "topiaId");
+ setOperationBody(op, ""
+/*{
+ return org.nuiton.topia.persistence.util.TopiaEntityHelper.getEntityByTopiaId(<%=assocAttrName%>, topiaId);
+}*/
+ );
+
+ }
+
+ // addAllXXX
+
+ op = addOperation(result, "addAll" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, collectionInterface + "<" + assocClassFQN + ">", "values");
+ setOperationBody(op, ""
+/*{
+ if (values == null) {
+ return;
+ }
+ for (<%=assocClassFQN%> item : values) {
+ add<%=StringUtils.capitalize(assocAttrName)%>(item);
+ }
+}*/
+ );
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, collectionInterface + "<" + assocClassFQN + ">", "values");
+ setOperationBody(op, ""
+/*{
+// 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);
+}*/
+ );
+
+ // removeXXX
+
+ op = addOperation(result, "remove" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, assocClassFQN, "value");
+
+ body = new StringBuilder();
+
+ body.append(""
+/*{
+ 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();
+ body.append(""
+/*{ value.set<%=StringUtils.capitalize(reverseAttrName)%>(null);
+}*/
+ );
+ }
+ body.append(""
+/*{ fireOnPostWrite("<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>", this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size()+1, value, null);
+}*/
+ );
+
+ setOperationBody(op, body.toString());
+
+ // clearXXX
+
+ op = addOperation(result, "clear" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC);
+
+ body = new StringBuilder();
+
+ body.append(""
+/*{
+ if (this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) {
+ return;
+ }
+}*/
+ );
+
+ if (reverse != null && (reverse.isNavigable() ||
+ hasUnidirectionalRelationOnAbstractType(attr, model))) {
+ String reverseAttrName = reverse.getName();
+ body.append(""
+/*{ for (<%=assocClassFQN%> item : this.<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>) {
+ item.set<%=StringUtils.capitalize(reverseAttrName)%>(null);
+ }
+}*/
+ );
+ }
+ body.append(""
+/*{ <%=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);
+}*/
+ );
+ setOperationBody(op, body.toString());
+ }
+
+ if (!attr.hasAssociationClass()) {
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName), collectionInterface + "<" + attrType + ">", ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=attrName%>;
+}*/
+ );
+
+ // sizeXXX
+
+ op = addOperation(result, "size" + StringUtils.capitalize(attrName), int.class, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ if (<%=attrName%> == null) {
+ return 0;
+ }
+ return <%=attrName%>.size();
+}*/
+ );
+
+ // isXXXEmpty
+
+ op = addOperation(result, "is" + StringUtils.capitalize(attrName) + "Empty", boolean.class, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ int size = size<%=StringUtils.capitalize(attrName)%>();
+ return size == 0;
+}*/
+ );
+
+ } else {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+// String assocClassFQN = TopiaGeneratorUtil.getSimpleName(attr.getAssociationClass().getQualifiedName());
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), collectionInterface + "<" + assocClassFQN + ">", ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>;
+}*/
+ );
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN, ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType, "value");
+ setOperationBody(op, ""
+/*{
+ 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;
+}*/
+ );
+
+
+ // sizeXXX
+
+ op = addOperation(result, "size" + StringUtils.capitalize(assocAttrName), int.class, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ if (<%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%> == null) {
+ return 0;
+ }
+ return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>.size();
+}*/
+ );
+
+ //isXXXEmpty
+
+ op = addOperation(result, "is" + StringUtils.capitalize(assocAttrName) + "Empty", boolean.class, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ int size = size<%=StringUtils.capitalize(assocAttrName)%>();
+ return size == 0;
+}*/
+ );
+
+ }
+ }
+ }
+
+ protected void generateAssociationAccessors(ObjectModelClass result, ObjectModelAssociationClass assoc) {
+ for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) {
+ if (attr != null) {
+ String attrType = TopiaGeneratorUtil.getSimpleName(attr.getType());
+ String attrName = attr.getName();
+ generateAssociationAccessors(result, 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);
+// }
+ }
+ }
+ }
+
+ protected void generateToStringMethod(ObjectModelClass result, ObjectModelClass clazz) {
+
+ ObjectModelOperation op = addOperation(result, "toString", String.class, ObjectModelModifier.PUBLIC);
+ StringBuilder body = new StringBuilder();
+
+
+ body.append(""
+/*{
+ 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();
+ body.append(""
+/*{ append("<%=attrName%>", this.<%=attrName%>).
+}*/
+ );
+ }
+ }
+ body.append(""
+/*{ toString();
+ return result;
+}*/
+ );
+ setOperationBody(op, body.length() == 0 ? " " : body.toString());
+
+ }
+
+ protected void generateCompositeMethod(ObjectModelClass result, ObjectModelClass clazz) {
+
+ ObjectModelOperation op = addOperation(result, "getComposite", List.class.getName() + "<" + TopiaEntity.class.getName() + ">", ObjectModelModifier.PUBLIC);
+ addException(op, TopiaException.class);
+ StringBuilder body = new StringBuilder();
+ body.append(""
+/*{
+ 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)) {
+ body.append(""
+/*{ if (<%=getterName%>() != null) {
+ tmp.addAll(<%=getterName%>());
+ }
+}*/
+ );
+ } else {
+ body.append(""
+/*{ 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)) {
+ body.append(""
+/*{
+ 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%>);
+// }
+ body.append(""
+/*{
+ {
+ 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);
+ }
+ }
+}*/
+ );
+ }
+ }
+ }
+ }
+ body.append(""
+/*{
+ // 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;
+}*/
+ );
+
+ setOperationBody(op, body.length() == 0 ? " " : body.toString());
+ }
+
+ protected void generateAggregateMethod(ObjectModelClass result, ObjectModelClass clazz) {
+
+ ObjectModelOperation op = addOperation(result, "accept", List.class.getName() + "<" + TopiaEntity.class.getName() + ">", ObjectModelModifier.PUBLIC);
+ addException(op, TopiaException.class);
+
+ StringBuilder body = new StringBuilder();
+ body.append(""
+/*{
+ 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)) {
+ body.append(""
+/*{ tmp.addAll(<%=getterName%>());
+}*/
+ );
+ } else {
+ body.append(""
+/*{ tmp.add(<%=getterName%>());
+}*/
+ );
+ }
+ }
+ }
+ }
+ body.append(""
+/*{
+ // 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;
+}*/
+ );
+
+ setOperationBody(op, body.length() == 0 ? " " : body.toString());
+ }
+
+ protected void generateAcceptMethod(ObjectModelClass result, ObjectModelClass clazz) {
+
+ ObjectModelOperation op = addOperation(result, "accept", "void", ObjectModelModifier.PUBLIC);
+ addException(op, TopiaException.class);
+ setDocumentation(op, "Envoi via les methodes du visitor l'ensemble des champs de l'entity\n" +
+ "avec leur nom, type et valeur.");
+ {
+ ObjectModelParameter attr = addParameter(op, EntityVisitor.class, "visitor");
+ setDocumentation(attr, "le visiteur de l'entite.");
+ }
+ StringBuilder body = new StringBuilder();
+ body.append(""
+/*{
+ 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)) {
+ body.append(""
+/*{ visitor.visit(this, "<%=attrName%>", <%=attrType%>.class, <%=attrName%>);
+}*/
+ );
+ } else {
+ String collectionType = TopiaGeneratorUtil.getSimpleName(TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr));
+ body.append(""
+/*{ 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)) {
+ body.append(""
+/*{ visitor.visit(this, "<%=assocAttrName%>", <%=assocClassFQN%>.class, <%=assocAttrName%>);
+}*/
+ );
+ } else {
+ String collectionType = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr);
+ body.append(""
+/*{ 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);
+ body.append(""
+/*{ visitor.visit(this, "<%=attrName%>", <%=attrType%>.class, <%=attrName%>);
+}*/
+ );
+ }
+ }
+ }
+ body.append(""
+/*{ visitor.end(this);
+}*/
+ );
+
+ setOperationBody(op, body.length() == 0 ? " " : body.toString());
+ }
+
+
+ private void generateAssociationAccessors(ObjectModelClass result, String name, String type) {
+ ObjectModelOperation op;
+ op = addOperation(result, "set" + StringUtils.capitalize(name), "void", ObjectModelModifier.PUBLIC);
+ ObjectModelParameter param = addParameter(op, type, "value");
+ setDocumentation(param, "La valeur de l'attribut " + name + " à positionner.");
+ setOperationBody(op, ""
+/*{
+ <%=type%> _oldValue = this.<%=GeneratorUtil.toLowerCaseFirstLetter(name)%>;
+ fireOnPreWrite("<%=name%>", _oldValue, value);
+ this.<%=GeneratorUtil.toLowerCaseFirstLetter(name)%> = value;
+ fireOnPostWrite("<%=name%>", _oldValue, value);
+}*/
+ );
+
+ op = addOperation(result, "get" + StringUtils.capitalize(name), type, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=GeneratorUtil.toLowerCaseFirstLetter(name)%>;
+}*/
+ );
+
+ }
+
+
+ private void generateI18n(ObjectModelClass result, String i18nPrefix, ObjectModelClass clazz) {
+
+ 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()));
+ }
+
+ //FIXME : use a block extension for java
+ }
+
+ private void addI18n(StringBuilder buffer, String i18nPrefix, String suffix) {
+ buffer.append(" org.nuiton.i18n.I18n.n_(\"").append(i18nPrefix).append(suffix).append("\");\n");
+ }
+}
Property changes on: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractTransformer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
1
0
r1710 - branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Dec '09
by tchemit@users.nuiton.org 14 Dec '09
14 Dec '09
Author: tchemit
Date: 2009-12-15 00:17:25 +0100 (Tue, 15 Dec 2009)
New Revision: 1710
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java
Log:
add deprecated generator
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2009-12-14 19:40:38 UTC (rev 1709)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanGenerator.java 2009-12-14 23:17:25 UTC (rev 1710)
@@ -64,7 +64,9 @@
/**
* DTO generator
- * @deprecated @since 2.3.0 Use {@link org.nuiton.topia.generator.BeanTransformer} template instead
+ *
+ * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} : {@link BeanTransformer}
+ * @see BeanTransformer
*/
@Deprecated
public class BeanGenerator extends ObjectModelGenerator {
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2009-12-14 19:40:38 UTC (rev 1709)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2009-12-14 23:17:25 UTC (rev 1710)
@@ -57,7 +57,11 @@
* 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}.
*/
+@Deprecated
public class EntityAbstractGenerator extends ObjectModelGenerator {
/** Logger for this class */
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 19:40:38 UTC (rev 1709)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 23:17:25 UTC (rev 1710)
@@ -62,6 +62,12 @@
// do not remove me :)
import org.apache.commons.lang.StringUtils;
+/**
+ *
+ * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} :
+ * {@link EntityInterfaceTransformer}.
+ */
+@Deprecated
public class EntityInterfaceGenerator extends ObjectModelGenerator {
/** Logger for this class */
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2009-12-14 19:40:38 UTC (rev 1709)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2009-12-14 23:17:25 UTC (rev 1710)
@@ -48,6 +48,12 @@
import java.util.Collection;
import java.util.Set;
+
+/**
+ *
+ * @deprecated since 2.3.0, prefer use the corresponding {@link org.nuiton.eugene.Transformer} :
+ * {@link InterfaceTransformer}.
+ */
@Deprecated
public class InterfaceGenerator extends ObjectModelGenerator { //InterfaceGenerator
1
0
r1709 - branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Dec '09
by tchemit@users.nuiton.org 14 Dec '09
14 Dec '09
Author: tchemit
Date: 2009-12-14 20:40:38 +0100 (Mon, 14 Dec 2009)
New Revision: 1709
Added:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
Log:
- remove unused method + comment on EntityInterfaceGenerator
- add EntityInterfacTransformer (could be optimized ?)
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 14:21:02 UTC (rev 1708)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 19:40:38 UTC (rev 1709)
@@ -59,6 +59,7 @@
import java.util.List;
import java.util.Set;
+// do not remove me :)
import org.apache.commons.lang.StringUtils;
public class EntityInterfaceGenerator extends ObjectModelGenerator {
@@ -76,24 +77,25 @@
return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java";
}
- @Override
- public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException {
- if (!interfacez.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
- return;
- }
+ //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()%>
+//}*/
+// }
- 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 = "\"";
Added: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java 2009-12-14 19:40:38 UTC (rev 1709)
@@ -0,0 +1,450 @@
+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.GeneratorUtil;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.*;
+import org.nuiton.topia.persistence.SearchFields;
+import org.nuiton.topia.persistence.TopiaEntity;
+
+import java.util.*;
+
+
+/*{generator option: parentheses = false}*/
+
+/*{generator option: writeString = +}*/
+
+/**
+ * Created: 14 déc. 2009
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com> Copyright Code Lutin
+ * @version $Revision$
+ * <p/>
+ * Mise a jour: $Date$ par :
+ * $Author: tchemit $
+ */
+public class EntityInterfaceTransformer extends ObjectModelTransformerToJava {
+
+ /**
+ * Logger
+ */
+ private static final Log log = LogFactory.getLog(EntityInterfaceTransformer.class);
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
+ return;
+ }
+
+ String clazzName = clazz.getName();
+
+ ObjectModelInterface result;
+
+ if (log.isInfoEnabled()) {
+ log.info("for entity : "+clazz.getQualifiedName());
+ }
+
+ result = createInterface(clazzName, clazz.getPackageName());
+
+ addImport(result, SearchFields.class);
+ addImport(result, TopiaEntity.class);
+ if (TopiaGeneratorUtil.hasDocumentation(clazz)) {
+ setDocumentation(result,clazz.getDocumentation());
+ }
+
+ generateSearchFields(result, clazz);
+
+ // super classes
+
+ for (ObjectModelClassifier parent : clazz.getInterfaces()) {
+ addInterface(result,parent.getQualifiedName());
+ }
+
+ for (ObjectModelClassifier parent : clazz.getSuperclasses()) {
+ if (parent.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
+ addInterface(result,parent.getQualifiedName());
+ break;
+ }
+ }
+
+ addInterface(result, TopiaEntity.class);
+
+ generateStaticColumnNames(result, clazz);
+
+ for (ObjectModelAttribute attr : clazz.getAttributes()) {
+ ObjectModelAttribute reverse = attr.getReverseAttribute();
+ if (!attr.isNavigable() && !TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType(reverse, model)) {
+ continue;
+ }
+
+ if (attr.hasAssociationClass()) {
+
+ addAssociationAttribute(result, attr);
+
+ } else {
+
+ addNoneAssociationAttribute(result, attr);
+ }
+ }
+
+ //Méthodes d'accès aux attributs d'une classe d'associations
+ generateAssociationAttributes(result, clazz);
+
+ generateInterfaceOperations(result, clazz);
+ }
+
+ protected void generateAssociationAttributes(ObjectModelInterface result, ObjectModelClass clazz) {
+ 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(result, name, type);
+ if (attr.getReverseAttribute() == null) {
+ type = ((ObjectModelClassifier) attr.getDeclaringElement()).getQualifiedName();
+ name = attr.getDeclaringElement().getName();
+ generateAssociationAccessors(result, name, type);
+ }
+ }
+ }
+ }
+ }
+
+
+ protected void addNoneAssociationAttribute(ObjectModelInterface result, ObjectModelAttribute attr) {
+ String attrName = attr.getName();
+ String attrType = attr.getType();
+ ObjectModelOperation op;
+ ObjectModelParameter attr2;
+
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ attr2 = addParameter(op, attrType, GeneratorUtil.toLowerCaseFirstLetter(attrName));
+ setDocumentation(attr2, "La valeur de l'attribut " + attrName + " à positionner.");
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName), attrType, ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ } else {
+ String collectionInterface = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr);
+
+ // addXXX
+
+ op = addOperation(result, "add" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ attr2 = addParameter(op, attrType, GeneratorUtil.toLowerCaseFirstLetter(attrName));
+ setDocumentation(attr2, "L'instance de " + attrName + " à ajouter");
+
+ // addAllXXX
+
+ op = addOperation(result, "addAll" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ attr2 = addParameter(op, collectionInterface + "<" + attrType + ">", GeneratorUtil.toLowerCaseFirstLetter(attrName));
+ setDocumentation(attr2, "Les instances de " + attrName + " à ajouter");
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ attr2 = addParameter(op, collectionInterface + "<" + attrType + ">", GeneratorUtil.toLowerCaseFirstLetter(attrName));
+ setDocumentation(attr2, "La Collection de " + attrName + " à ajouter");
+
+ // removeXXX
+
+ op = addOperation(result, "remove" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ attr2 = addParameter(op, attrType, GeneratorUtil.toLowerCaseFirstLetter(attrName));
+ setDocumentation(attr2, "L'instance de " + attrName + " à retirer");
+
+ // clearXXX
+
+ op = addOperation(result, "clear" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, attr.getDocumentation());
+ }
+ setDocumentation(attr2, "Vide la Collection de " + attrName);
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName), collectionInterface + "<" + attrType + ">", ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(op, "Retourne la collection.");
+ }
+
+ if (!TopiaGeneratorUtil.isPrimitiveType(attr) && !TopiaGeneratorUtil.isDateType(attr)) {
+
+ // getXXXByTopiaId
+
+ op = addOperation(result, "get" + StringUtils.capitalize(attrName) + "ByTopiaId", attrType, ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Recupère l'attribut " + attrName + " à partir de son topiaId");
+ attr2 = addParameter(op, String.class, "topiaId");
+ setDocumentation(attr2, "le topia id de l'entité recherchée");
+ }
+
+ // sizeXXX
+
+ op = addOperation(result, "size" + StringUtils.capitalize(attrName), int.class, ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Retourne le nombre d'éléments de la collection " + attrName);
+
+ // isXXXEmpty
+
+ op = addOperation(result, "is" + StringUtils.capitalize(attrName) + "Empty", boolean.class, ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Retourne {@code true} si la collection " + attrName + " est vide.");
+ }
+ }
+
+ protected void addAssociationAttribute(ObjectModelInterface result, ObjectModelAttribute attr) {
+ String attrName = attr.getName();
+ String attrType = attr.getType();
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+ String assocClassName = attr.getAssociationClass().getName();
+
+ ObjectModelOperation op;
+ ObjectModelParameter attr2;
+
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ attr2 = addParameter(op, assocClassFQN, GeneratorUtil.toLowerCaseFirstLetter(assocClassName));
+ setDocumentation(attr2, "La valeur de l'attribut " + assocClassName + " à positionner");
+
+ // getXXX
+
+ addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN, ObjectModelModifier.PACKAGE);
+
+ } else {
+ String collectionInterface = TopiaGeneratorUtil.getNMultiplicityInterfaceType(attr);
+
+ // addXXX
+
+ op = addOperation(result, "add" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ attr2 = addParameter(op, assocClassFQN, GeneratorUtil.toLowerCaseFirstLetter(assocClassName));
+ setDocumentation(attr2, "L'instance de " + assocClassName + " à ajouter");
+
+ // addAllXXX
+
+ op = addOperation(result, "addAll" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ attr2 = addParameter(op, collectionInterface + "<" + assocClassFQN + ">", GeneratorUtil.toLowerCaseFirstLetter(assocClassName));
+ setDocumentation(attr2, "Les instances de " + assocClassName + " à ajouter");
+
+ // setXXX
+
+ op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ attr2 = addParameter(op, collectionInterface + "<" + assocClassFQN + ">", GeneratorUtil.toLowerCaseFirstLetter(assocClassName));
+ setDocumentation(attr2, "La Collection de " + assocClassName + " à ajouter");
+
+ // removeXXX
+
+ op = addOperation(result, "remove" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ attr2 = addParameter(op, assocClassFQN, GeneratorUtil.toLowerCaseFirstLetter(assocClassName));
+ setDocumentation(attr2, "L'instance de " + assocClassName + " à retirer");
+
+ // clearXXX
+
+ op = addOperation(result, "clear" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Vide la Collection de " + assocClassName + " .");
+
+ // getXXX
+
+ addOperation(result, "get" + StringUtils.capitalize(assocAttrName), collectionInterface + "<" + assocClassFQN + ">", ObjectModelModifier.PACKAGE);
+
+ if (!TopiaGeneratorUtil.isPrimitiveType(attr) && !TopiaGeneratorUtil.isDateType(attr)) {
+
+ // getXXXByTopiaId
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName) + "ByTopiaId", assocClassFQN, ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Recupère l'attribut " + attrName + " à partir de son topiaId");
+ attr2 = addParameter(op, String.class, "topiaId");
+ setDocumentation(attr2, "le topia id de l'entité recherchée");
+ }
+
+ // getXXX
+
+ op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN);
+ addParameter(op, attrType, "value");
+
+
+ // sizeXXX
+
+ addOperation(result, "size" + StringUtils.capitalize(assocAttrName), int.class, ObjectModelModifier.PACKAGE);
+
+
+ // isXXXEmpty
+
+ addOperation(result, "is" + StringUtils.capitalize(assocAttrName) + "Empty", boolean.class, ObjectModelModifier.PACKAGE);
+ }
+ }
+
+ private void generateInterfaceOperations(ObjectModelInterface output, ObjectModelClassifier classifier) {
+
+ for (ObjectModelOperation op : classifier.getOperations()) {
+
+ if (op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) {
+ // Pas de génération des signatures de méthodes pour celles à intégrer au DAO de l'entité
+ continue;
+ }
+
+ String opName = op.getName();
+ String opType = op.getReturnType();
+
+ ObjectModelOperation op2 = addOperation(output, opName, opType, ObjectModelModifier.PACKAGE);
+ if (TopiaGeneratorUtil.hasDocumentation(op)) {
+ setDocumentation(op2, op.getDocumentation());
+ }
+
+ for (ObjectModelParameter param : op.getParameters()) {
+ String paramName = param.getName();
+ String paramType = param.getType();
+ ObjectModelParameter param2 = addParameter(op2, paramType, paramName);
+ if (TopiaGeneratorUtil.hasDocumentation(param)) {
+ setDocumentation(param2, param.getDocumentation());
+ }
+ }
+ for (String exception : op.getExceptions()) {
+ addException(op2, exception);
+ }
+ }
+ }
+
+ private void generateAssociationAccessors(ObjectModelInterface output, String attrName, String attrType) {
+
+ ObjectModelOperation op;
+ ObjectModelParameter param;
+
+ op = addOperation(output, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PACKAGE);
+ param = addParameter(op, attrType, "value");
+ setDocumentation(param, "La valeur de l'attribut " + attrName + " à positionner.");
+
+ op = addOperation(output, "get" + StringUtils.capitalize(attrName), attrType, ObjectModelModifier.PACKAGE);
+ setDocumentation(op, "Retourne la valeur de l'attribut " + attrName + ".");
+ }
+
+ private static final String doubleQuote = "\"";
+ private static final String comma = ",";
+
+ private String getStringRepresentation(List<String> strings) {
+ StringBuilder result = new StringBuilder();
+
+ Iterator<String> it = strings.iterator();
+ if (it.hasNext()) {
+ result.append(doubleQuote).append(it.next()).append(doubleQuote);
+ }
+ while (it.hasNext()) {
+ result.append(comma).append(doubleQuote).append(it.next()).append(doubleQuote);
+ }
+ return result.toString();
+ }
+
+ private void generateSearchFields(ObjectModelInterface result, ObjectModelClass clazz) {
+ 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 (TopiaGeneratorUtil.isTextType(attr)) {
+ txtFields.add(name);
+ needAnnotation = true;
+ } else if (TopiaGeneratorUtil.isNumericType(attr)) {
+ numFields.add(name);
+ needAnnotation = true;
+ } else if (TopiaGeneratorUtil.isBooleanType(attr)) {
+ boolFields.add(name);
+ needAnnotation = true;
+ } else if (TopiaGeneratorUtil.isDateType(attr)) {
+ dateFields.add(name);
+ needAnnotation = true;
+ }
+ }
+ //FIXME introduce a annotation extension to generate them
+
+/*@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 generateStaticColumnNames(ObjectModelInterface result, ObjectModelClass clazz) {
+ for (ObjectModelAttribute attr : clazz.getAttributes()) {
+ ObjectModelAttribute reverse = attr.getReverseAttribute();
+ if (!(attr.isNavigable()
+ || TopiaGeneratorUtil.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);
+ addAttribute(result, attrColName, String.class, "\"" + attrName + "\"", ObjectModelModifier.PACKAGE);
+ }
+
+ //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);
+ addAttribute(result, attrColName, String.class, "\"" + attrName + "\"", ObjectModelModifier.PACKAGE);
+ }
+ }
+ }
+ }
+}
Property changes on: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceTransformer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
1
0
Author: fdesbois
Date: 2009-12-14 15:21:02 +0100 (Mon, 14 Dec 2009)
New Revision: 1708
Modified:
branches/from2.2.2-eugene2-beta/pom.xml
Log:
Remove tapestry dependency
Modified: branches/from2.2.2-eugene2-beta/pom.xml
===================================================================
--- branches/from2.2.2-eugene2-beta/pom.xml 2009-12-14 14:04:39 UTC (rev 1707)
+++ branches/from2.2.2-eugene2-beta/pom.xml 2009-12-14 14:21:02 UTC (rev 1708)
@@ -85,13 +85,6 @@
<scope>runtime</scope>
</dependency>
- <dependency>
- <groupId>org.apache.tapestry</groupId>
- <artifactId>tapestry-core</artifactId>
- <version>5.1.0.5</version>
- <scope>compile</scope>
- </dependency>
-
<!-- Dependencies for class generation -->
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
1
0
Author: fdesbois
Date: 2009-12-14 15:04:39 +0100 (Mon, 14 Dec 2009)
New Revision: 1707
Modified:
branches/from2.2.2-eugene2-beta/pom.xml
Log:
Suppress topia-ui
Modified: branches/from2.2.2-eugene2-beta/pom.xml
===================================================================
--- branches/from2.2.2-eugene2-beta/pom.xml 2009-12-14 13:58:11 UTC (rev 1706)
+++ branches/from2.2.2-eugene2-beta/pom.xml 2009-12-14 14:04:39 UTC (rev 1707)
@@ -19,7 +19,6 @@
<modules>
<module>topia-persistence</module>
<module>topia-soa</module>
- <module>topia-ui</module>
<module>topia-service-replication</module>
<module>topia-service-migration</module>
<module>topia-service-index</module>
1
0
Author: fdesbois
Date: 2009-12-14 14:58:11 +0100 (Mon, 14 Dec 2009)
New Revision: 1706
Removed:
branches/from2.2.2-eugene2-beta/topia-ui/
Log:
Remove unused old module Topia-ui
1
0
14 Dec '09
Author: fdesbois
Date: 2009-12-14 14:54:15 +0100 (Mon, 14 Dec 2009)
New Revision: 1705
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
Log:
Missing name refactor in pom
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 13:52:49 UTC (rev 1704)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 13:54:15 UTC (rev 1705)
@@ -161,8 +161,8 @@
<reader>org.nuiton.eugene.ObjectModelReader</reader>
<includes>**/*.objectmodel</includes>
<templates>org.nuiton.topia.generator.TopiaMetaGenerator,
- org.nuiton.topia.generator.ObjectModelTransformerToJavaInterface,
- org.nuiton.topia.generator.ObjectModelTransformerToJavaBean,
+ org.nuiton.topia.generator.InterfaceTransformer,
+ org.nuiton.topia.generator.BeanTransformer,
org.nuiton.topia.generator.EntityDTOTransformer
</templates>
<defaultPackage>org.nuiton.topia</defaultPackage>
1
0
r1704 - branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator
by fdesbois@users.nuiton.org 14 Dec '09
by fdesbois@users.nuiton.org 14 Dec '09
14 Dec '09
Author: fdesbois
Date: 2009-12-14 14:52:49 +0100 (Mon, 14 Dec 2009)
New Revision: 1704
Added:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java
Removed:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaBean.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaInterface.java
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java
Log:
Rename first implemented Transformers
Copied: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java (from rev 1703, branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaBean.java)
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/BeanTransformer.java 2009-12-14 13:52:49 UTC (rev 1704)
@@ -0,0 +1,424 @@
+/*
+ * *##%
+ * ToPIA - Persistence
+ * Copyright (C) 2007 - 2009 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>.
+ * ##%*
+ */
+package org.nuiton.topia.generator;
+
+import org.apache.commons.lang.StringUtils;
+import org.nuiton.eugene.GeneratorUtil;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.*;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/*{generator option: parentheses = false}*/
+
+/*{generator option: writeString = +}*/
+/**
+ * BeanTransformer
+ * <p/>
+ * Created: 28 oct. 2009
+ *
+ * @author fdesbois
+ * @version $Revision: 692 $
+ * <p/>
+ * Mise a jour: $Date: 2009-11-04 18:41:32 +0100 (mer. 04 nov. 2009) $
+ * par : $Author: fdesbois $
+ */
+public class BeanTransformer extends ObjectModelTransformerToJava {
+
+ private static final Log log = LogFactory.getLog(BeanTransformer.class);
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_BEAN) &&
+ !clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) {
+ return;
+ }
+
+ ObjectModelClass resultClass;
+ if (clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_BEAN)) {
+ resultClass = createAbstractClass(clazz.getName(), clazz.getPackageName());
+ } else {
+ resultClass = createClass(clazz.getName(), clazz.getPackageName());
+ }
+
+ List<ObjectModelAttribute> attributes = (List<ObjectModelAttribute>) clazz.getAttributes();
+
+ createForDTO(resultClass, clazz, attributes);
+
+ // Set superclass
+ Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
+ if (j.hasNext()) {
+ ObjectModelClass p = j.next();
+ setSuperClass(resultClass, p.getQualifiedName());
+ }
+
+ // Add interfaces from inputModel
+ for (ObjectModelInterface parentInterface : clazz.getInterfaces()) {
+ addInterface(resultClass, parentInterface.getQualifiedName());
+ }
+
+ // Default constructor
+ ObjectModelOperation constructor = addConstructor(resultClass, ObjectModelModifier.PUBLIC);
+
+ createListeners(resultClass, clazz);
+
+ boolean hasEntity = false;
+ boolean hasMultipleAttribute = false;
+ String toStringAppend = ""; // Append pour la méthode toString()
+ String initTabs = ""; // initialisation des tableaux dans le constructeur
+
+ // Add attributes with getter/setter
+ for (ObjectModelAttribute attr : attributes) {
+
+ if (attr.isNavigable() || attr.hasAssociationClass()) {
+ String attrType = attr.getType();
+ String simpleType = GeneratorUtil.getSimpleName(attrType);
+ String attrName = attr.getName();
+ String attrNameCapitalized = StringUtils.capitalize(attrName);
+
+ // multiple attribute
+ if (attr.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ARRAY)) {
+
+ int maxSize = attr.getMaxMultiplicity();
+ int maxSizeMoinsUn = maxSize - 1;
+
+ initTabs += "\n\tthis." + attrName + " = new " + attrType + "[" + maxSize + "];";
+
+ // Set Value
+ ObjectModelOperation setValue = addOperation(resultClass, "set" + attrNameCapitalized,
+ "void", ObjectModelModifier.PUBLIC);
+ addParameter(setValue, "int", "index");
+ addParameter(setValue, attrType, "value");
+ addException(setValue, "java.lang.ArrayIndexOutOfBoundsException");
+ setOperationBody(setValue, ""
+ /*{
+ if (index >= <%=maxSize%> || index < 0) {
+ throw new ArrayIndexOutOfBoundsException("Wrong index [" + index + "] for array <%=attrName%>," +
+ "index must be between 0 and <%=maxSizeMoinsUn%>");
+ }
+ <%=simpleType%>[] oldValue = get<%=attrNameCapitalized%>();
+ this.<%=attrName%>[index] = value;
+ firePropertyChange("<%=attrName%>", oldValue, this.<%=attrName%>);
+ }*/
+ );
+
+ // Get Value
+ ObjectModelOperation getValue = addOperation(resultClass, "get" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(getValue, "int", "index");
+ addException(setValue, "java.lang.ArrayIndexOutOfBoundsException");
+ setOperationBody(getValue, ""
+ /*{
+ if (index >= <%=maxSize%> || index < 0) {
+ throw new ArrayIndexOutOfBoundsException("Wrong index [" + index + "] for array <%=attrName%>," +
+ "index must be between 0 and <%=maxSizeMoinsUn%>");
+ }
+ return this.<%=attrName%>[index];
+ }*/
+ );
+
+ attrType += "[]";
+ simpleType = GeneratorUtil.getSimpleName(attrType);
+ } else if (GeneratorUtil.isNMultiplicity(attr)) {
+ hasMultipleAttribute = true;
+
+ // Add getChild
+ ObjectModelOperation getChild = addOperation(resultClass, "get" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(getChild, "int", "index");
+ setOperationBody(getChild, ""
+ /*{
+ <%=simpleType%> o = getChild(<%=attrName%>, index);
+ return o;
+ }*/
+ );
+
+ // Add getEntity
+ ObjectModelClass attrEntity = null;
+ if (getModel().hasClass(attr.getType())) {
+ attrEntity = getModel().getClass(attr.getType());
+ }
+ boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY));
+
+ if (isEntity) {
+ hasEntity = true;
+ ObjectModelOperation getChildEntity = addOperation(resultClass, "get" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(getChildEntity, String.class.getName(), "topiaId");
+ setOperationBody(getChildEntity, ""
+ /*{
+ <%=simpleType%> o = getEntity(<%=attrName%>, topiaId);
+ return o;
+ }*/
+ );
+ }
+
+ // Add addChild
+ ObjectModelOperation addChild = addOperation(resultClass, "add" + attrNameCapitalized,
+ attrType, ObjectModelModifier.PUBLIC);
+ addParameter(addChild, attrType, attrName);
+ setOperationBody(addChild, ""
+
+ /*{
+ get<%=attrNameCapitalized%>().add(<%=attrName%>);
+ firePropertyChange("<%=attrName%>", null, <%=attrName%>);
+ return <%=attrName%>;
+ }*/
+ );
+
+ // Add removeChild
+ ObjectModelOperation removeChild = addOperation(resultClass, "remove" + attrNameCapitalized,
+ "boolean", ObjectModelModifier.PUBLIC);
+ addParameter(removeChild, attrType, attrName);
+ setOperationBody(removeChild, ""
+
+ /*{
+ boolean removed = get<%=attrNameCapitalized%>().remove(<%=attrName%>);
+ if (removed) {
+ firePropertyChange("<%=attrName%>", <%=attrName%>, null);
+ }
+ return removed;
+ }*/
+ );
+
+ // Change type for Multiple attribute
+ if (attr.isOrdered()) {
+ attrType = List.class.getName() + "<" + attrType + ">";
+ } else {
+ attrType = Collection.class.getName() + "<" + attrType + ">";
+ }
+ simpleType = GeneratorUtil.getSimpleName(attrType);
+ } // end multiple attribute
+
+ if (attr.hasAssociationClass()) {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName);
+ attrType = attr.getAssociationClass().getName();
+ }
+
+ // Add attribute to the class
+ String visibility = attr.getVisibility();
+ addAttribute(resultClass, attrName, attrType, "", ObjectModelModifier.toValue(visibility));
+
+ // Add getter operation
+ ObjectModelOperation getter = addOperation(resultClass, "get" + attrNameCapitalized, attrType,
+ ObjectModelModifier.PUBLIC);
+ setOperationBody(getter, ""
+ /*{
+ return this.<%=attrName%>;
+ }*/
+ );
+
+ // Add setter operation
+ ObjectModelOperation setter = addOperation(resultClass, "set" + attrNameCapitalized, "void",
+ ObjectModelModifier.PUBLIC);
+ addParameter(setter, attrType, "newValue");
+ setOperationBody(setter, ""
+ /*{
+ <%=simpleType%> oldValue = get<%=attrNameCapitalized%>();
+ this.<%=attrName%> = newValue;
+ firePropertyChange("<%=attrName%>", oldValue, newValue);
+ }*/
+ );
+
+ // toString append for toString method
+ toStringAppend += "\n\t\t.append(\"" + attrName + "\", this." + attrName + ")";
+
+ }
+ }
+
+ // Add helper operations
+ if (hasMultipleAttribute) {
+ ObjectModelOperation getChild = addOperation(resultClass, "getChild", "<T> T",
+ ObjectModelModifier.PROTECTED);
+ addParameter(getChild, "java.util.Collection<T>", "childs");
+ addParameter(getChild, "int", "index");
+ setOperationBody(getChild, ""
+ /*{
+ if (childs != null) {
+ int i = 0;
+ for (T o : childs) {
+ if (index == i) {
+ return o;
+ }
+ i++;
+ }
+ }
+ return null;
+ }*/
+ );
+ }
+
+ if (hasEntity) {
+ ObjectModelOperation getEntity = addOperation(resultClass, "getEntity",
+ "<T extends org.nuiton.topia.persistence.TopiaEntity> T", ObjectModelModifier.PROTECTED);
+ addParameter(getEntity, "java.util.Collection<T>", "childs");
+ addParameter(getEntity, "java.lang.String", "topiaId");
+ setOperationBody(getEntity, ""
+ /*{
+ if (childs != null) {
+ for (T o : childs) {
+ if (topiaId.equals(o.getTopiaId())) {
+ return o;
+ }
+ }
+ }
+ return null;
+ }*/
+ );
+ }
+
+ // Set body for default constructor
+ setOperationBody(constructor, ""
+ /*{
+ pcs = new PropertyChangeSupport(this);<%=initTabs%>
+ }*/
+ );
+
+ // Add operations
+ for (ObjectModelOperation op : clazz.getOperations()) {
+ String visibility = op.getVisibility();
+ ObjectModelOperation resultOperation = addOperation(resultClass, op.getName(), op.getReturnType(),
+ ObjectModelModifier.toValue(visibility), ObjectModelModifier.ABSTRACT);
+
+ for (ObjectModelParameter param : op.getParameters()) {
+ addParameter(resultOperation, param.getType(), param.getName());
+ }
+
+ for (String exception : op.getExceptions()) {
+ addException(resultOperation, exception);
+ }
+ }
+
+ // Add toString operation
+ ObjectModelOperation toString = addOperation(resultClass, "toString", "java.lang.String",
+ ObjectModelModifier.PUBLIC); // FIXME manque Override
+ addImport(resultClass, "org.apache.commons.lang.builder.ToStringBuilder");
+ setOperationBody(toString, ""
+ /*{
+ String result = new ToStringBuilder(this)<%=toStringAppend%>.
+ toString();
+ return result;
+ }*/
+ );
+
+ }
+
+ private void createForDTO(ObjectModelClass resultClass, ObjectModelClass inputClass, List<ObjectModelAttribute> attributes) {
+
+ // Add Serializable implements for DTO generation
+ if (!inputClass.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) {
+ return;
+
+ }
+
+ addInterface(resultClass, "java.io.Serializable");
+ String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", inputClass, getModel());
+ if (svUID != null) {
+ addConstant(resultClass, "serialVersionUID", "long", svUID, ObjectModelModifier.PUBLIC);
+ }
+
+ for (ObjectModelDependency dependency : inputClass.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 (TopiaGeneratorUtil.isPrimitiveType(attr) || TopiaGeneratorUtil.isDateType(attr)) {
+ attributes.add(attr);
+ }
+ }
+ }
+ }
+ }
+
+ protected void createListeners(ObjectModelClass resultClass, ObjectModelClass inputClass) {
+
+ addAttribute(resultClass, "pcs", "java.beans.PropertyChangeSupport", "",
+ ObjectModelModifier.PROTECTED, ObjectModelModifier.FINAL);
+
+ // Add PropertyListener
+ String propType = "java.beans.PropertyChangeListener";
+ String strType = String.class.getName();
+ String objectType = Object.class.getName();
+
+ ObjectModelOperation addPropertyChangeListener = addOperation(resultClass,
+ "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(addPropertyChangeListener, propType, "listener");
+ setOperationBody(addPropertyChangeListener, ""
+ /*{
+ pcs.addPropertyChangeListener(listener);
+ }*/
+ );
+
+ ObjectModelOperation addPropertyChangeListenerPlus = addOperation(resultClass,
+ "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(addPropertyChangeListenerPlus, strType, "propertyName");
+ addParameter(addPropertyChangeListenerPlus, propType, "listener");
+ setOperationBody(addPropertyChangeListenerPlus, ""
+ /*{
+ pcs.addPropertyChangeListener(propertyName, listener);
+ }*/
+ );
+
+ ObjectModelOperation removePropertyChangeListener = addOperation(resultClass,
+ "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(removePropertyChangeListener, propType, "listener");
+ setOperationBody(removePropertyChangeListener, ""
+ /*{
+ pcs.removePropertyChangeListener(listener);
+ }*/
+ );
+
+ ObjectModelOperation removePropertyChangeListenerPlus = addOperation(resultClass,
+ "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
+ addParameter(removePropertyChangeListenerPlus, strType, "propertyName");
+ addParameter(removePropertyChangeListenerPlus, propType, "listener");
+ setOperationBody(removePropertyChangeListenerPlus, ""
+ /*{
+ pcs.removePropertyChangeListener(propertyName, listener);
+ }*/
+ );
+
+ ObjectModelOperation firePropertyChange = addOperation(resultClass,
+ "firePropertyChange", "void", ObjectModelModifier.PROTECTED);
+ addParameter(firePropertyChange, strType, "propertyName");
+ addParameter(firePropertyChange, objectType, "oldValue");
+ addParameter(firePropertyChange, objectType, "newValue");
+ setOperationBody(firePropertyChange, ""
+ /*{
+ pcs.firePropertyChange(propertyName, oldValue, newValue);
+ }*/
+ );
+ }
+
+
+}
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2009-12-14 13:35:57 UTC (rev 1703)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceGenerator.java 2009-12-14 13:52:49 UTC (rev 1704)
@@ -28,7 +28,7 @@
*
* Mise a jour: $Date$
* par : $Author$
- * @deprecated use InterfaceTransformer template instead
+ * @deprecated since 2.3.0, use {@link org.nuiton.topia.generator.InterfaceTransformer} instead
*/
package org.nuiton.topia.generator;
Copied: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java (from rev 1703, branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaInterface.java)
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/InterfaceTransformer.java 2009-12-14 13:52:49 UTC (rev 1704)
@@ -0,0 +1,64 @@
+
+package org.nuiton.topia.generator;
+
+import java.util.Iterator;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.ObjectModelAttribute;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+import org.nuiton.eugene.models.object.ObjectModelParameter;
+
+/**
+ * InterfaceTransformer
+ *
+ * Created: 7 nov. 2009
+ *
+ * @author fdesbois
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+public class InterfaceTransformer extends ObjectModelTransformerToJava {
+
+ private static final Log log = LogFactory.getLog(InterfaceTransformer.class);
+
+ @Override
+ public void transformFromInterface(ObjectModelInterface interfacez) {
+ if (!interfacez.getStereotypes().isEmpty()) {
+ // can only generate an interface with there is no other stereotypes
+ return;
+ }
+
+ ObjectModelInterface resultInterface = createInterface(interfacez.getName(), interfacez.getPackageName());
+
+ // extend interface
+ Iterator<ObjectModelInterface> it = interfacez.getInterfaces().iterator();
+ if (it.hasNext()) {
+ ObjectModelInterface extend = it.next();
+ addInterface(resultInterface, extend.getQualifiedName());
+ }
+
+ // constant attributes
+ for (ObjectModelAttribute attr : interfacez.getAttributes()) {
+ if (!attr.isStatic() && StringUtils.isNotEmpty(attr.getDefaultValue())) { // only static attribut with value
+ addConstant(resultInterface, attr.getName(), attr.getType(), attr.getDefaultValue(), ObjectModelModifier.PUBLIC);
+ }
+ }
+
+ // interface operations
+ for (ObjectModelOperation op : interfacez.getOperations()) {
+ ObjectModelOperation resultOp = addOperation(resultInterface, op.getName(), op.getReturnType());
+ for (ObjectModelParameter param : op.getParameters()) {
+ addParameter(resultOp, param.getType(), param.getName());
+ }
+ for (String exception : op.getExceptions()) {
+ addException(resultOp, exception);
+ }
+ }
+ }
+}
Deleted: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaBean.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaBean.java 2009-12-14 13:35:57 UTC (rev 1703)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaBean.java 2009-12-14 13:52:49 UTC (rev 1704)
@@ -1,424 +0,0 @@
-/*
- * *##%
- * ToPIA - Persistence
- * Copyright (C) 2007 - 2009 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>.
- * ##%*
- */
-package org.nuiton.topia.generator;
-
-import org.apache.commons.lang.StringUtils;
-import org.nuiton.eugene.GeneratorUtil;
-import org.nuiton.eugene.java.ObjectModelTransformerToJava;
-import org.nuiton.eugene.models.object.*;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/*{generator option: parentheses = false}*/
-
-/*{generator option: writeString = +}*/
-/**
- * BeanTransformer
- * <p/>
- * Created: 28 oct. 2009
- *
- * @author fdesbois
- * @version $Revision: 692 $
- * <p/>
- * Mise a jour: $Date: 2009-11-04 18:41:32 +0100 (mer. 04 nov. 2009) $
- * par : $Author: fdesbois $
- */
-public class ObjectModelTransformerToJavaBean extends ObjectModelTransformerToJava {
-
- private static final Log log = LogFactory.getLog(ObjectModelTransformerToJavaBean.class);
-
- @Override
- public void transformFromClass(ObjectModelClass clazz) {
- if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_BEAN) &&
- !clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) {
- return;
- }
-
- ObjectModelClass resultClass;
- if (clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_BEAN)) {
- resultClass = createAbstractClass(clazz.getName(), clazz.getPackageName());
- } else {
- resultClass = createClass(clazz.getName(), clazz.getPackageName());
- }
-
- List<ObjectModelAttribute> attributes = (List<ObjectModelAttribute>) clazz.getAttributes();
-
- createForDTO(resultClass, clazz, attributes);
-
- // Set superclass
- Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
- if (j.hasNext()) {
- ObjectModelClass p = j.next();
- setSuperClass(resultClass, p.getQualifiedName());
- }
-
- // Add interfaces from inputModel
- for (ObjectModelInterface parentInterface : clazz.getInterfaces()) {
- addInterface(resultClass, parentInterface.getQualifiedName());
- }
-
- // Default constructor
- ObjectModelOperation constructor = addConstructor(resultClass, ObjectModelModifier.PUBLIC);
-
- createListeners(resultClass, clazz);
-
- boolean hasEntity = false;
- boolean hasMultipleAttribute = false;
- String toStringAppend = ""; // Append pour la méthode toString()
- String initTabs = ""; // initialisation des tableaux dans le constructeur
-
- // Add attributes with getter/setter
- for (ObjectModelAttribute attr : attributes) {
-
- if (attr.isNavigable() || attr.hasAssociationClass()) {
- String attrType = attr.getType();
- String simpleType = GeneratorUtil.getSimpleName(attrType);
- String attrName = attr.getName();
- String attrNameCapitalized = StringUtils.capitalize(attrName);
-
- // multiple attribute
- if (attr.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ARRAY)) {
-
- int maxSize = attr.getMaxMultiplicity();
- int maxSizeMoinsUn = maxSize - 1;
-
- initTabs += "\n\tthis." + attrName + " = new " + attrType + "[" + maxSize + "];";
-
- // Set Value
- ObjectModelOperation setValue = addOperation(resultClass, "set" + attrNameCapitalized,
- "void", ObjectModelModifier.PUBLIC);
- addParameter(setValue, "int", "index");
- addParameter(setValue, attrType, "value");
- addException(setValue, "java.lang.ArrayIndexOutOfBoundsException");
- setOperationBody(setValue, ""
- /*{
- if (index >= <%=maxSize%> || index < 0) {
- throw new ArrayIndexOutOfBoundsException("Wrong index [" + index + "] for array <%=attrName%>," +
- "index must be between 0 and <%=maxSizeMoinsUn%>");
- }
- <%=simpleType%>[] oldValue = get<%=attrNameCapitalized%>();
- this.<%=attrName%>[index] = value;
- firePropertyChange("<%=attrName%>", oldValue, this.<%=attrName%>);
- }*/
- );
-
- // Get Value
- ObjectModelOperation getValue = addOperation(resultClass, "get" + attrNameCapitalized,
- attrType, ObjectModelModifier.PUBLIC);
- addParameter(getValue, "int", "index");
- addException(setValue, "java.lang.ArrayIndexOutOfBoundsException");
- setOperationBody(getValue, ""
- /*{
- if (index >= <%=maxSize%> || index < 0) {
- throw new ArrayIndexOutOfBoundsException("Wrong index [" + index + "] for array <%=attrName%>," +
- "index must be between 0 and <%=maxSizeMoinsUn%>");
- }
- return this.<%=attrName%>[index];
- }*/
- );
-
- attrType += "[]";
- simpleType = GeneratorUtil.getSimpleName(attrType);
- } else if (GeneratorUtil.isNMultiplicity(attr)) {
- hasMultipleAttribute = true;
-
- // Add getChild
- ObjectModelOperation getChild = addOperation(resultClass, "get" + attrNameCapitalized,
- attrType, ObjectModelModifier.PUBLIC);
- addParameter(getChild, "int", "index");
- setOperationBody(getChild, ""
- /*{
- <%=simpleType%> o = getChild(<%=attrName%>, index);
- return o;
- }*/
- );
-
- // Add getEntity
- ObjectModelClass attrEntity = null;
- if (getModel().hasClass(attr.getType())) {
- attrEntity = getModel().getClass(attr.getType());
- }
- boolean isEntity = (attrEntity != null && attrEntity.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY));
-
- if (isEntity) {
- hasEntity = true;
- ObjectModelOperation getChildEntity = addOperation(resultClass, "get" + attrNameCapitalized,
- attrType, ObjectModelModifier.PUBLIC);
- addParameter(getChildEntity, String.class.getName(), "topiaId");
- setOperationBody(getChildEntity, ""
- /*{
- <%=simpleType%> o = getEntity(<%=attrName%>, topiaId);
- return o;
- }*/
- );
- }
-
- // Add addChild
- ObjectModelOperation addChild = addOperation(resultClass, "add" + attrNameCapitalized,
- attrType, ObjectModelModifier.PUBLIC);
- addParameter(addChild, attrType, attrName);
- setOperationBody(addChild, ""
-
- /*{
- get<%=attrNameCapitalized%>().add(<%=attrName%>);
- firePropertyChange("<%=attrName%>", null, <%=attrName%>);
- return <%=attrName%>;
- }*/
- );
-
- // Add removeChild
- ObjectModelOperation removeChild = addOperation(resultClass, "remove" + attrNameCapitalized,
- "boolean", ObjectModelModifier.PUBLIC);
- addParameter(removeChild, attrType, attrName);
- setOperationBody(removeChild, ""
-
- /*{
- boolean removed = get<%=attrNameCapitalized%>().remove(<%=attrName%>);
- if (removed) {
- firePropertyChange("<%=attrName%>", <%=attrName%>, null);
- }
- return removed;
- }*/
- );
-
- // Change type for Multiple attribute
- if (attr.isOrdered()) {
- attrType = List.class.getName() + "<" + attrType + ">";
- } else {
- attrType = Collection.class.getName() + "<" + attrType + ">";
- }
- simpleType = GeneratorUtil.getSimpleName(attrType);
- } // end multiple attribute
-
- if (attr.hasAssociationClass()) {
- String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
- attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName);
- attrType = attr.getAssociationClass().getName();
- }
-
- // Add attribute to the class
- String visibility = attr.getVisibility();
- addAttribute(resultClass, attrName, attrType, "", ObjectModelModifier.toValue(visibility));
-
- // Add getter operation
- ObjectModelOperation getter = addOperation(resultClass, "get" + attrNameCapitalized, attrType,
- ObjectModelModifier.PUBLIC);
- setOperationBody(getter, ""
- /*{
- return this.<%=attrName%>;
- }*/
- );
-
- // Add setter operation
- ObjectModelOperation setter = addOperation(resultClass, "set" + attrNameCapitalized, "void",
- ObjectModelModifier.PUBLIC);
- addParameter(setter, attrType, "newValue");
- setOperationBody(setter, ""
- /*{
- <%=simpleType%> oldValue = get<%=attrNameCapitalized%>();
- this.<%=attrName%> = newValue;
- firePropertyChange("<%=attrName%>", oldValue, newValue);
- }*/
- );
-
- // toString append for toString method
- toStringAppend += "\n\t\t.append(\"" + attrName + "\", this." + attrName + ")";
-
- }
- }
-
- // Add helper operations
- if (hasMultipleAttribute) {
- ObjectModelOperation getChild = addOperation(resultClass, "getChild", "<T> T",
- ObjectModelModifier.PROTECTED);
- addParameter(getChild, "java.util.Collection<T>", "childs");
- addParameter(getChild, "int", "index");
- setOperationBody(getChild, ""
- /*{
- if (childs != null) {
- int i = 0;
- for (T o : childs) {
- if (index == i) {
- return o;
- }
- i++;
- }
- }
- return null;
- }*/
- );
- }
-
- if (hasEntity) {
- ObjectModelOperation getEntity = addOperation(resultClass, "getEntity",
- "<T extends org.nuiton.topia.persistence.TopiaEntity> T", ObjectModelModifier.PROTECTED);
- addParameter(getEntity, "java.util.Collection<T>", "childs");
- addParameter(getEntity, "java.lang.String", "topiaId");
- setOperationBody(getEntity, ""
- /*{
- if (childs != null) {
- for (T o : childs) {
- if (topiaId.equals(o.getTopiaId())) {
- return o;
- }
- }
- }
- return null;
- }*/
- );
- }
-
- // Set body for default constructor
- setOperationBody(constructor, ""
- /*{
- pcs = new PropertyChangeSupport(this);<%=initTabs%>
- }*/
- );
-
- // Add operations
- for (ObjectModelOperation op : clazz.getOperations()) {
- String visibility = op.getVisibility();
- ObjectModelOperation resultOperation = addOperation(resultClass, op.getName(), op.getReturnType(),
- ObjectModelModifier.toValue(visibility), ObjectModelModifier.ABSTRACT);
-
- for (ObjectModelParameter param : op.getParameters()) {
- addParameter(resultOperation, param.getType(), param.getName());
- }
-
- for (String exception : op.getExceptions()) {
- addException(resultOperation, exception);
- }
- }
-
- // Add toString operation
- ObjectModelOperation toString = addOperation(resultClass, "toString", "java.lang.String",
- ObjectModelModifier.PUBLIC); // FIXME manque Override
- addImport(resultClass, "org.apache.commons.lang.builder.ToStringBuilder");
- setOperationBody(toString, ""
- /*{
- String result = new ToStringBuilder(this)<%=toStringAppend%>.
- toString();
- return result;
- }*/
- );
-
- }
-
- private void createForDTO(ObjectModelClass resultClass, ObjectModelClass inputClass, List<ObjectModelAttribute> attributes) {
-
- // Add Serializable implements for DTO generation
- if (!inputClass.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) {
- return;
-
- }
-
- addInterface(resultClass, "java.io.Serializable");
- String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", inputClass, getModel());
- if (svUID != null) {
- addConstant(resultClass, "serialVersionUID", "long", svUID, ObjectModelModifier.PUBLIC);
- }
-
- for (ObjectModelDependency dependency : inputClass.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 (TopiaGeneratorUtil.isPrimitiveType(attr) || TopiaGeneratorUtil.isDateType(attr)) {
- attributes.add(attr);
- }
- }
- }
- }
- }
-
- protected void createListeners(ObjectModelClass resultClass, ObjectModelClass inputClass) {
-
- addAttribute(resultClass, "pcs", "java.beans.PropertyChangeSupport", "",
- ObjectModelModifier.PROTECTED, ObjectModelModifier.FINAL);
-
- // Add PropertyListener
- String propType = "java.beans.PropertyChangeListener";
- String strType = String.class.getName();
- String objectType = Object.class.getName();
-
- ObjectModelOperation addPropertyChangeListener = addOperation(resultClass,
- "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
- addParameter(addPropertyChangeListener, propType, "listener");
- setOperationBody(addPropertyChangeListener, ""
- /*{
- pcs.addPropertyChangeListener(listener);
- }*/
- );
-
- ObjectModelOperation addPropertyChangeListenerPlus = addOperation(resultClass,
- "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
- addParameter(addPropertyChangeListenerPlus, strType, "propertyName");
- addParameter(addPropertyChangeListenerPlus, propType, "listener");
- setOperationBody(addPropertyChangeListenerPlus, ""
- /*{
- pcs.addPropertyChangeListener(propertyName, listener);
- }*/
- );
-
- ObjectModelOperation removePropertyChangeListener = addOperation(resultClass,
- "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
- addParameter(removePropertyChangeListener, propType, "listener");
- setOperationBody(removePropertyChangeListener, ""
- /*{
- pcs.removePropertyChangeListener(listener);
- }*/
- );
-
- ObjectModelOperation removePropertyChangeListenerPlus = addOperation(resultClass,
- "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC);
- addParameter(removePropertyChangeListenerPlus, strType, "propertyName");
- addParameter(removePropertyChangeListenerPlus, propType, "listener");
- setOperationBody(removePropertyChangeListenerPlus, ""
- /*{
- pcs.removePropertyChangeListener(propertyName, listener);
- }*/
- );
-
- ObjectModelOperation firePropertyChange = addOperation(resultClass,
- "firePropertyChange", "void", ObjectModelModifier.PROTECTED);
- addParameter(firePropertyChange, strType, "propertyName");
- addParameter(firePropertyChange, objectType, "oldValue");
- addParameter(firePropertyChange, objectType, "newValue");
- setOperationBody(firePropertyChange, ""
- /*{
- pcs.firePropertyChange(propertyName, oldValue, newValue);
- }*/
- );
- }
-
-
-}
Deleted: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaInterface.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaInterface.java 2009-12-14 13:35:57 UTC (rev 1703)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/ObjectModelTransformerToJavaInterface.java 2009-12-14 13:52:49 UTC (rev 1704)
@@ -1,64 +0,0 @@
-
-package org.nuiton.topia.generator;
-
-import java.util.Iterator;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.java.ObjectModelTransformerToJava;
-import org.nuiton.eugene.models.object.ObjectModelAttribute;
-import org.nuiton.eugene.models.object.ObjectModelInterface;
-import org.nuiton.eugene.models.object.ObjectModelModifier;
-import org.nuiton.eugene.models.object.ObjectModelOperation;
-import org.nuiton.eugene.models.object.ObjectModelParameter;
-
-/**
- * InterfaceTransformer
- *
- * Created: 7 nov. 2009
- *
- * @author fdesbois
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public class ObjectModelTransformerToJavaInterface extends ObjectModelTransformerToJava {
-
- private static final Log log = LogFactory.getLog(ObjectModelTransformerToJavaInterface.class);
-
- @Override
- public void transformFromInterface(ObjectModelInterface interfacez) {
- if (!interfacez.getStereotypes().isEmpty()) {
- // can only generate an interface with there is no other stereotypes
- return;
- }
-
- ObjectModelInterface resultInterface = createInterface(interfacez.getName(), interfacez.getPackageName());
-
- // extend interface
- Iterator<ObjectModelInterface> it = interfacez.getInterfaces().iterator();
- if (it.hasNext()) {
- ObjectModelInterface extend = it.next();
- addInterface(resultInterface, extend.getQualifiedName());
- }
-
- // constant attributes
- for (ObjectModelAttribute attr : interfacez.getAttributes()) {
- if (!attr.isStatic() && StringUtils.isNotEmpty(attr.getDefaultValue())) { // only static attribut with value
- addConstant(resultInterface, attr.getName(), attr.getType(), attr.getDefaultValue(), ObjectModelModifier.PUBLIC);
- }
- }
-
- // interface operations
- for (ObjectModelOperation op : interfacez.getOperations()) {
- ObjectModelOperation resultOp = addOperation(resultInterface, op.getName(), op.getReturnType());
- for (ObjectModelParameter param : op.getParameters()) {
- addParameter(resultOp, param.getType(), param.getName());
- }
- for (String exception : op.getExceptions()) {
- addException(resultOp, exception);
- }
- }
- }
-}
1
0
r1703 - branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Dec '09
by tchemit@users.nuiton.org 14 Dec '09
14 Dec '09
Author: tchemit
Date: 2009-12-14 14:35:57 +0100 (Mon, 14 Dec 2009)
New Revision: 1703
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java
Log:
fix transformer on DAOAbstract
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2009-12-14 11:36:47 UTC (rev 1702)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2009-12-14 13:35:57 UTC (rev 1703)
@@ -403,13 +403,13 @@
}*/
);
- op = addOperation(result, "findAllBy" + StringUtils.capitalize(attrName), "E", ObjectModelModifier.PUBLIC);
+ op = addOperation(result, "findAllBy" + StringUtils.capitalize(attrName), "List<E>", ObjectModelModifier.PUBLIC);
addException(op, TopiaException.class);
addParameter(op, attrType, "v");
- setDocumentation(op, "Retourne le premier élément trouvé ayant comme valeur pour l'attribut" + attrName + " le paramètre.");
+ setDocumentation(op, "Retourne les éléments ayant comme valeur pour l'attribut " + attrName + " le paramètre.");
setOperationBody(op,""
/*{
- E result = findByProperty("<%=propertyName%>", v);
+ List<E> result = findAllByProperty("<%=propertyName%>", v);
return result;
}*/
);
1
0
r1702 - in branches/from2.2.2-eugene2-beta/topia-persistence: . src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Dec '09
by tchemit@users.nuiton.org 14 Dec '09
14 Dec '09
Author: tchemit
Date: 2009-12-14 12:36:47 +0100 (Mon, 14 Dec 2009)
New Revision: 1702
Added:
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java
Modified:
branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java
branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java
Log:
- add deprecated on old generators
- add new transformers
- remove unecessary default constructors
- reformat code
- use Tranformers in TopiaMetaGenerator
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/pom.xml 2009-12-14 11:36:47 UTC (rev 1702)
@@ -163,15 +163,8 @@
<templates>org.nuiton.topia.generator.TopiaMetaGenerator,
org.nuiton.topia.generator.ObjectModelTransformerToJavaInterface,
org.nuiton.topia.generator.ObjectModelTransformerToJavaBean,
- org.nuiton.topia.generator.DAOHelperTransformer,
- org.nuiton.topia.generator.DAOTransformer,
- org.nuiton.topia.generator.DAOAbstractTransformer
+ org.nuiton.topia.generator.EntityDTOTransformer
</templates>
- <excludeTemplates>
- <template>org.nuiton.topia.generator.DAOHelperGenerator</template>
- <template>org.nuiton.topia.generator.DAOGenerator</template>
- <template>org.nuiton.topia.generator.DAOAbstractGenerator</template>
- </excludeTemplates>
<defaultPackage>org.nuiton.topia</defaultPackage>
<extraClassPathDirectory>target/classes</extraClassPathDirectory>
</configuration>
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -39,7 +39,12 @@
import org.nuiton.eugene.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}.
+ */
+@Deprecated
public class DAOImplGenerator extends ObjectModelGenerator {
@Override
Added: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -0,0 +1,49 @@
+package org.nuiton.topia.generator;
+
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+
+/**
+ * Created: 14 déc. 2009
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com> Copyright Code Lutin
+ * @version $Revision$
+ * <p/>
+ * Mise a jour: $Date$ par :
+ * $Author: tchemit $
+ */
+public class DAOImplTransformer extends ObjectModelTransformerToJava {
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY) || hasDAOOperations(clazz)) {
+ return;
+ }
+ String clazzName = clazz.getName();
+ String clazzFQN = clazz.getQualifiedName();
+ ObjectModelClass result = createClass(clazzName + "DAOImpl<E extends " + clazzName + ">", clazz.getPackageName());
+ setDocumentation(result, "/**\n" +
+ " Implantation du DAO pour l'entité " + clazzName + ".\n" +
+ " * L'utilisateur peut remplacer cette classe par la sienne en la mettant \n" +
+ " * simplement dans ces sources. Cette classe générée sera alors simplement\n" +
+ " * écrasée\n" +
+ " */");
+ setSuperClass(result, clazzFQN + "DAOAbstract<E>");
+ }
+
+ /**
+ * 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;
+ }
+}
\ No newline at end of file
Property changes on: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -60,13 +60,8 @@
/**
* Logger for this class
*/
- private static final Log log = LogFactory
- .getLog(DTOGenerator.class);
+ private static final Log log = LogFactory.getLog(DTOGenerator.class);
- public DTOGenerator() {
- super();
- }
-
@Override
public String getFilenameForClass(ObjectModelClass clazz) {
return clazz.getQualifiedName().replace('.', File.separatorChar) + "DTO.java";
@@ -96,7 +91,7 @@
import java.util.Collection;
/**
- * DTO implantation for <%=GeneratorUtil.capitalize(clazzName)%> entity.
+ * DTO implantation for <%=StringUtils.capitalize(clazzName)%> entity.
*)
public class <%=clazzName%>DTO}*/
@@ -541,4 +536,4 @@
}*/
}
-} //EntityDTOGenerator
+} //DTOGenerator
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityAbstractGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -61,8 +61,7 @@
public class EntityAbstractGenerator extends ObjectModelGenerator {
/** Logger for this class */
- private static final Log log = LogFactory
- .getLog(EntityAbstractGenerator.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
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -55,19 +55,18 @@
* 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}.
*/
+@Deprecated
public class EntityDTOGenerator extends ObjectModelGenerator {
/**
* Logger for this class
*/
- private static final Log log = LogFactory
- .getLog(EntityDTOGenerator.class);
+ private static final Log log = LogFactory.getLog(EntityDTOGenerator.class);
- public EntityDTOGenerator() {
- super();
- }
-
@Override
public String getFilenameForClass(ObjectModelClass clazz) {
return clazz.getQualifiedName().replace('.', File.separatorChar) + "DTO.java";
Added: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -0,0 +1,296 @@
+package org.nuiton.topia.generator;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.nuiton.eugene.GeneratorUtil;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.*;
+import static org.nuiton.topia.generator.TopiaGeneratorUtil.hasUnidirectionalRelationOnAbstractType;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+
+
+/*{generator option: parentheses = false}*/
+
+/*{generator option: writeString = +}*/
+
+/**
+ * Created: 14 déc. 2009
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com> Copyright Code Lutin
+ * @version $Revision$
+ * <p/>
+ * Mise a jour: $Date$ par :
+ * $Author: tchemit $
+ */
+public class EntityDTOTransformer extends ObjectModelTransformerToJava {
+
+ public boolean isEntity(String type) {
+ ObjectModelClassifier clazz = model.getClassifier(type);
+ return clazz != null && clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY);
+ }
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
+ return;
+ }
+ String clazzName = clazz.getName();
+ ObjectModelClass result;
+ result = createClass(clazzName + "DTO", clazz.getPackageName());
+ addImport(result, ToStringBuilder.class);
+ addImport(result, PropertyChangeListener.class);
+
+ setDocumentation(result, "Implantation DTO pour l'entité " + StringUtils.capitalize(clazzName) + ".");
+ String extendClass = "";
+ for (ObjectModelClass parent : clazz.getSuperclasses()) {
+ extendClass = parent.getQualifiedName() + "DTO";
+ // no multi-inheritance in java
+ break;
+ }
+ if (extendClass.length() > 0) {
+ setSuperClass(result, extendClass);
+ }
+ addInterface(result, Serializable.class);
+
+ String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model);
+ if (svUID != null) {
+ addAttribute(result, "serialVersionUID", "long", svUID, ObjectModelModifier.FINAL, ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC);
+ }
+
+ ObjectModelAttribute attr2;
+ 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;
+ }
+
+//FIXME : make annotation possible
+// if (attr.hasTagValue(TAG_ANNOTATION)) {
+// String annotation = attr.getTagValue(TAG_ANNOTATION);
+//{ <%=annotation%>
+//}*/
+// }
+
+ String attrVisibility = attr.getVisibility();
+ ObjectModelModifier modifier = ObjectModelModifier.toValue(attrVisibility);
+ if (!attr.hasAssociationClass()) {
+ String attrType = attr.getType();
+ String attrName = attr.getName();
+ if (isEntity(attrType)) {
+ attrType += "DTO";
+ }
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+ attr2 = addAttribute(result, attrName, attrType, null, modifier);
+ } else {
+ attr2 = addAttribute(result, attrName, attrType + "[]", null, modifier);
+ }
+ } else {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+ attr2 = addAttribute(result, GeneratorUtil.toLowerCaseFirstLetter(assocAttrName), assocClassFQN + "DTO", null, modifier);
+ } else {
+ attr2 = addAttribute(result, GeneratorUtil.toLowerCaseFirstLetter(assocAttrName), assocClassFQN + "DTO[]", null, modifier);
+ }
+ }
+ if (attr2 != null) {
+ if (TopiaGeneratorUtil.hasDocumentation(attr)) {
+ setDocumentation(attr2, attr.getDocumentation());
+ }
+ }
+ }
+
+ //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();
+ ObjectModelModifier modifier = ObjectModelModifier.toValue(attrVisibility);
+ String attrType = attr.getType();
+ String attrName = attr.getName();
+ if (isEntity(attrType)) {
+ attrType += "DTO";
+ }
+ attr2 = addAttribute(result, GeneratorUtil.toLowerCaseFirstLetter(attrName), attrType, null, modifier);
+ }
+ }
+ }
+
+ addAttribute(result,"p", PropertyChangeSupport.class,"new PropertyChangeSupport(this)",ObjectModelModifier.PROTECTED,ObjectModelModifier.FINAL);
+
+ ObjectModelOperation op;
+ op = addOperation(result, "addPropertyChangeListener", "void");
+ addParameter(op,PropertyChangeListener.class,"listener");
+ setOperationBody(op,""
+/*{
+ p.addPropertyChangeListener(listener);
+ }*/
+ );
+
+ op = addOperation(result, "addPropertyChangeListener", "void");
+ addParameter(op, String.class, "propertyName");
+ addParameter(op, PropertyChangeListener.class, "listener");
+ setOperationBody(op, ""
+/*{
+ p.addPropertyChangeListener(propertyName, listener);
+ }*/
+ );
+
+ op = addOperation(result, "removePropertyChangeListener", "void");
+ addParameter(op, PropertyChangeListener.class, "listener");
+ setOperationBody(op, ""
+/*{
+ p.removePropertyChangeListener(listener);
+ }*/
+ );
+
+ op = addOperation(result, "removePropertyChangeListener", "void");
+ addParameter(op, String.class, "propertyName");
+ addParameter(op, PropertyChangeListener.class, "listener");
+ setOperationBody(op, ""
+/*{
+ 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";
+ }
+ String capitalizedAttrName = StringUtils.capitalize(attrName);
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+ op = addOperation(result, "set" + capitalizedAttrName, "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType, "value");
+ setOperationBody(op, ""
+/*{
+ <%=attrType%> oldValue = this.<%=attrName%>;
+ this.<%=attrName%> = value;
+ p.firePropertyChange("<%=attrName%>", oldValue, value);
+ }*/
+ );
+
+ op = addOperation(result, "get" + capitalizedAttrName, attrType, ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=attrName%>;
+ }*/
+ );
+
+ } else {
+
+ op = addOperation(result, "set" + capitalizedAttrName, "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, attrType+"[]", "values");
+ setOperationBody(op, ""
+/*{
+ <%=attrType%>[] oldValues = this.<%=attrName%>;
+ this.<%=attrName%> = values;
+ p.firePropertyChange("<%=attrName%>", oldValues, values);
+ }*/
+ );
+
+ op = addOperation(result, "get" + capitalizedAttrName, attrType+"[]", ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=attrName%>;
+ }*/
+ );
+ }
+ } else {
+ String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr);
+ String propertyName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName);
+ String assocClassFQN = attr.getAssociationClass().getQualifiedName();
+ String capitaliedAttrName = StringUtils.capitalize(assocAttrName);
+ if (!GeneratorUtil.isNMultiplicity(attr)) {
+ op = addOperation(result, "set" + capitaliedAttrName, "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, assocClassFQN + "DTO", "association");
+ setOperationBody(op, ""
+/*{
+ <%=assocClassFQN%>DTO oldAssocation= this.<%=propertyName%>;
+ this.<%=propertyName%> = association;
+ p.firePropertyChange("<%=attrName%>", oldAssocation, assocation);
+ }*/
+ );
+
+ op = addOperation(result, "get" + capitaliedAttrName, assocClassFQN + "DTO", ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return <%=propertyName%>;
+ }*/
+ );
+
+ } else {
+ op = addOperation(result, "set" + capitaliedAttrName, "void", ObjectModelModifier.PUBLIC);
+ addParameter(op, assocClassFQN + "DTO[]", "values");
+ setOperationBody(op, ""
+/*{
+ <%=assocClassFQN%>DTO[] oldValues = this.<%=propertyName%>;
+ this.<%=propertyName%> = values;
+ p.firePropertyChange("<%=attrName%>", oldValues, values);
+ }*/
+ );
+
+ op = addOperation(result, "get" + capitaliedAttrName, assocClassFQN + "DTO[]", ObjectModelModifier.PUBLIC);
+ setOperationBody(op, ""
+/*{
+ return this.<%=propertyName%>;
+ }*/
+ );
+ }
+ }
+ }
+
+ op = addOperation(result,"toString",String.class, ObjectModelModifier.PUBLIC);
+ StringBuilder buffer = new StringBuilder();
+
+ buffer.append(""
+/*{
+ 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();
+ buffer.append(""
+/*{ append("<%=attrName%>", this.<%=attrName%>).
+}*/
+ );
+ }
+ }
+ buffer.append(""
+/*{ toString();
+ return result;
+}*/
+ );
+ setOperationBody(op, buffer.toString());
+ }
+}
Property changes on: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -43,6 +43,12 @@
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}.
+ */
+@Deprecated
public class EntityImplGenerator extends ObjectModelGenerator {
private static final Log log = LogFactory.getLog(EntityImplGenerator.class);
@@ -94,7 +100,6 @@
}*/
}
-
protected boolean isAbstract(ObjectModelClass clazz) {
if (clazz.isAbstract()) {
return true;
Added: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java (rev 0)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -0,0 +1,110 @@
+package org.nuiton.topia.generator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.java.ObjectModelTransformerToJava;
+import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+/**
+ * Created: 14 déc. 2009
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com> Copyright Code Lutin
+ * @version $Revision$
+ * <p/>
+ * Mise a jour: $Date$ par :
+ * $Author: tchemit $
+ */
+public class EntityImplTransformer extends ObjectModelTransformerToJava {
+
+ /**
+ * Logger
+ */
+ private static final Log log = LogFactory.getLog(EntityImplTransformer.class);
+
+ @Override
+ public void transformFromClass(ObjectModelClass clazz) {
+ 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 clazzName = clazz.getName();
+ String clazzFQN = clazz.getQualifiedName();
+ ObjectModelClass result;
+ if (isAbstract(clazz)) {
+ result = createAbstractClass(clazzName + "Impl", clazz.getPackageName());
+ } else {
+ result = createClass(clazzName + "Impl", clazz.getPackageName());
+ }
+ setDocumentation(result, "Implantation des operations pour l'entité " + clazzName + ".");
+ setSuperClass(result, clazzFQN + "Abstract");
+ addInterface(result, Serializable.class);
+ addInterface(result, clazzFQN);
+
+ }
+
+ 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) {
+ if (log.isDebugEnabled()) {
+ log.debug(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;
+ }
+}
\ No newline at end of file
Property changes on: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityImplTransformer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityInterfaceGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -76,9 +76,6 @@
return interfacez.getQualifiedName().replace('.', File.separatorChar) + ".java";
}
- /* (non-Javadoc)
- * @see org.nuiton.eugene.ObjectModelGenerator#generateFromInterface(java.io.Writer, org.nuiton.eugene.models.object.ObjectModelInterface)
- */
@Override
public void generateFromInterface(Writer output, ObjectModelInterface interfacez) throws IOException {
if (!interfacez.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) {
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaJavaValidator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -42,15 +42,12 @@
/**
* Constructor.
*
- * @param model
+ * @param model model to validate
*/
public TopiaJavaValidator(ObjectModel model) {
super(model);
}
- /*
- * @see org.nuiton.eugene.models.object.validator.ObjectModelValidator#validateAttribute(org.nuiton.eugene.models.object.ObjectModelAttribute)
- */
@Override
protected boolean validateAttribute(ObjectModelAttribute attr) {
@@ -77,9 +74,6 @@
}
- /*
- * @see org.nuiton.eugene.models.object.validator.ObjectModelValidator#validateClass(org.nuiton.eugene.models.object.ObjectModelClass)
- */
@Override
protected boolean validateClass(ObjectModelClass clazz) {
@@ -102,9 +96,6 @@
return isValid;
}
- /*
- * @see org.nuiton.eugene.models.object.validator.ObjectModelValidator#validateModel(org.nuiton.eugene.models.object.ObjectModel)
- */
@Override
protected boolean validateModel(ObjectModel model) {
@@ -114,7 +105,7 @@
/**
* Returns true if s is a legal Java identifier.
*
- * @param s
+ * @param s string to test
* @return true if s is a legal Java identifier
*/
public static boolean isJavaIdentifier(String s) {
Modified: branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java
===================================================================
--- branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java 2009-12-14 11:31:08 UTC (rev 1701)
+++ branches/from2.2.2-eugene2-beta/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaMetaGenerator.java 2009-12-14 11:36:47 UTC (rev 1702)
@@ -32,7 +32,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.AbstractGenerator;
import org.nuiton.eugene.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;
@@ -57,19 +60,25 @@
/**
* la liste des generateurs par defaut a utiliser
*/
- protected static final List<Class<? extends ObjectModelGenerator>> DEFAULT_GENERATORS = java.util.Collections
+ protected static final List<Class<? extends Template<ObjectModel>>> DEFAULT_GENERATORS = java.util.Collections
.unmodifiableList(Arrays.asList(
EntityInterfaceGenerator.class,
EntityAbstractGenerator.class,
- EntityImplGenerator.class,
+ EntityImplTransformer.class,
+// EntityImplGenerator.class,
EntityHibernateMappingGenerator.class,
- DAOGenerator.class,
- DAOImplGenerator.class,
- DAOAbstractGenerator.class,
+ DAOTransformer.class,
+ DAOImplTransformer.class,
+ DAOAbstractTransformer.class,
+ DAOHelperTransformer.class
+// DAOGenerator.class,
+// DAOImplGenerator.class,
+// DAOAbstractGenerator.class,
- DAOHelperGenerator.class));
+// DAOHelperGenerator.class)
+ ));
protected boolean validateModel(ObjectModel model) {
List<ObjectModelValidator> validators = new ArrayList<ObjectModelValidator>();
@@ -93,10 +102,8 @@
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");
+ 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));
@@ -134,8 +141,8 @@
public void generatePersistence(ObjectModel model, File destDir)
throws IOException {
- for (Class<? extends ObjectModelGenerator> generatorClass : DEFAULT_GENERATORS) {
- ObjectModelGenerator generator;
+ for (Class<? extends Template<ObjectModel>> generatorClass : DEFAULT_GENERATORS) {
+ Template<ObjectModel> generator;
if (getExcludeTemplates().contains(generatorClass.getName())) {
// exclude generator
log.info("exclude generator " + generatorClass);
@@ -144,8 +151,15 @@
try {
generator = generatorClass.newInstance();
- generator.setParent(this);
+ // 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()) {
1
0