r662 - in branches/1.1.0-Javabuilder: eugene eugene/src/main/java/org/nuiton/eugene eugene/src/main/java/org/nuiton/eugene/models/object 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/test/generator eugene-test/src/main/resources eugene-test/src/test/resources
Author: fdesbois Date: 2009-10-27 18:18:21 +0100 (Tue, 27 Oct 2009) New Revision: 662 Added: branches/1.1.0-Javabuilder/eugene-test/nbactions.xml branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java Modified: branches/1.1.0-Javabuilder/eugene-test/pom.xml branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/JavaGenerator.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/resources/log4j.properties branches/1.1.0-Javabuilder/eugene-test/src/test/resources/log4j.properties branches/1.1.0-Javabuilder/eugene/pom.xml 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/JavaBuilder.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java Log: - Add extensions for ObjectModel - Add utils method for Import managment - Refactor JavaBuilder to use extension and utils method for imports - Add TestReader to create a model from scratch with TestBuilder - Correction some errors in JavaGenerator and better managment for imports Modified: branches/1.1.0-Javabuilder/eugene/pom.xml =================================================================== --- branches/1.1.0-Javabuilder/eugene/pom.xml 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/pom.xml 2009-10-27 17:18:21 UTC (rev 662) @@ -86,6 +86,7 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> + <scope>test</scope> </dependency> </dependencies> @@ -168,7 +169,7 @@ </roles> </developer> </developers> - + <!-- ************************************************************* --> <!-- *** Build Settings ****************************************** --> <!-- ************************************************************* --> @@ -178,7 +179,7 @@ <!-- extra files to include in release --> <redmine.releaseFiles>${redmine.libReleaseFiles}</redmine.releaseFiles> </properties> - + <build> <defaultGoal>install</defaultGoal> @@ -197,7 +198,7 @@ <!-- ************************************************************* --> <!-- *** Build Environment ************************************** --> <!-- ************************************************************* --> - + <profiles> <!-- perform only on a release stage when using the maven-release-plugin --> <profile> @@ -210,7 +211,7 @@ </activation> <build> <plugins> - + <!-- launch in a release the assembly automaticly --> <plugin> <artifactId>maven-assembly-plugin</artifactId> @@ -231,7 +232,7 @@ </descriptorRefs> </configuration> </plugin> - + </plugins> </build> </profile> @@ -239,3 +240,5 @@ </project> + + 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-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java 2009-10-27 17:18:21 UTC (rev 662) @@ -21,9 +21,13 @@ import java.io.File; import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.object.ObjectModel; @@ -580,4 +584,52 @@ return result; } + + /** + * Suppress packageName from a fullQualifiedName, even if it contains List, Map or other generics. + * See JUnit test for matching expressions. + * @see org.nuiton.eugene.GeneratorUtilTest + * @param str FullQualifiedName for an attribute type (for exemple) + * @return the simple name associated to the str given + */ + public static String getSimpleName(String str) { + return str.replaceAll("\\w+\\.",""); + } + + public static Set<String> getTypesList(String str) { + + String regex = "^(([\\w\\s\\?]*\\s))?([\\w\\.]+)((<)(.*)(>))?(\\(\\))?$"; + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(str); + + Set<String> results = new HashSet<String>(); + + if (m.find()) { + results.add(m.group(3)); + if (m.group(6) != null) { // cas du type generic + for (String onepart : m.group(6).split("(\\s*,\\s*)")) { + results.addAll(getTypesList(onepart)); + } + } + /*if (m.group(2) != null) { // cas du extend ou du new + result += m.group(2); + } + result += m.group(4); + if (m.group(7) != null) { // cas du type generic + result += m.group(6); // < + String sep = ""; + for (String onepart : m.group(7).split("(\\s*,\\s*)")) { + result += sep + getSimpleName(onepart); + sep = ", "; + } + result += m.group(8); // > + } + if (m.group(9) != null) { // cas des () pour un new + result += m.group(9); + }*/ + } + + return results; + } + } // GeneratorUtil Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/JavaBuilder.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/JavaBuilder.java 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/JavaBuilder.java 2009-10-27 17:18:21 UTC (rev 662) @@ -47,6 +47,11 @@ private static ObjectModelBuilderHelper helper = new ObjectModelBuilderHelper(); + public JavaBuilder(String modelName) { + this.objectModel = new ObjectModelImpl(); + this.objectModel.setName(modelName); + } + public JavaBuilder() { this.objectModel = new ObjectModelImpl(); } @@ -59,13 +64,22 @@ return helper; } + protected ImportsManager getImportsManager(ObjectModelClassifier classifier) { + ImportsManager manager = objectModel.getExtension(classifier.getQualifiedName(), ImportsManager.class); + if (manager == null) { + manager = new ImportsManager(); + objectModel.addExtension(classifier.getQualifiedName(), manager); + } + return manager; + } + public void addImportForClassifier(ObjectModelClassifier classifier, String imports) { - ImportsManager manager = objectModel.getImportsManager(classifier.getQualifiedName()); + ImportsManager manager = getImportsManager(classifier); manager.addImport(imports); } public void addImportForClassifier(ObjectModelClassifier classifier, Class<?> imports) { - ImportsManager manager = objectModel.getImportsManager(classifier.getQualifiedName()); + ImportsManager manager = getImportsManager(classifier); manager.addImport(imports); } @@ -82,10 +96,14 @@ } private ImportsManager setImports(ObjectModelClassifier classifier) { - ImportsManager manager = objectModel.getImportsManager(classifier.getQualifiedName()); + ImportsManager manager = getImportsManager(classifier); // attributes for (ObjectModelAttribute attribute : classifier.getAttributes()) { - manager.addImport(attribute.getType()); + if (log.isInfoEnabled()) { + log.info("attribute add import for : " + attribute.getType()); + } + setImportsForType(manager, attribute.getType()); + setImportsForType(manager, attribute.getDefaultValue()); } // implemented interfaces for (ObjectModelInterface interfacez : classifier.getInterfaces()) { @@ -93,14 +111,20 @@ } // operations for (ObjectModelOperation operation : classifier.getOperations()) { - manager.addImport(operation.getReturnType()); + setImportsForType(manager, operation.getReturnType()); for (ObjectModelParameter parameter : operation.getParameters()) { - manager.addImport(parameter.getType()); + setImportsForType(manager, parameter.getType()); } } return manager; } + private void setImportsForType(ImportsManager manager, String type) { + for (String oneType : GeneratorUtil.getTypesList(type)) { + manager.addImport(oneType); + } + } + public void build() { } Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/ObjectModelGenerator.java 2009-10-27 17:18:21 UTC (rev 662) @@ -119,12 +119,6 @@ // generateFromModel this.model = model; - if (log.isDebugEnabled()) { - log.debug("name : " + model.getName()); - log.debug("interfaces : " + model.getInterfaces().size()); - log.debug("classes : " + model.getClasses().size()); - } - //try { String filename = getFilenameForModel(model); generateFromElement(model, destDir, filename, Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModel.java 2009-10-27 17:18:21 UTC (rev 662) @@ -122,11 +122,13 @@ public List<String> getComments(); /** - * Return specific ImportsManager for a classifier - * - * @param qualifiedName of the classifier - * @return the ImportsManager associated to the classifier, create a new one if not exist + * Get the extension associated to the reference (unique) + * @param <O> object type returned + * @param reference unique corresponding to the extension to get + * @param extensionClass class of the extension + * @return the object value for the extension + * @throws ClassCastException */ - public List<String> getImports(ObjectModelClassifier element); + public <O> O getExtension(String reference, Class<O> extensionClass) throws ClassCastException; } //ObjectModel Modified: branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java =================================================================== --- branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-10-27 17:18:21 UTC (rev 662) @@ -14,7 +14,6 @@ * 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.eugene.models.object.xml; import java.util.ArrayList; @@ -59,9 +58,11 @@ protected Map<String, ObjectModelEnumeration> enumerations = new HashMap<String, ObjectModelEnumeration>(); protected List<String> comments = new ArrayList<String>(); private Map<String, String> tagValues = new HashMap<String, String>(); - - private Map<String, ImportsManager> importsManagers = new HashMap<String, ImportsManager>(); - + /** + * Used to add others specific object to the model + * The key defined must be unique to get the significative extension associated to + */ + private Map<String, Object> extensions = new HashMap<String, Object>(); private static Log log = LogFactory.getLog(ObjectModelImpl.class); public void setName(String name) { @@ -75,18 +76,14 @@ clazz.setObjectModelImpl(this); if (!clazz.isExtern()) { - ObjectModelElementImpl initialElement = (ObjectModelElementImpl) classes - .get(clazz.getQualifiedName()); + ObjectModelElementImpl initialElement = (ObjectModelElementImpl) classes.get(clazz.getQualifiedName()); if (initialElement == null) { classes.put(clazz.getQualifiedName(), clazz); classifiers.put(clazz.getQualifiedName(), clazz); } else { if (!(initialElement instanceof ObjectModelClassImpl)) { throw new IllegalArgumentException( - "\"" - + clazz - + "\" is incompatible with already defined element \"" - + initialElement + "\""); + "\"" + clazz + "\" is incompatible with already defined element \"" + initialElement + "\""); } ObjectModelClassImpl initialClazz = (ObjectModelClassImpl) initialElement; @@ -107,18 +104,14 @@ clazz.setObjectModelImpl(this); if (!clazz.isExtern()) { - ObjectModelElementImpl initialElement = (ObjectModelElementImpl) classes - .get(clazz.getQualifiedName()); + ObjectModelElementImpl initialElement = (ObjectModelElementImpl) classes.get(clazz.getQualifiedName()); if (initialElement == null) { classes.put(clazz.getQualifiedName(), clazz); classifiers.put(clazz.getQualifiedName(), clazz); } else { if (!(initialElement instanceof ObjectModelAssociationClassImpl)) { throw new IllegalArgumentException( - "\"" - + clazz - + "\" is incompatible with already defined element \"" - + initialElement + "\""); + "\"" + clazz + "\" is incompatible with already defined element \"" + initialElement + "\""); } ObjectModelAssociationClassImpl initialClazz = (ObjectModelAssociationClassImpl) initialElement; @@ -165,8 +158,7 @@ */ public ObjectModelClassifier getClassifier(String qualifiedClassifierName) { return (qualifiedClassifierName == null ? null - : (ObjectModelClassifier) classifiers - .get(qualifiedClassifierName)); + : (ObjectModelClassifier) classifiers.get(qualifiedClassifierName)); } /** @@ -231,18 +223,14 @@ interfacez.setObjectModelImpl(this); if (!interfacez.isExtern()) { - ObjectModelElementImpl initialElement = (ObjectModelElementImpl) interfaces - .get(interfacez.getQualifiedName()); + ObjectModelElementImpl initialElement = (ObjectModelElementImpl) interfaces.get(interfacez.getQualifiedName()); if (initialElement == null) { interfaces.put(interfacez.getQualifiedName(), interfacez); classifiers.put(interfacez.getQualifiedName(), interfacez); } else { if (!(initialElement instanceof ObjectModelInterfaceImpl)) { throw new IllegalArgumentException( - "\"" - + interfacez - + "\" is incompatible with already defined element \"" - + initialElement + "\""); + "\"" + interfacez + "\" is incompatible with already defined element \"" + initialElement + "\""); } ObjectModelInterfaceImpl initialInterfacez = (ObjectModelInterfaceImpl) initialElement; @@ -358,8 +346,7 @@ // regénérer l'objet } for (it = additionalClazzifier.getOperations().iterator(); it.hasNext();) { - ObjectModelOperationImpl operation = (ObjectModelOperationImpl) it - .next(); + ObjectModelOperationImpl operation = (ObjectModelOperationImpl) it.next(); if (!contains(initialClazzifier.getOperations(), operation)) { initialClazzifier.operations.add(operation); } @@ -370,20 +357,17 @@ initialClazzifier.comments.add(comment); } } - for (it = additionalClazzifier.getStereotypes().iterator(); it - .hasNext();) { + for (it = additionalClazzifier.getStereotypes().iterator(); it.hasNext();) { String stereotype = (String) it.next(); if (!initialClazzifier.getStereotypes().contains(stereotype)) { initialClazzifier.stereotypes.add(stereotype); } } - for (it = additionalClazzifier.getTagValues().keySet().iterator(); it - .hasNext();) { + for (it = additionalClazzifier.getTagValues().keySet().iterator(); it.hasNext();) { String tagName = (String) it.next(); if (!initialClazzifier.getTagValues().containsKey(tagName)) { - initialClazzifier.tagValues.put(tagName, additionalClazzifier - .getTagValue(tagName)); + initialClazzifier.tagValues.put(tagName, additionalClazzifier.getTagValue(tagName)); } } } @@ -403,8 +387,7 @@ mergeClassifiers(initialClazz, additionalClazz); for (it = additionalClazz.getAttributes().iterator(); it.hasNext();) { - ObjectModelAttributeImpl attribute = (ObjectModelAttributeImpl) it - .next(); + ObjectModelAttributeImpl attribute = (ObjectModelAttributeImpl) it.next(); if (!contains(initialClazz.getAttributes(), attribute)) { initialClazz.attributes.put(attribute.getName(), attribute); initialClazz.orderedAttributes.add(attribute); @@ -425,10 +408,8 @@ ObjectModelAssociationClassImpl additionalAssocClazz) { mergeClasses(initialAssocClazz, additionalAssocClazz); Iterator it; - for (it = additionalAssocClazz.participantsRefs.iterator(); it - .hasNext();) { - ObjectModeImplAssociationClassParticipant participant = (ObjectModeImplAssociationClassParticipant) it - .next(); + for (it = additionalAssocClazz.participantsRefs.iterator(); it.hasNext();) { + ObjectModeImplAssociationClassParticipant participant = (ObjectModeImplAssociationClassParticipant) it.next(); if (!contains(initialAssocClazz.participantsRefs, participant)) { initialAssocClazz.participantsRefs.add(participant); } @@ -496,22 +477,32 @@ return (tagValue == null ? null : (String) tagValues.get(tagValue)); } - @Override - public List<String> getImports(ObjectModelClassifier classifier) { - ImportsManager manager = importsManagers.get(classifier.getQualifiedName()); - if (manager == null) { - throw new IllegalArgumentException("ImportsManager is not defined for classifier '" + - classifier.getQualifiedName() + "'"); - } - return manager.getImports(classifier.getPackageName()); + /** + * Add a new extension to the model. + * This method overwrite the value object if the reference already exist. + * @param <O> object type + * @param reference unique key to reference the extension in the model + * @param extension object value corresponding to the extension + */ + public <O> void addExtension(String reference, O extension) { + extensions.put(reference, extension); } - public ImportsManager getImportsManager(String qualifiedName) { - ImportsManager manager = importsManagers.get(qualifiedName); - if (manager == null) { - manager = new ImportsManager(); - importsManagers.put(qualifiedName, manager); + /** + * Get the extension associated to the reference (unique) + * @param <O> object type returned + * @param reference unique corresponding to the extension to get + * @param extensionClass class of the extension + * @return the object value for the extension + * @throws ClassCastException + */ + @Override + @SuppressWarnings("unchecked") + public <O> O getExtension(String reference, Class<O> extensionClass) throws ClassCastException { + Object result = extensions.get(reference); + if (result != null && !extensionClass.isAssignableFrom(result.getClass())) { + throw new ClassCastException("Invalid cast for " + extensionClass.getName()); } - return manager; + return (O) result; } } Added: 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 (rev 0) +++ branches/1.1.0-Javabuilder/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2009-10-27 17:18:21 UTC (rev 662) @@ -0,0 +1,143 @@ + +package org.nuiton.eugene; + +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * + * @author fdesbois + */ +public class GeneratorUtilTest { + + private static Log log = LogFactory.getLog(GeneratorUtilTest.class); + + public GeneratorUtilTest() { + } + + @BeforeClass + public static void setUpClass() throws Exception { + } + + @AfterClass + public static void tearDownClass() throws Exception { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + + /** + * Test of getSimpleName method, of class GeneratorUtil. + */ + @Test + public void testGetSimpleName() { + System.out.println("getSimpleName"); + + String str = "List"; + String expResult = "List"; + String result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "java.util.Regex"; + expResult = "Regex"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; + expResult = "List<? extends Bonzoms>"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "java.util.List<org.chorem.jtimer.Jtimer>"; + expResult = "List<Jtimer>"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "java.util.Set<java.util.Collection<java.util.Collection<java.util.Collection" + + "<java.lang.String>>>>"; + expResult = "Set<Collection<Collection<Collection<String>>>>"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; + expResult = "Map<Jtimer, Collection<String>>"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "new java.util.HashMap<org.chorem.jtimer.Jtimer, T extends java.lang.String>()"; + expResult = "new HashMap<Jtimer, T extends String>()"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + + str = "Class<O>"; + expResult = "Class<O>"; + result = GeneratorUtil.getSimpleName(str); + log.info(str + " -> " + result); + assertEquals(expResult, result); + } + + @Test + public void testGetTypesList() { + String str = "List"; + Set<String> results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 1); + + str = "java.util.Regex"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 1); + + str = "java.util.List<? extends org.chorem.bonzoms.Bonzoms>"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 2); + + str = "java.util.List<org.chorem.jtimer.Jtimer>"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 2); + + str = "java.util.Set<java.util.Collection<java.util.Collection<java.util.Collection" + + "<java.lang.String>>>>"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 3); + + str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 4); + + str = "new java.util.HashMap<org.chorem.jtimer.Jtimer, T extends java.lang.String>()"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 3); + + str = "java.util.Map<org.chorem.jtimer.Jtimer, java.util.Collection<java.lang.String>>"; + results = GeneratorUtil.getTypesList(str); + log.info(str + " -> " + results); + assertEquals(results.size(), 4); + } + +} \ No newline at end of file Added: branches/1.1.0-Javabuilder/eugene-test/nbactions.xml =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/nbactions.xml (rev 0) +++ branches/1.1.0-Javabuilder/eugene-test/nbactions.xml 2009-10-27 17:18:21 UTC (rev 662) @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<actions> + <action> + <actionName>CUSTOM-debug maven</actionName> + <displayName>debug maven</displayName> + <goals> + <goal>clean</goal> + <goal>install</goal> + <goal>-e</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-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene-test/pom.xml 2009-10-27 17:18:21 UTC (rev 662) @@ -110,6 +110,23 @@ <goal>generate</goal> </goals> </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.test.generator.JavaGenerator</templates> + <defaultPackage>org.nuiton.eugene.test</defaultPackage> + <extraClassPathDirectory>target/classes</extraClassPathDirectory> + <generateResources> + <input>src/main/models</input> + </generateResources> + </configuration> + <goals> + <goal>generate</goal> + </goals> + </execution> </executions> </plugin> Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/JavaGenerator.java =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/JavaGenerator.java 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/JavaGenerator.java 2009-10-27 17:18:21 UTC (rev 662) @@ -1,11 +1,16 @@ package org.nuiton.eugene.test.generator; +import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.Collection; import java.util.Iterator; import java.util.Set; +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.ObjectModelGenerator; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -29,20 +34,20 @@ */ public class JavaGenerator extends ObjectModelGenerator { + private static final Log log = LogFactory.getLog(JavaGenerator.class); + @Override public String getFilenameForClass(ObjectModelClass clazz) { - return clazz.getName() + ".java"; + return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java";//return clazz.getName() + ".java"; } @Override - public void generateFromClassifier(Writer output, ObjectModelClassifier classifier) { + public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { + if (log.isInfoEnabled()) { + log.info("generate : " + clazz.getName()); + } - } - - @Override - public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException { - this.generateHeader(output, clazz); // Imports, package et documentation String abstractStr = clazz.isAbstract() ? " abstract " : " "; @@ -99,7 +104,8 @@ }*/ // potentiel crash si imports non defini // dans ce cas, probleme de config utilisateur ! obligation de passer par un builder ? - for (String imports : getModel().getImports(classifier)) { + ImportsManager manager = getModel().getExtension(classifier.getQualifiedName(), ImportsManager.class); + for (String imports : manager.getImports(classifier.getPackageName())) { /*{import <%=imports%>; }*/ } @@ -110,7 +116,7 @@ for (ObjectModelAttribute attr : attributes) { - if (!attr.getDocumentation().isEmpty()) { + if (attr.getDocumentation() != null && !attr.getDocumentation().isEmpty()) { /*{ /** * <%=attr.getDocumentation()%> *) @@ -125,10 +131,10 @@ String attrName = attr.getName(); String attrVisibility = attr.getVisibility(); - String attrType = getSimpleName(attr.getType()); + String attrType = GeneratorUtil.getSimpleName(attr.getType()); String attrStatic = attr.isStatic() ? " static " : " "; String attrFinal = attr.isFinal() ? " final " : " "; - String attrValue = !attr.getDefaultValue().isEmpty() ? " = " + attr.getDefaultValue() : ""; + String attrValue = !attr.getDefaultValue().isEmpty() ? " = " + GeneratorUtil.getSimpleName(attr.getDefaultValue()) : ""; /*{ <%=attrVisibility%><%=attrStatic%><%=attrFinal%><%=attrType%> <%=attrName%><%=attrValue%>; }*/ @@ -140,7 +146,7 @@ String opName = op.getName(); /*{ /** }*/ - if (!op.getDocumentation().isEmpty()) { + if (op.getDocumentation() != null && !op.getDocumentation().isEmpty()) { String opDocumentation = op.getDocumentation(); /*{ * <%=opName%> : <%=opDocumentation%> }*/ @@ -157,18 +163,18 @@ String opAbstract = op.isAbstract() ? " abstract " : ""; ObjectModelParameter returnParam = op.getReturnParameter(); - String opReturn = getSimpleName(returnParam.getType()); + String opReturn = GeneratorUtil.getSimpleName(returnParam.getType()); if (!opReturn.equals("void")) { String paramDocumentation = returnParam.getDocumentation(); /*{ * @return <%=paramDocumentation%> }*/ } -/*{ *) - <%=opVisibility%><%=opStatic%><%=opAbstract%><%=opReturn%> <%=opName%>(}*/ +/*{ *) + <%=opVisibility%><%=opStatic%><%=opAbstract%> <%=opReturn%> <%=opName%>(}*/ String comma = ""; for (ObjectModelParameter param : params) { String paramName = param.getName(); - String paramType = param.getType(); + String paramType = GeneratorUtil.getSimpleName(param.getType()); /*{<%=comma%><%=paramType%> <%=paramName%>}*/ comma = ", "; } @@ -179,18 +185,17 @@ /*{<%=comma%><%=exception%>}*/ comma = ", "; } + + if (!op.getBodyCode().isEmpty()) { +/*{ {<%=op.getBodyCode()%>} + +}*/ + } else { /*{; }*/ + } } } - - private static String getSimpleName(String qualifiedName) { - String result = qualifiedName; - int dot = qualifiedName.lastIndexOf("."); - if (dot >- 1) { - result = qualifiedName.substring(dot + 1); - } - return result; - } + } 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-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestBuilder.java 2009-10-27 17:18:21 UTC (rev 662) @@ -1,8 +1,6 @@ package org.nuiton.eugene.test.generator; -import java.util.Date; -import java.util.List; import org.nuiton.eugene.JavaBuilder; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelOperation; @@ -15,6 +13,10 @@ */ public class TestBuilder extends JavaBuilder { + public TestBuilder() { + super("TestModel"); + } + @Override public void build() { createRole(); @@ -23,35 +25,42 @@ private void createRole() { ObjectModelClass roleClass = getHelper().createClass("Role", "org.chorem.bonzoms"); - this.addClassToModel(roleClass); getHelper().addAttribute(roleClass, "name", "String"); - this.addImportForClassifier(roleClass, Date.class); + //this.addImportForClassifier(roleClass, Date.class); getHelper().addAttribute(roleClass, "fromDate", "java.util.Date"); getHelper().addAttribute(roleClass, "thruDate", "java.util.Date"); + + this.addClassToModel(roleClass); } private void createPerson() { ObjectModelClass personneClass = getHelper().createClass("Person", "org.chorem.bonzoms"); - this.addClassToModel(personneClass); - getHelper().addAttribute(personneClass, "lastName", "String"); - getHelper().addAttribute(personneClass, "firstName", "String"); + getHelper().addAttribute(personneClass, "lastName", "java.lang.String"); + getHelper().addAttribute(personneClass, "firstName", "java.lang.String", "\"\""); - this.addImportForClassifier(personneClass, List.class); - getHelper().addAttribute(personneClass, "roles", "java.util.List<Role>"); + //this.addImportForClassifier(personneClass, List.class); + getHelper().addAttribute(personneClass, "roles", + "java.util.List<org.chorem.bonzoms.Role>", "new java.util.ArrayList<org.chorem.bonzoms.Role>()"); ObjectModelOperation setLastName = getHelper().addOperation(personneClass, "setLastName", null, "String", "lastName"); - getHelper().setOperationBody(setLastName, "" /*{ - this.lastName = lastName; - }*/); + getHelper().setOperationBody(setLastName, "" + /*{ + this.lastName = lastName; + }*/ + ); ObjectModelOperation getLastName = getHelper().addOperation(personneClass, "getLastName", "String"); - getHelper().setOperationBody(getLastName, "" /*{ - return this.lastName; - }*/); + getHelper().setOperationBody(getLastName, "" + /*{ + return this.lastName; + }*/ + ); + + this.addClassToModel(personneClass); } } Added: 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 (rev 0) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/java/org/nuiton/eugene/test/generator/TestReader.java 2009-10-27 17:18:21 UTC (rev 662) @@ -0,0 +1,33 @@ + +package org.nuiton.eugene.test.generator; + +import java.io.File; +import org.nuiton.eugene.JavaBuilder; +import org.nuiton.eugene.ModelReader; +import org.nuiton.eugene.models.object.ObjectModel; + +/** + * TestReader + * + * Created: 27 oct. 2009 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class TestReader extends ModelReader<ObjectModel> { + + protected JavaBuilder builder; + + @Override + public ObjectModel read(File[] file) { + builder = new TestBuilder(); + + builder.build(); + + return builder.getModel(); + } + +} Modified: branches/1.1.0-Javabuilder/eugene-test/src/main/resources/log4j.properties =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/main/resources/log4j.properties 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene-test/src/main/resources/log4j.properties 2009-10-27 17:18:21 UTC (rev 662) @@ -7,6 +7,6 @@ log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n # package level -log4j.logger.org.nuiton.eugene=INFO +log4j.logger.org.nuiton.eugene=DEBUG log4j.logger.org.nuiton.eugene.test=DEBUG log4j.logger.org.nuiton.processor=DEBUG Modified: branches/1.1.0-Javabuilder/eugene-test/src/test/resources/log4j.properties =================================================================== --- branches/1.1.0-Javabuilder/eugene-test/src/test/resources/log4j.properties 2009-10-27 10:32:23 UTC (rev 661) +++ branches/1.1.0-Javabuilder/eugene-test/src/test/resources/log4j.properties 2009-10-27 17:18:21 UTC (rev 662) @@ -7,6 +7,6 @@ log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n # package level -log4j.logger.org.nuiton.eugene=INFO +log4j.logger.org.nuiton.eugene=DEBUG log4j.logger.org.nuiton.eugene.test=DEBUG log4j.logger.org.nuiton.processor=DEBUG
participants (1)
-
fdesbois@users.nuiton.org