r668 - in branches/1.1.0-Javabuilder: eugene/src/main/java/org/nuiton/eugene eugene/src/main/java/org/nuiton/eugene/models/object/builder eugene/src/main/java/org/nuiton/eugene/models/object/xml eugene/src/test/java/org/nuiton/eugene eugene-test eugene-test/src/main/java/org/nuiton/eugene/java eugene-test/src/main/java/org/nuiton/eugene/test/generator eugene-test/src/main/models eugene-test/src/test/java/org/nuiton/eugene/java
Author: fdesbois Date: 2009-10-29 18:47:57 +0100 (Thu, 29 Oct 2009) New Revision: 668 Added: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilder.java branches/1.1.0-Javabuilder/eugene-test/src/main/models/dtotest2.objectmodel Removed: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilderHelper.java Modified: branches/1.1.0-Javabuilder/eugene-test/nbactions.xml branches/1.1.0-Javabuilder/eugene-test/pom.xml branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaGenerator.java branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/OM2JavaTransformer.java branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java branches/1.1.0-Javabuilder/eugene-test/src/test/java/org/nuiton/eugene/java/JavaBuilderHelperTest.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/builder/JavaBuilder.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java Log: - Fusion JavaBuilderHelper / JavaBuilder / OM2JavaTransformer for ObjectModel manipulation (with imports) -> JavaBuilder - Refactor TestBuilder - Optimize GeneratorUtil for imports managment - Continue translation BeanGenerator to BeanTransformer - Improve JavaGenerator usage - Clean ObjectModelTransformer Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2009-10-29 17:47:57 UTC (rev 668) @@ -333,19 +333,23 @@ /** * + * @deprecated use StringUtils.capitalize instead * @param word * @return */ + @Deprecated public static String toUpperCaseFirstLetter(String word) { return capitalize(word); } /** * Capitalizes a String changing the first letter to title case. - * + * + * @deprecated use StringUtils.capitalize instead * @param word word to Capitalize * @return Capitalized word */ + @Deprecated public static String capitalize(String word) { return StringUtils.capitalize(word); } @@ -593,7 +597,11 @@ * @return the simple name associated to the str given */ public static String getSimpleName(String str) { - return str.replaceAll("\\w+\\.",""); + if (str.startsWith("\"") && str.endsWith("\"")) { + return str; + } + //return str.replaceAll("[a-zA-Z]\\w*\\.",""); + return str.replaceAll("\\p{Alpha}\\w*\\.",""); } public static Set<String> getTypesList(String str) { Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java 2009-10-29 17:47:57 UTC (rev 668) @@ -27,51 +27,43 @@ protected abstract O initOutputModel(); /** + * Le model associé au transformer est le model d'entree. Le modele de sortie + * peut etre initialiser via la methode {@link #initOutputModel()}. Il est également + * possible de surcharger la methode {@link #debugOutputModel()} pour verifier le resultat + * de la transformation. * Par defaut la methode appelle la methode * {@link #transformFromModel(ObjectModel)} puis boucle sur chaque - * class en appelant la m?thode - * {@link #generateFromClass(Writer, ObjectModelClass)} puis boucle sur chaque - * interface en appelant a méthode - * {@link #generateFromInterface(Writer, ObjectModelInterface)} et enfin sur chaque - * énumération en appelant la méthode - * {@link #generateFromEnumeration(Writer, ObjectModelEnumeration)} - * Le nom de fichier est récupérer pour chacun d'eux en appelant la méthode - * getFilenameFor.... La methode generateFrom... n'utilise pas le Writer - * alors le fichier n'est pas généré, si on l'utilise m?me pour ne rien - * écrire alors le fichier sera généré. + * class en appelant la methode + * {@link #transformFromClass(ObjectModelClass)} puis boucle sur chaque + * interface en appelant a methode + * {@link #transformFromInterface(ObjectModelInterface)} et enfin sur chaque + * enumeration en appelant la methode + * {@link #transformFromEnumeration(ObjectModelEnumeration)} * - * @param model - * @param destDir + * @param model inputModel to transform + * @param destDir destination folder for generation after transformation */ @Override public void generate(ObjectModel model, File destDir) { - // generateFromModel this.model = model; // inputModel + initOutputModel(); - //try { - //String filename = getFilenameForModel(model); transformFromElement(model, ObjectModelType.OBJECT_MODEL); - // generateFromClassifier + // transformFromClassifier transformFromElements(model.getClassifiers(), ObjectModelType.OBJECT_MODEL_CLASSIFIER); - // generateFromInterface + // transformFromInterface transformFromElements(model.getInterfaces(), ObjectModelType.OBJECT_MODEL_INTERFACE); - // generateFromClass + // transformFromClass transformFromElements(model.getClasses(), ObjectModelType.OBJECT_MODEL_CLASS); - // generateFromEnumeration + // transformFromEnumeration transformFromElements(model.getEnumerations(), ObjectModelType.OBJECT_MODEL_ENUMERATION); - /*} catch (IOException eee) { - if (log.isWarnEnabled()) { - log.warn("Unable to generate for file", eee); - } - }*/ - debugOutputModel(); outputGenerator.generate(getOutputModel(), destDir); @@ -80,14 +72,13 @@ protected abstract void debugOutputModel(); /** - * Parcours une collection d'éléments pour la génération suivant un type d'éléments. + * Parcours une collection d'éléments pour la transformation suivant un type d'éléments. * Types possibles : ObjectModelClassifier, ObjectModelClass, ObjectModelInterface et * ObjectModelEnumeration. - * Deux méthodes dépendent du type et peuvent être surchargées : - * getFilenameForXXX et generateFromXXX (XXX étant un type prédéfini pour une méthode existante). + * Une méthode dépend du type et peut être surchargée : + * transformFromXXX (XXX étant un type prédéfini pour une méthode existante). * * @param elements Collection d'éléments d'un des types ci-dessus - * @param destDir dossier de destination pour le fichier généré * @param type type explicite d'ObjectModel * @see ObjectModelType */ @@ -95,22 +86,6 @@ ObjectModelType type) { for (ObjectModelElement element : elements) { - String filename = ""; - // Filename depends on type of element (Classifier, Class, Interface or Enumeration) - switch (type) { - case OBJECT_MODEL_CLASSIFIER: - filename = getFilenameForClassifier((ObjectModelClassifier) element); - break; - case OBJECT_MODEL_INTERFACE: - filename = getFilenameForInterface((ObjectModelInterface) element); - break; - case OBJECT_MODEL_CLASS: - filename = getFilenameForClass((ObjectModelClass) element); - break; - case OBJECT_MODEL_ENUMERATION: - filename = getFilenameForEnumeration((ObjectModelEnumeration) element); - } - transformFromElement(element, type); } } @@ -119,11 +94,9 @@ * Génération pour un élément du modèle (ou le modèle lui-même). * Types possibles : ObjectModel, ObjectModelClassifier, ObjectModelClass, * ObjectModelInterface et ObjectModelEnumeration. - * La méthode generateFromXXX dépend du type d'élément et peut être surchargée. + * La méthode transformFromXXX dépend du type d'élément et peut être surchargée. * * @param element element à généré - * @param destDir dossier de destination - * @param filename nom du fichier de sortie * @param type type d'ObjectModel * @see ObjectModelType */ @@ -148,67 +121,6 @@ } } - /** - * Par defaut cette methode retourne le getName du model. Si l'on souhaite - * utiliser la methode generateFromModel il vaut mieux surcharger cette - * methode - * - * @param model - * @return - */ - public String getFilenameForModel(ObjectModel model) { - return model.getName(); - } - - /** - * Par defaut cette methode retourne le QualifiedName convertie en chemin - * par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto - * - * @param model - * @param packageName - * @return - */ - public String getFilenameForPackage(ObjectModel model, String packageName) { - return packageName.replace('.', File.separatorChar); - } - - /** - * Par defaut cette methode retourne le QualifiedName convertie en chemin - * par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto - * - * @param interfacez - * @return - */ - public String getFilenameForInterface(ObjectModelInterface interfacez) { - return interfacez.getQualifiedName().replace('.', File.separatorChar); - } - - /** - * Par defaut cette methode retourne le QualifiedName convertie en chemin - * par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto - * - * @param clazz - * @return - */ - public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar); - } - - /** - * Par defaut cette methode retourne le QualifiedName convertie en chemin - * par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto - * - * @param clazz - * @return - */ - public String getFilenameForClassifier(ObjectModelClassifier clazz) { - return clazz.getQualifiedName().replace('.', File.separatorChar); - } - - public String getFilenameForEnumeration(ObjectModelEnumeration enumeration) { - return enumeration.getQualifiedName().replace('.', File.separatorChar); - } - public void transformFromModel(ObjectModel model) { } Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/builder/JavaBuilder.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/builder/JavaBuilder.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/builder/JavaBuilder.java 2009-10-29 17:47:57 UTC (rev 668) @@ -22,7 +22,9 @@ /** * * @author fdesbois + * @deprecated use org.nuiton.eugene.java.JavaBuilder */ +@Deprecated public abstract class JavaBuilder { private static final Log log = LogFactory.getLog(JavaBuilder.class); Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelBuilderHelper.java 2009-10-29 17:47:57 UTC (rev 668) @@ -41,33 +41,30 @@ */ public class ObjectModelBuilderHelper { - public static final boolean PROP_SET_STATIC = true; - public static final boolean PROP_SET_NO_STATIC = false; - /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ObjectModelBuilderHelper.class); - public ObjectModelClass createClass(String name, String packageName) { + public static ObjectModelClass createClass(String name, String packageName) { ObjectModelClassImpl result = new ObjectModelClassImpl(); result.setName(name); result.setPackage(packageName); return result; } - public ObjectModelClass createAbstractClass(String name, String packageName) { + public static ObjectModelClass createAbstractClass(String name, String packageName) { ObjectModelClassImpl result = (ObjectModelClassImpl) createClass(name,packageName); result.setAbstract(true); return result; } - public ObjectModelInterface createInterface(String name, String packageName) { + public static ObjectModelInterface createInterface(String name, String packageName) { ObjectModelInterfaceImpl result = new ObjectModelInterfaceImpl(); result.setName(name); result.setPackage(packageName); return result; } - public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value, + public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value, String visibility, boolean isStatic, boolean isFinal) { ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); attribute.setFinal(isFinal); @@ -82,33 +79,32 @@ return attribute; } - public ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value, String visibility) { + public static ObjectModelAttribute addConstant(ObjectModelClassifier classifier, String name, String type, String value, String visibility) { return addAttribute(classifier, name, type, value, visibility, true, true); } - public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value) { + public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type, String value) { return addAttribute(classifier, name, type, value, "protected", false, false); } - public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) { + public static ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String name, String type) { return addAttribute(classifier, name, type, "", "protected", false, false); } - public ObjectModelOperation addOperation(ObjectModelClassifier clazz, - String name, String returnType, String... inputParameters) { + public static ObjectModelOperation addOperation(ObjectModelClassifier clazz, + String visibility, String name, String returnType, String... inputParameters) { ObjectModelOperationImpl result = new ObjectModelOperationImpl(); result.setName(name); result.setName(name); result.setVisibility("public"); - ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); - if (returnType == null) { - returnType = "void"; - } - returnParameter.setType(returnType); + + if (returnType != null) { + ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); + returnParameter.setType(returnType); + result.setReturnParameter(returnParameter); + } - result.setReturnParameter(returnParameter); - int nbParameters = inputParameters.length; if (nbParameters %2 != 0) { throw new IllegalArgumentException("Unccorect number of parameters (" + nbParameters + ") : " + @@ -126,12 +122,12 @@ return result; } - public void setOperationBody(ObjectModelOperation operation, String body) { + public static void setOperationBody(ObjectModelOperation operation, String body) { ObjectModelOperationImpl operationImpl = (ObjectModelOperationImpl) operation; operationImpl.setBodyCode(body); } - public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { + public static void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { ObjectModelClassifierImpl impl = (ObjectModelClassifierImpl) classifier; ObjectModelImplRef interfacez = new ObjectModelImplRef(); @@ -140,7 +136,7 @@ impl.addInterface(interfacez); } - public void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) { + public static void addSuperclass(ObjectModelClass clazz, String superclassQualifiedName) { ObjectModelClassImpl impl = (ObjectModelClassImpl) clazz; ObjectModelImplRef superclass = new ObjectModelImplRef(); @@ -149,7 +145,7 @@ impl.addSuperclass(superclass); } - public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { + public static ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation; ObjectModelParameterImpl param = new ObjectModelParameterImpl(); param.setType(type); @@ -158,7 +154,7 @@ return param; } - public void addException(ObjectModelOperation operation, String exception) { + public static void addException(ObjectModelOperation operation, String exception) { ObjectModelOperationImpl impl = (ObjectModelOperationImpl) operation; ObjectModelParameterImpl param = new ObjectModelParameterImpl(); param.setType(exception); Modified: branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2009-10-29 17:47:57 UTC (rev 668) @@ -94,6 +94,18 @@ result = GeneratorUtil.getSimpleName(str); log.info(str + " -> " + result); assertEquals(expResult, result); + + str = "2.0"; + expResult = "2.0"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "\"eric.chatellier\""; + expResult = "\"eric.chatellier\""; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); } @Test Modified: branches/1.1.0-Javabuilder/eugene-test/nbactions.xml =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/nbactions.xml 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/nbactions.xml 2009-10-29 17:47:57 UTC (rev 668) @@ -7,6 +7,7 @@ <goal>clean</goal> <goal>install</goal> <goal>-e</goal> + <goal>-Dlog4j.configuration=file:src/test/resources/log4j.properties</goal> </goals> </action> </actions> Modified: branches/1.1.0-Javabuilder/eugene-test/pom.xml =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/pom.xml 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/pom.xml 2009-10-29 17:47:57 UTC (rev 668) @@ -93,12 +93,12 @@ <artifactId>maven-eugene-plugin</artifactId> <version>${project.version}</version> <executions> - <!--execution> + <execution> <id>Test Regression Generator</id> <phase>generate-test-sources</phase> <configuration> <reader>org.nuiton.eugene.ObjectModelReader</reader> - <includes>**/*.objectmodel</includes> + <includes>dtotest.objectmodel</includes> <templates>org.nuiton.eugene.test.generator.BeanGenerator</templates> <defaultPackage>org.nuiton.eugene.test</defaultPackage> <extraClassPathDirectory>target/classes</extraClassPathDirectory> @@ -109,13 +109,12 @@ <goals> <goal>generate</goal> </goals> - </execution--> + </execution> <execution> <id>Test Java Generator</id> <phase>generate-test-sources</phase> <configuration> <reader>org.nuiton.eugene.test.generator.TestReader</reader> - <includes>**/*.objectmodel</includes> <templates>org.nuiton.eugene.java.JavaGenerator</templates> <defaultPackage>org.nuiton.eugene.test</defaultPackage> <extraClassPathDirectory>target/classes</extraClassPathDirectory> @@ -132,7 +131,7 @@ <phase>generate-test-sources</phase> <configuration> <reader>org.nuiton.eugene.ObjectModelReader</reader> - <includes>**/*.objectmodel</includes> + <includes>dtotest2.objectmodel</includes> <templates>org.nuiton.eugene.test.generator.BeanTransformer</templates> <defaultPackage>org.nuiton.eugene.test</defaultPackage> <extraClassPathDirectory>target/classes</extraClassPathDirectory> @@ -145,6 +144,13 @@ </goals> </execution> </executions> + <dependencies> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.14</version> + </dependency> + </dependencies> </plugin> <!--plugin> Added: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilder.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilder.java (rev 0) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilder.java 2009-10-29 17:47:57 UTC (rev 668) @@ -0,0 +1,320 @@ +package org.nuiton.eugene.java; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.ImportsManager; +import org.nuiton.eugene.models.object.*; +import org.nuiton.eugene.models.object.xml.*; + +/** + * JavaBuilder + * <p/> + * Created: 29 oct. 2009 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + * <p/> + */ +public class JavaBuilder { + + private static final Log log = LogFactory.getLog(JavaBuilder.class); + + protected ObjectModelImpl model; + + public JavaBuilder(String modelName) { + this.model = new ObjectModelImpl(); + this.model.setName(modelName); + } + + public ObjectModel getModel() { + return this.model; + } + + protected ImportsManager getImportsManager(ObjectModelClassifier classifier) { + ImportsManager manager = model.getExtension(classifier.getQualifiedName(), ImportsManager.class); + if (manager == null) { + manager = new ImportsManager(); + model.addExtension(classifier.getQualifiedName(), manager); + if (log.isDebugEnabled()) { + log.debug("Add new importsManager for : " + classifier.getQualifiedName()); + } + } + return manager; + } + + /*protected void addImportForClassifier(ObjectModelClassifier classifier, String imports) { + ImportsManager manager = getImportsManager(classifier); + manager.addImport(imports); + } + + protected void addImportForClassifier(ObjectModelClassifier classifier, Class<?> imports) { + ImportsManager manager = getImportsManager(classifier); + manager.addImport(imports); + }*/ + + public void addImport(ObjectModelClassifier classifier, String imports) { + ImportsManager manager = getImportsManager(classifier); + for (String oneType : GeneratorUtil.getTypesList(imports)) { + manager.addImport(oneType); + if (log.isDebugEnabled()) { + log.debug("Add import for : " + classifier.getQualifiedName() + " _ import: " + oneType); + } + } + } + + public ObjectModelClass createClass(String name, String packageName) { + ObjectModelClassImpl clazz = + (ObjectModelClassImpl)ObjectModelBuilderHelper.createClass(name, packageName); + model.addClass(clazz); + return clazz; + } + + public ObjectModelClass createAbstractClass(String name, String packageName) { + ObjectModelClassImpl clazz = + (ObjectModelClassImpl)ObjectModelBuilderHelper.createAbstractClass(name, packageName); + model.addClass(clazz); + return clazz; + } + + public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) { + ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier; + impl.getSuperclasses().clear(); // suppress all existing superclass: only one can be set for java + ObjectModelBuilderHelper.addSuperclass(impl, superclassQualifiedName); + this.addImport(classifier, superclassQualifiedName); + } + + public void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { + ObjectModelBuilderHelper.addInterface(classifier, interfaceQualifiedName); + this.addImport(classifier, interfaceQualifiedName); + } + + /** + * Add attribute to a classifier with properties in parse string. + * Use java syntax to define properties of the attribute : + * ex : "public static final java.util.Date maDate = new java.util.Date()" + * + * @param classifier the classifier to add the attribute + * @param parse the properties of the attribute to parse + * @return a new ObjectModelAttribute corresponding to the new attribute added to the classifier + * @throws IllegalArgumentException + */ + public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse) + throws IllegalArgumentException { + ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); + String result = parse; + try { + // Visibility + if (parse.contains("public ")) { + attribute.setVisibility("public"); + result = parse.replace("public ", ""); + } else if (parse.contains("protected ")) { + attribute.setVisibility("protected"); + result = parse.replace("protected ", ""); + } else if (parse.contains("private ")) { + attribute.setVisibility("private"); + result = parse.replace("private ", ""); + } else { + attribute.setVisibility(""); + } + + // Static + if (result.contains("static ")) { + attribute.setStatic(true); + result = result.replace("static ", ""); + } + // Final + if (result.contains("final ")) { + attribute.setFinal(true); + result = result.replace("final ", ""); + } + + // Type + int typeIndex = result.indexOf(" "); + String type = result.substring(0, typeIndex).trim(); + attribute.setType(type); + result = result.substring(typeIndex + 1); + + // Name + int nameIndex = result.indexOf("="); + String name = ""; + if (nameIndex != -1) { + name = result.substring(0, nameIndex).trim(); + result = result.substring(nameIndex); + + // DefaultValue + int equalsIndex = result.indexOf("="); + String value = result.substring(equalsIndex + 1).trim(); + attribute.setDefaultValue(value); + + //if (value.contains("new ")) { + this.addImport(classifier, value); + //} + + } else { // Il ne reste que le nom si pas de = + name = result; + } + attribute.setName(name); + + ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; + classifierImpl.addAttribute(attribute); + this.addImport(classifier, attribute.getType()); + } catch (StringIndexOutOfBoundsException eee) { + throw new IllegalArgumentException("Can't add Attribute : Illegal parse parameter : " + + "input = " + parse + " _ current = " + result, eee); + } + return attribute; + } + + public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) { + this.addImport(classifier, attribute.getType()); + return ObjectModelBuilderHelper.addAttribute(classifier, attribute.getName(), attribute.getType(), + attribute.getDefaultValue(), attribute.getVisibility(), attribute.isStatic(), attribute.isFinal()); + } + + public ObjectModelOperation addConstructor(ObjectModelClass clazz, String visibility) { + return ObjectModelBuilderHelper.addOperation(clazz, visibility, clazz.getName(), null); + } + + /** + * Attention ne marche pas pour les constructeur !!! + * Attention ne marche pas pour les generic du type : <T extends Plop> T myMethod !!! + * @param classifier + * @param parse + * @return + * @throws IllegalArgumentException + */ + public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse) + throws IllegalArgumentException { + ObjectModelOperationImpl operation = new ObjectModelOperationImpl(); + String result = ""; + + try { + // Visibility + if (parse.contains("public ")) { + operation.setVisibility("public"); + result = parse.replace("public ", ""); + } else if (parse.contains("protected ")) { + operation.setVisibility("protected"); + result = parse.replace("protected ", ""); + } else if (parse.contains("private ")) { + operation.setVisibility("private"); + result = parse.replace("private ", ""); + } else { + operation.setVisibility(""); + } + + // Static + if (result.contains("static ")) { + operation.setStatic(true); + result = result.replace("static ", ""); + } + // Abstract + if (result.contains("abstract ")) { + operation.setAbstract(true); + result = result.replace("abstract ", ""); + } + + // Return Parameter + int typeIndex = result.indexOf(" "); + String type = result.substring(0, typeIndex).trim(); + result = result.substring(typeIndex + 1); + + // TROP COMPLEXE pour les generic du type <T extends Plop> T myMethod + /*if (log.isDebugEnabled()) { + log.debug ("type : " + type + " _ result= " + result); + } + if (type.contains("<")) { // Generic : <T extends Plop> T myMethod + int endGeneric = result.indexOf(">"); // index de fin du generic + type += result.substring(0, endGeneric).trim(); // type = <T extends Plop> + if (log.isDebugEnabled()) { + log.debug ("type : " + type + " _ result= " + result); + } + result = result.substring(endGeneric + 1).trim(); // result = T myMethod + if (log.isDebugEnabled()) { + log.debug ("type : " + type + " _ result= " + result); + } + typeIndex = result.indexOf(" "); + type += " " + result.substring(0, typeIndex).trim(); // type = <T extends Plop> T + if (log.isDebugEnabled()) { + log.debug ("type : " + type + " _ result= " + result); + } + result = result.substring(typeIndex + 1); // result = myMethod + if (log.isDebugEnabled()) { + log.debug ("type : " + type + " _ result= " + result); + } + }*/ + ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); + returnParameter.setType(type); + operation.setReturnParameter(returnParameter); + + if (log.isDebugEnabled()) { + log.debug("parse before name : " + result); + } + + int nameIndex = result.indexOf("("); + String methodName = ""; + if (nameIndex != -1) { + methodName = result.substring(0, nameIndex).trim(); + result = result.substring(nameIndex); + + // Input parameters + if (result.contains("(")) { + int parentheseIndex = result.indexOf("("); + int parentheseEndIndex = result.indexOf(")"); + result = result.substring(parentheseIndex + 1, parentheseEndIndex); + + String paramName = ""; + for (String param : result.split(",")) { + typeIndex = param.indexOf(" "); + type = param.substring(0, typeIndex).trim(); + paramName = param.substring(typeIndex + 1).trim(); + + ObjectModelParameterImpl parameter = new ObjectModelParameterImpl(); + parameter.setType(type); + parameter.setName(paramName); + operation.addParameter(parameter); + } + } + + } else { // Il ne reste que le nom si pas de ( + methodName = result; + } + operation.setName(methodName); + + // Add operation to Classifier + ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; + classifierImpl.addOperation(operation); + // imports for returnType + this.addImport(classifier, operation.getReturnType()); + // imports for inputParameters + for (ObjectModelParameter parameter : operation.getParameters()) { + this.addImport(classifier, parameter.getType()); + } + } catch (StringIndexOutOfBoundsException eee) { + throw new IllegalArgumentException("Can't add Operation : Illegal parse parameter : " + + "input = " + parse + " _ current = " + result, eee); + } + return operation; + } + + public ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { + ObjectModelParameter param = ObjectModelBuilderHelper.addParameter(operation, type, name); + this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), type); + return param; + } + + public void addException(ObjectModelOperation operation, String exception) { + ObjectModelBuilderHelper.addException(operation, exception); + this.addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception); + } + + public void setOperationBody(ObjectModelOperation operation, String body) { + ObjectModelBuilderHelper.setOperationBody(operation, body); + } + + +} Deleted: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilderHelper.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilderHelper.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaBuilderHelper.java 2009-10-29 17:47:57 UTC (rev 668) @@ -1,202 +0,0 @@ -package org.nuiton.eugene.java; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelOperation; -import org.nuiton.eugene.models.object.xml.*; - -/** - * JavaBuilderHelper - * <p/> - * Created: 28 oct. 2009 - * - * @author fdesbois - * @version $Revision$ - * <p/> - * Mise a jour: $Date$ - * par : $Author$ - */ -public class JavaBuilderHelper extends ObjectModelBuilderHelper { - - private static final Log log = LogFactory.getLog(JavaBuilderHelper.class); - - /** - * Add attribute to a classifier with properties in parse string. - * Use java syntax to define properties of the attribute : - * ex : "public static final java.util.Date maDate = new java.util.Date()" - * - * @param classifier the classifier to add the attribute - * @param parse the properties of the attribute to parse - * @return a new ObjectModelAttribute corresponding to the new attribute added to the classifier - */ - public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse) { - ObjectModelAttributeImpl attribute = new ObjectModelAttributeImpl(); - - // Visibility - if (parse.contains("public ")) { - attribute.setVisibility("public"); - parse = parse.replace("public ", ""); - } else if (parse.contains("protected ")) { - attribute.setVisibility("protected"); - parse = parse.replace("protected ", ""); - } else if (parse.contains("private ")) { - attribute.setVisibility("private"); - parse = parse.replace("private ", ""); - } else { - attribute.setVisibility(""); - } - - // Static - if (parse.contains("static ")) { - attribute.setStatic(true); - parse = parse.replace("static ", ""); - } - // Final - if (parse.contains("final ")) { - attribute.setFinal(true); - parse = parse.replace("final ", ""); - } - - // Type - int typeIndex = parse.indexOf(" "); - String type = parse.substring(0, typeIndex).trim(); - attribute.setType(type); - parse = parse.substring(typeIndex + 1); - - // Name - int nameIndex = parse.indexOf("="); - String name = ""; - if (nameIndex != -1) { - name = parse.substring(0, nameIndex).trim(); - parse = parse.substring(nameIndex); - - // DefaultValue - int equalsIndex = parse.indexOf("="); - String value = parse.substring(equalsIndex + 1).trim(); - attribute.setDefaultValue(value); - - } else { // Il ne reste que le nom si pas de = - name = parse; - } - attribute.setName(name); - - ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; - classifierImpl.addAttribute(attribute); - return attribute; - } - - public ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse) - throws IllegalArgumentException { - ObjectModelOperationImpl operation = new ObjectModelOperationImpl(); - String result = ""; - - try { - // Visibility - if (parse.contains("public ")) { - operation.setVisibility("public"); - result = parse.replace("public ", ""); - } else if (parse.contains("protected ")) { - operation.setVisibility("protected"); - result = parse.replace("protected ", ""); - } else if (parse.contains("private ")) { - operation.setVisibility("private"); - result = parse.replace("private ", ""); - } else { - operation.setVisibility(""); - } - - // Static - if (result.contains("static ")) { - operation.setStatic(true); - result = result.replace("static ", ""); - } - // Abstract - if (result.contains("abstract ")) { - operation.setAbstract(true); - result = result.replace("abstract ", ""); - } - - // Return Parameter - int typeIndex = result.indexOf(" "); - String type = result.substring(0, typeIndex).trim(); - ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); - returnParameter.setType(type); - operation.setReturnParameter(returnParameter); - result = result.substring(typeIndex + 1); - - if (log.isDebugEnabled()) { - log.debug("parse before name : " + result); - } - - int nameIndex = result.indexOf("("); - String methodName = ""; - if (nameIndex != -1) { - methodName = result.substring(0, nameIndex).trim(); - result = result.substring(nameIndex); - - // Input parameters - if (result.contains("(")) { - int parentheseIndex = result.indexOf("("); - int parentheseEndIndex = result.indexOf(")"); - result = result.substring(parentheseIndex + 1, parentheseEndIndex); - - String paramName = ""; - for (String param : result.split(",")) { - typeIndex = param.indexOf(" "); - type = param.substring(0, typeIndex).trim(); - paramName = param.substring(typeIndex + 1).trim(); - - ObjectModelParameterImpl parameter = new ObjectModelParameterImpl(); - parameter.setType(type); - parameter.setName(paramName); - operation.addParameter(parameter); - } - } - - } else { // Il ne reste que le nom si pas de ( - methodName = result; - } - operation.setName(methodName); - - ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; - classifierImpl.addOperation(operation); - } catch (StringIndexOutOfBoundsException eee) { - throw new IllegalArgumentException("Can't add Operation : Illegal parse parameter : " + - "input = " + parse + " _ current = " + result, eee); - } - return operation; - } - - public ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) { - ObjectModelAttributeImpl impl = new ObjectModelAttributeImpl(); - impl.setType(attribute.getType()); - impl.setName(attribute.getName()); - impl.setVisibility(attribute.getVisibility()); - impl.setFinal(attribute.isFinal()); - impl.setStatic(attribute.isStatic()); - impl.setDefaultValue(attribute.getDefaultValue()); - - ObjectModelClassifierImpl classifierImpl = (ObjectModelClassifierImpl) classifier; - classifierImpl.addAttribute(impl); - return impl; - } - - public void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) { - ObjectModelClassImpl impl = (ObjectModelClassImpl) classifier; - impl.getSuperclasses().clear(); - addSuperclass(impl, superclassQualifiedName); - } - - public ObjectModelOperation addConstructor(ObjectModelClass clazz, String visibility) { - ObjectModelOperationImpl operation = new ObjectModelOperationImpl(); - operation.setVisibility(visibility); - operation.setName(clazz.getName()); - - ObjectModelClassImpl classifierImpl = (ObjectModelClassImpl) clazz; - classifierImpl.addOperation(operation); - return operation; - } -} Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaGenerator.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2009-10-29 17:47:57 UTC (rev 668) @@ -57,13 +57,13 @@ Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator(); if (j.hasNext()) { ObjectModelClassifier p = j.next(); - extend += p.getName(); + extend += GeneratorUtil.getSimpleName(p.getQualifiedName()); } String implement = ""; for (Iterator<ObjectModelInterface> i = clazz.getInterfaces().iterator(); i.hasNext();) { ObjectModelClassifier parentInterface = i.next(); - implement += parentInterface.getName(); + implement += GeneratorUtil.getSimpleName(parentInterface.getQualifiedName()); if (i.hasNext()) { implement += ", "; } @@ -132,12 +132,12 @@ String attrName = attr.getName(); String attrVisibility = attr.getVisibility(); String attrType = GeneratorUtil.getSimpleName(attr.getType()); - String attrStatic = attr.isStatic() ? " static " : " "; - String attrFinal = attr.isFinal() ? " final " : " "; + String attrStatic = attr.isStatic() ? " static" : ""; + String attrFinal = attr.isFinal() ? " final" : ""; String attrValue = attr.getDefaultValue() != null && !attr.getDefaultValue().isEmpty() ? " = " + GeneratorUtil.getSimpleName(attr.getDefaultValue()) : ""; -/*{ <%=attrVisibility%><%=attrStatic%><%=attrFinal%><%=attrType%> <%=attrName%><%=attrValue%>; +/*{ <%=attrVisibility%><%=attrStatic%><%=attrFinal%> <%=attrType%> <%=attrName%><%=attrValue%>; }*/ } } @@ -161,12 +161,12 @@ } String opVisibility = op.getVisibility(); String opStatic = op.isStatic() ? "static " : ""; - String opAbstract = op.isAbstract() ? " abstract " : ""; + String opAbstract = op.isAbstract() ? "abstract " : ""; ObjectModelParameter returnParam = op.getReturnParameter(); String opReturn = ""; if (returnParam != null) { - opReturn = GeneratorUtil.getSimpleName(returnParam.getType()); + opReturn = GeneratorUtil.getSimpleName(returnParam.getType()) + " "; if (!opReturn.equals("void")) { String paramDocumentation = returnParam.getDocumentation(); /*{ * @return <%=paramDocumentation%> @@ -174,7 +174,7 @@ } } /*{ *) - <%=opVisibility%> <%=opStatic%><%=opAbstract%><%=opReturn%> <%=opName%>(}*/ + <%=opVisibility%> <%=opStatic%><%=opAbstract%><%=opReturn%><%=opName%>(}*/ String comma = ""; for (ObjectModelParameter param : params) { String paramName = param.getName(); Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/OM2JavaTransformer.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/OM2JavaTransformer.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/java/OM2JavaTransformer.java 2009-10-29 17:47:57 UTC (rev 668) @@ -20,15 +20,14 @@ * Mise a jour: $Date$ * par : $Author$ */ -public class OM2JavaTransformer extends ObjectModelTransformer<ObjectModel> { +public abstract class OM2JavaTransformer extends ObjectModelTransformer<ObjectModel> { private static final Log log = LogFactory.getLog(OM2JavaTransformer.class); - private static JavaBuilderHelper helper = new JavaBuilderHelper(); + private JavaBuilder builder; public OM2JavaTransformer() { super(new JavaGenerator()); - this.outputModel = new ObjectModelImpl(); } @Override @@ -36,9 +35,9 @@ if (log.isInfoEnabled()) { log.debug("inputModelName = " + getModel().getName()); } - ObjectModelImpl impl = (ObjectModelImpl) getOutputModel(); - impl.setName(getModel().getName()); - return impl; + this.builder = new JavaBuilder(getModel().getName()); + this.outputModel = builder.getModel(); + return this.outputModel; } @Override @@ -61,103 +60,50 @@ } } - public JavaBuilderHelper getHelper() { - return helper; - } - - protected ImportsManager getImportsManager(ObjectModelClassifier classifier) { - ObjectModelImpl impl = (ObjectModelImpl) getOutputModel(); - ImportsManager manager = impl.getExtension(classifier.getQualifiedName(), ImportsManager.class); - if (manager == null) { - manager = new ImportsManager(); - impl.addExtension(classifier.getQualifiedName(), manager); - if (log.isDebugEnabled()) { - log.debug("Add new importsManager for : " + classifier.getQualifiedName()); - } - } - return manager; - } - - /*protected void addImportForClassifier(ObjectModelClassifier classifier, String imports) { - ImportsManager manager = getImportsManager(classifier); - manager.addImport(imports); - } - - protected void addImportForClassifier(ObjectModelClassifier classifier, Class<?> imports) { - ImportsManager manager = getImportsManager(classifier); - manager.addImport(imports); - }*/ - protected ObjectModelClass createClass(String name, String packageName) { - ObjectModelClassImpl clazz = new ObjectModelClassImpl(); - clazz.setName(name); - clazz.setPackage(packageName); - ObjectModelImpl impl = (ObjectModelImpl) getOutputModel(); - impl.addClass(clazz); - return clazz; + return builder.createClass(name, packageName); } protected ObjectModelClass createAbstractClass(String name, String packageName) { - ObjectModelClassImpl clazz = (ObjectModelClassImpl) createClass(name, packageName); - clazz.setAbstract(true); - return clazz; + return builder.createAbstractClass(name, packageName); } - private void addImport(ObjectModelClassifier classifier, String imports) { - ImportsManager manager = getImportsManager(classifier); - for (String oneType : GeneratorUtil.getTypesList(imports)) { - manager.addImport(oneType); - if (log.isDebugEnabled()) { - log.debug("Add import for : " + classifier.getQualifiedName() + " _ import: " + oneType); - } - } - } - protected void setSuperClass(ObjectModelClass classifier, String superclassQualifiedName) { - getHelper().setSuperClass(classifier, superclassQualifiedName); - addImport(classifier, superclassQualifiedName); + builder.setSuperClass(classifier, superclassQualifiedName); } protected void addInterface(ObjectModelClassifier classifier, String interfaceQualifiedName) { - getHelper().addInterface(classifier, interfaceQualifiedName); - addImport(classifier, interfaceQualifiedName); + builder.addInterface(classifier, interfaceQualifiedName); } - protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse) { - ObjectModelAttribute attribute = getHelper().addAttribute(classifier, parse); - addImport(classifier, attribute.getType()); - return attribute; + protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, String parse) + throws IllegalArgumentException { + return builder.addAttribute(classifier, parse); } protected ObjectModelAttribute addAttribute(ObjectModelClassifier classifier, ObjectModelAttribute attribute) { - ObjectModelAttribute result = getHelper().addAttribute(classifier, attribute); - if (log.isDebugEnabled()) { - log.debug("add attribute : " + result.getVisibility() + " " + result.getType() + " " + result.getName()); - } - addImport(classifier, result.getType()); - return result; + return builder.addAttribute(classifier, attribute); } - protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse) { - ObjectModelOperation operation = getHelper().addOperation(classifier, parse); - // imports for returnType - addImport(classifier, operation.getReturnType()); - // imports for inputParameters - for (ObjectModelParameter parameter : operation.getParameters()) { - addImport(classifier, parameter.getType()); - } - return operation; + protected ObjectModelOperation addConstructor(ObjectModelClass clazz, String visibility) { + return builder.addConstructor(clazz, visibility); } + protected ObjectModelOperation addOperation(ObjectModelClassifier classifier, String parse) + throws IllegalArgumentException { + return builder.addOperation(classifier, parse); + } + protected ObjectModelParameter addParameter(ObjectModelOperation operation, String type, String name) { - ObjectModelParameter param = getHelper().addParameter(operation, type, name); - addImport((ObjectModelClassifier) operation.getDeclaringElement(), type); - return param; + return builder.addParameter(operation, type, name); } protected void addException(ObjectModelOperation operation, String exception) { - getHelper().addException(operation, exception); - addImport((ObjectModelClassifier) operation.getDeclaringElement(), exception); + builder.addException(operation, exception); } + protected void setOperationBody(ObjectModelOperation operation, String body) { + builder.setOperationBody(operation, body); + } + } Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/BeanTransformer.java 2009-10-29 17:47:57 UTC (rev 668) @@ -1,5 +1,6 @@ package org.nuiton.eugene.test.generator; +import org.apache.commons.lang.StringUtils; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.OM2JavaTransformer; import org.nuiton.eugene.models.object.*; @@ -7,7 +8,9 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.Serializable; +import java.util.Collection; import java.util.Iterator; +import java.util.List; /*{generator option: parentheses = false}*/ @@ -38,55 +41,153 @@ ObjectModelClass resultClass = null; if (!clazz.getOperations().isEmpty()) { - resultClass = this.createAbstractClass(clazz.getName(), clazz.getPackageName()); + resultClass = createAbstractClass(clazz.getName(), clazz.getPackageName()); } else { - resultClass = this.createClass(clazz.getName(), clazz.getPackageName()); + resultClass = createClass(clazz.getName(), clazz.getPackageName()); } + createForDTO(resultClass, clazz); + // Set superclass Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator(); if (j.hasNext()) { ObjectModelClass p = j.next(); - this.setSuperClass(resultClass, p.getQualifiedName()); + setSuperClass(resultClass, p.getQualifiedName()); } // Add interfaces from inputModel for (Iterator<ObjectModelInterface> i = clazz.getInterfaces().iterator(); i.hasNext();) { ObjectModelClassifier parentInterface = i.next(); - this.addInterface(resultClass, parentInterface.getQualifiedName()); + addInterface(resultClass, parentInterface.getQualifiedName()); } - this.createListeners(resultClass, clazz); + createListeners(resultClass, clazz); - // Add attributes + boolean hasEntity = false; + boolean hasMultipleAttribute = false; + + // Add attributes with getter/setter for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (attr.isNavigable() || attr.hasAssociationClass()) { + if (attr.isNavigable()/* || attr.hasAssociationClass()*/) { + String attrType = attr.getType(); + String attrName = attr.getName(); + String attrNameCapitalized = StringUtils.capitalize(attrName); + // multiple attribute if (GeneratorUtil.isNMultiplicity(attr)) { + hasMultipleAttribute = true; + + // Add getChild + ObjectModelOperation getChild = addOperation(resultClass, + "public " + attrType + " get" + attrNameCapitalized + "(int index)"); + setOperationBody(getChild, "" + /*{ + <%=attrType%> 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, + "public " + attrType + " get" + attrNameCapitalized + "(" + String.class.getName() + " topiaId)"); + setOperationBody(getChildEntity, "" + /*{ + <%=attrType%> o = getEntity(<%=attrName%>, topiaId); + return o; + }*/ + ); + } + + // Add addChild + ObjectModelOperation addChild = addOperation(resultClass, + "public " + attrType + " add" + attrNameCapitalized + "(" + attrType + " " + attrName + ")"); + setOperationBody(addChild, "" + + /*{ + get<%=attrNameCapitalized%>().add(<%=attrName%>); + firePropertyChange("<%=attrName%>", null, <%=attrName%>); + return <%=attrName%>; + }*/ + ); + + // Add removeChild + ObjectModelOperation removeChild = addOperation(resultClass, + "public boolean remove" + attrNameCapitalized + "(" + 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()) { - //type = List.class.getName(); + attrType = List.class.getName() + "<" + attrType + ">"; } else { - //type = Collection.class.getName(); + attrType = Collection.class.getName() + "<" + attrType + ">"; } } - this.addAttribute(resultClass, attr); + if (attr.hasAssociationClass()) { + String assocAttrName = TopiaGeneratorUtil.getAssocAttrName(attr); + attrName = GeneratorUtil.toLowerCaseFirstLetter(assocAttrName); + attrType = attr.getAssociationClass().getName(); + } + + // Add attribute + addAttribute(resultClass, attr.getVisibility() + " " + attrType + " " + attrName); + + // Add getter + ObjectModelOperation getter = this.addOperation(resultClass, + "public " + attrType + " get" + attrNameCapitalized); + setOperationBody(getter, "" + /*{ + return this.<%=attrName%>; + }*/ + ); + + // Add setter + ObjectModelOperation setter = this.addOperation(resultClass, + "public void set" + attrNameCapitalized + "(" + attrType + " newValue)"); + setOperationBody(setter, "" + /*{ + <%=attrType%> oldValue = get<%=attrNameCapitalized%>(); + this.<%=attrName%> = newValue; + firePropertyChange("<%=attrName%>", oldValue, newValue); + }*/ + ); + } } + // Add helper methods + + // Add operations for (ObjectModelOperation op : clazz.getOperations()) { ObjectModelOperation resultOperation = this.addOperation(resultClass, op.getVisibility() + " abstract " + op.getReturnType() + " " + op.getName()); for (ObjectModelParameter param : op.getParameters()) { - ObjectModelParameter resultParameter = this.addParameter(resultOperation, + ObjectModelParameter resultParameter = addParameter(resultOperation, param.getType(), param.getName()); } for (String exception : op.getExceptions()) { - this.addException(resultOperation, exception); + addException(resultOperation, exception); } } } @@ -95,59 +196,71 @@ // Add Serializable implements for DTO generation if (inputClass.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DTO)) { - this.addInterface(resultClass, Serializable.class.getName()); + addInterface(resultClass, Serializable.class.getName()); } String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", inputClass, getModel()); - this.addAttribute(resultClass, "public static final long serialVersionUID = " + svUID); + if (svUID != null) { + addAttribute(resultClass, "public static final long serialVersionUID = " + svUID); + } } protected void createListeners(ObjectModelClass resultClass, ObjectModelClass inputClass) { - this.addAttribute(resultClass, "protected final " + PropertyChangeSupport.class.getName() + " pcs"); + addAttribute(resultClass, "protected final " + PropertyChangeSupport.class.getName() + " pcs"); // Default constructor - ObjectModelOperation constructor = getHelper().addConstructor(resultClass, "public"); - getHelper().setOperationBody(constructor, "" - /*{ - pcs = new PropertyChangeSupport(this); - }*/ + ObjectModelOperation constructor = addConstructor(resultClass, "public"); + setOperationBody(constructor, "" + /*{ + pcs = new PropertyChangeSupport(this); + }*/ ); // Add PropertyListener String propType = PropertyChangeListener.class.getName(); String strType = String.class.getName(); - ObjectModelOperation addPropertyChangeListener = this.addOperation(resultClass, + String objectType = Object.class.getName(); + + ObjectModelOperation addPropertyChangeListener = addOperation(resultClass, "public void addPropertyChangeListener(" + propType + " listener)"); - getHelper().setOperationBody(addPropertyChangeListener, "" - /*{ - pcs.addPropertyChangeListener(listener); - }*/ + setOperationBody(addPropertyChangeListener, "" + /*{ + pcs.addPropertyChangeListener(listener); + }*/ ); - ObjectModelOperation addPropertyChangeListenerPlus = this.addOperation(resultClass, + ObjectModelOperation addPropertyChangeListenerPlus = addOperation(resultClass, "public void addPropertyChangeListener(" + strType + " propertyName," + propType + " listener)"); - getHelper().setOperationBody(addPropertyChangeListenerPlus, "" - /*{ - pcs.addPropertyChangeListener(propertyName, listener); - }*/ + setOperationBody(addPropertyChangeListenerPlus, "" + /*{ + pcs.addPropertyChangeListener(propertyName, listener); + }*/ ); - ObjectModelOperation removePropertyChangeListener = this.addOperation(resultClass, + ObjectModelOperation removePropertyChangeListener = addOperation(resultClass, "public void removePropertyChangeListener(" + propType + " listener)"); - getHelper().setOperationBody(removePropertyChangeListener, "" - /*{ - pcs.removePropertyChangeListener(listener); - }*/ + setOperationBody(removePropertyChangeListener, "" + /*{ + pcs.removePropertyChangeListener(listener); + }*/ ); - ObjectModelOperation removePropertyChangeListenerPlus = this.addOperation(resultClass, + ObjectModelOperation removePropertyChangeListenerPlus = addOperation(resultClass, "public void removePropertyChangeListener(" + strType + " propertyName," + propType + " listener)"); - getHelper().setOperationBody(removePropertyChangeListenerPlus, "" - /*{ - pcs.removePropertyChangeListener(propertyName, listener); - }*/ + setOperationBody(removePropertyChangeListenerPlus, "" + /*{ + pcs.removePropertyChangeListener(propertyName, listener); + }*/ ); + + ObjectModelOperation firePropertyChange = addOperation(resultClass, + "protected void firePropertyChange(" + strType + " propertyName," + objectType + " oldValue, " + objectType + " newValue)"); + setOperationBody(firePropertyChange, "" + /*{ + pcs.firePropertyChange(propertyName, oldValue, newValue); + }*/ + ); } Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java 2009-10-29 17:47:57 UTC (rev 668) @@ -1,7 +1,7 @@ package org.nuiton.eugene.test.generator; -import org.nuiton.eugene.models.object.builder.JavaBuilder; +import org.nuiton.eugene.java.JavaBuilder; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelOperation; @@ -17,50 +17,46 @@ super("TestModel"); } - @Override + //@Override public void build() { createRole(); createPerson(); } private void createRole() { - ObjectModelClass roleClass = getHelper().createClass("Role", "org.chorem.bonzoms"); + ObjectModelClass roleClass = createClass("Role", "org.chorem.bonzoms"); - getHelper().addAttribute(roleClass, "name", "String"); + addAttribute(roleClass, "String name"); //this.addImportForClassifier(roleClass, Date.class); - getHelper().addAttribute(roleClass, "fromDate", "java.util.Date"); - getHelper().addAttribute(roleClass, "thruDate", "java.util.Date"); - - this.addClassToModel(roleClass); + addAttribute(roleClass, "java.util.Date fromDate"); + addAttribute(roleClass, "java.util.Date thruDate"); } private void createPerson() { - ObjectModelClass personneClass = getHelper().createClass("Person", "org.chorem.bonzoms"); + ObjectModelClass personneClass = createClass("Person", "org.chorem.bonzoms"); - getHelper().addAttribute(personneClass, "lastName", "java.lang.String"); - getHelper().addAttribute(personneClass, "firstName", "java.lang.String", "\"\""); + addAttribute(personneClass, "java.lang.String lastName"); + addAttribute(personneClass, "java.lang.String firstName = \"2.0\""); //this.addImportForClassifier(personneClass, List.class); - getHelper().addAttribute(personneClass, "roles", - "java.util.List<org.chorem.bonzoms.Role>", "new java.util.ArrayList<org.chorem.bonzoms.Role>()"); + addAttribute(personneClass, + "java.util.List<org.chorem.bonzoms.Role> roles = new java.util.ArrayList<org.chorem.bonzoms.Role>()"); - ObjectModelOperation setLastName = getHelper().addOperation(personneClass, "setLastName", null, "String", "lastName"); - getHelper().setOperationBody(setLastName, "" + ObjectModelOperation setLastName = addOperation(personneClass, "public void setLastName(String lastName)"); + setOperationBody(setLastName, "" /*{ this.lastName = lastName; }*/ ); - ObjectModelOperation getLastName = getHelper().addOperation(personneClass, "getLastName", "String"); - getHelper().setOperationBody(getLastName, "" + ObjectModelOperation getLastName = addOperation(personneClass, "public String getLastName"); + setOperationBody(getLastName, "" /*{ return this.lastName; }*/ ); - - this.addClassToModel(personneClass); } } Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java 2009-10-29 17:47:57 UTC (rev 668) @@ -19,11 +19,10 @@ */ public class TestReader extends ModelReader<ObjectModel> { - protected JavaBuilder builder; @Override public ObjectModel read(File[] file) { - builder = new TestBuilder(); + TestBuilder builder = new TestBuilder(); builder.build(); Added: branches/1.1.0-Javabuilder/eugene-test/src/main/models/dtotest2.objectmodel =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/models/dtotest2.objectmodel (rev 0) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/models/dtotest2.objectmodel 2009-10-29 17:47:57 UTC (rev 668) @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objectModel xmlns="http://www.codelutin.org/eugene/objectModel" name="TopiaTest" version="1"> + <class name="Personne" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <superclass name="org.nuiton.eugene.test2.Party2" discriminator=""/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="otherNames" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="0" maxMultiplicity="-1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Address" reverseAttributeName="" associationType="aggregate" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <class name="Employe" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <superclass name="org.nuiton.eugene.test2.Personne" discriminator=""/> + <attribute name="salary" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Company" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="false" ordering="unordered"/> + <attribute name="lead" visibility="public" type="org.nuiton.eugene.test2.Department" reverseAttributeName="leader" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="1" navigable="false" ordering="unordered"/> + </class> + <class name="Company" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Employe" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + <attribute visibility="public" associationClassName="org.nuiton.eugene.test2.Bill" type="org.nuiton.eugene.test2.Store" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Department" reverseAttributeName="" associationType="composite" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + </class> + <class name="Address" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="city" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="adress" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Personne" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="1" navigable="false" ordering="unordered"/> + </class> + <class name="Department" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="leader" visibility="public" type="org.nuiton.eugene.test2.Employe" reverseAttributeName="lead" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Company" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Product" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + </class> + <class name="Product" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Department" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="false" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Type" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <class name="Store" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="DEFAULT_NUM" associationType="composite" visibility="public" static="true" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="numStore" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <operation name="getDefaultNum" visibility="public" static="true"> + <returnParameter type="java.lang.String"/> + </operation> + <class name="Row" package="org.nuiton.eugene.test2"> + <attribute name="num" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="position" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + </class> + <attribute visibility="public" associationClassName="org.nuiton.eugene.test2.Bill" type="org.nuiton.eugene.test2.Company" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="0" maxMultiplicity="-1" navigable="false" ordering="unordered"/> + </class> + <class name="Type" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.Product" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="false" ordering="unordered"/> + </class> + <associationClass name="Bill" package="org.nuiton.eugene.test2"> + <stereotype name="entity"/> + <participant name="org.nuiton.eugene.test2.Company" attribute=""/> + <participant name="org.nuiton.eugene.test2.Store" attribute=""/> + <attribute name="cost" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="date" associationType="composite" visibility="public" type="java.util.Date" minMultiplicity="1" maxMultiplicity="1"/> + </associationClass> + <class name="Voiture" abstract="true" package="org.nuiton.eugene.test2.beangen"> + <stereotype name="bean"/> + <tagValue name="documentation" value="Doc for BeanA"/> + <interface name="org.nuiton.eugene.test2.beangen.Vehicule"/> + <attribute name="immatriculation" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"> + <tagValue name="documentation" value="attrA of BeanA"/> + </attribute> + <attribute name="modele" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="proprietaire" associationType="composite" visibility="public" type="org.nuiton.eugene.test2.Personne" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.beangen.Roue" reverseAttributeName="" associationType="composite" reverseMaxMultiplicity="1" minMultiplicity="4" maxMultiplicity="4" navigable="true" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.beangen.Siege" reverseAttributeName="" associationType="composite" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="4" navigable="true" ordering="unordered"/> + </class> + <class name="Roue" package="org.nuiton.eugene.test2.beangen"> + <stereotype name="bean"/> + <operation name="mount" visibility="public"> + <returnParameter type="void"/> + </operation> + <operation name="getModel" visibility="public"> + <returnParameter type="org.nuiton.eugene.test2.Product"/> + <parameter name="id" type="java.lang.String"/> + </operation> + <attribute visibility="public" type="org.nuiton.eugene.test2.beangen.Voiture" reverseAttributeName="" reverseMaxMultiplicity="4" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <class name="RelationDTO" package="org.nuiton.eugene.test2.beangen"> + <stereotype name="dto"/> + <attribute name="idCompany" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="idDepartement" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="dateDebut" associationType="composite" visibility="public" type="java.util.Date" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="person" visibility="public" type="org.nuiton.eugene.test2.beangen.PersonneDTO" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <class name="PersonneDTO" package="org.nuiton.eugene.test2.beangen"> + <dependency name="" supplierName="org.nuiton.eugene.test2.Personne"/> + <stereotype name="dto"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.beangen.RelationDTO" reverseAttributeName="person" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="false" ordering="unordered"/> + </class> + <class name="Siege" package="org.nuiton.eugene.test2.beangen"> + <stereotype name="bean"/> + <attribute name="noSerie" associationType="composite" visibility="public" type="int" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.eugene.test2.beangen.Voiture" reverseAttributeName="" reverseMaxMultiplicity="4" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <interface name="Vehicule" package="org.nuiton.eugene.test2.beangen"> + <operation name="start" visibility="public"> + <returnParameter type="void"/> + </operation> + </interface> + <class name="Contact2" package="org.nuiton.eugene.test2.deletetest"> + <stereotype name="entity"/> + <attribute name="contactValue" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="type" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <operation name="findAllByCompany" visibility="public"> + <returnParameter type="java.util.Set<Contact2>"/> + <parameter name="company" type="org.nuiton.eugene.test2.Company"/> + <stereotype name="dao"/> + </operation> + <attribute visibility="public" type="org.nuiton.eugene.test2.Party2" reverseAttributeName="contacts" reverseMaxMultiplicity="-1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + </class> + <class name="Telephone2" package="org.nuiton.eugene.test2.deletetest"> + <stereotype name="entity"/> + <superclass name="org.nuiton.eugene.test2.Contact2" discriminator=""/> + <attribute name="prefix" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="country" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + </class> + <class name="Party2" package="org.nuiton.eugene.test2.deletetest"> + <stereotype name="entity"/> + <attribute name="contacts" visibility="public" type="org.nuiton.eugene.test2.Contact2" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + </class> + <class name="Person" package="org.nuiton.topia.test.entities"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="firstname" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.topia.test.entities.Pet" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="0" maxMultiplicity="-1" navigable="true" ordering="unordered"/> + </class> + <class name="Pet" package="org.nuiton.topia.test.entities"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute name="type" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.topia.test.entities.Person" reverseAttributeName="" reverseMaxMultiplicity="-1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + <attribute visibility="public" type="org.nuiton.topia.test.entities.Race" reverseAttributeName="" associationType="composite" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="1" navigable="true" ordering="unordered"/> + </class> + <class name="Race" package="org.nuiton.topia.test.entities"> + <stereotype name="entity"/> + <attribute name="name" associationType="composite" visibility="public" type="java.lang.String" minMultiplicity="1" maxMultiplicity="1"/> + <attribute visibility="public" type="org.nuiton.topia.test.entities.Pet" reverseAttributeName="" reverseMaxMultiplicity="1" minMultiplicity="1" maxMultiplicity="1" navigable="false" ordering="unordered"/> + </class> + <class name="Set<Contact2>" package="java.util"/> +</objectModel> Modified: branches/1.1.0-Javabuilder/eugene-test/src/test/java/org/nuiton/eugene/java/JavaBuilderHelperTest.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/test/java/org/nuiton/eugene/java/JavaBuilderHelperTest.java 2009-10-29 13:32:03 UTC (rev 667) +++ branches/1.1.0-Javabuilder/eugene-test/src/test/java/org/nuiton/eugene/java/JavaBuilderHelperTest.java 2009-10-29 17:47:57 UTC (rev 668) @@ -1,7 +1,6 @@ package org.nuiton.eugene.java; -import org.nuiton.eugene.java.JavaBuilderHelper; import java.util.List; import org.junit.After; import org.junit.AfterClass; @@ -46,7 +45,7 @@ @Test public void testAddAttribute() { System.out.println("addAttribute"); - JavaBuilderHelper instance = new JavaBuilderHelper(); + JavaBuilder instance = new JavaBuilder("modelName"); ObjectModelClassifier classifier = new ObjectModelClassImpl(); @@ -75,13 +74,21 @@ assertEquals(result.getVisibility(), "private"); assertEquals(result.getDefaultValue(), "new java.util.Date()"); + parse = "private double age = 2.0"; + result = instance.addAttribute(classifier, parse); + assertNotNull(result); + assertEquals(result.getName(), "age"); + assertEquals(result.getType(), "double"); + assertEquals(result.getVisibility(), "private"); + assertEquals(result.getDefaultValue(), "2.0"); + } @Test public void testAddOperation() { System.out.println("addOperation"); - JavaBuilderHelper instance = new JavaBuilderHelper(); + JavaBuilder instance = new JavaBuilder("modelName"); ObjectModelClassifier classifier = new ObjectModelClassImpl(); @@ -93,6 +100,13 @@ assertEquals(result.getReturnType(), "java.util.List<java.lang.String>"); assertEquals(result.getVisibility(), "public"); + /*parse = "public <T extends blob> T myMethod"; // UNSUPPORTED + result = instance.addOperation(classifier, parse); + assertNotNull(result); + assertEquals(result.getName(), "myMethod"); + assertEquals(result.getReturnType(), "<T extends blob> T"); + assertEquals(result.getVisibility(), "public");*/ + parse = "public void addPropertyChangeListener(java.lang.String propertyName)"; result = instance.addOperation(classifier, parse); assertNotNull(result);
participants (1)
-
fdesbois@users.nuiton.org