Author: echatellier Date: 2010-02-24 19:08:32 +0100 (Wed, 24 Feb 2010) New Revision: 824 Added: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java Modified: trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/GeneratorTaskTest.java Log: Update ant task for eugene2 Modified: trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java =================================================================== --- trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java 2010-02-24 15:59:27 UTC (rev 823) +++ trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java 2010-02-24 18:08:32 UTC (rev 824) @@ -48,6 +48,11 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.Path; +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelReader; +import org.nuiton.eugene.models.state.StateModel; +import org.nuiton.eugene.models.state.StateModelReader; import org.nuiton.util.FileUtil; import org.nuiton.util.Resource; import org.nuiton.util.ZipUtil; @@ -101,8 +106,11 @@ /** * Transformation to do on model (comma separated). * - * Values are : - object (transform into object model) - state (transform - * into state model) + * Values are : + * <ul> + * <li>object (transform into object model) + * <li>state (transform into state model) + * </ul> */ protected String transformations = "object"; @@ -112,8 +120,12 @@ /** * Additional generator properties. * - * Values are : - fullPackagePath : full package path - extraPackages : - * extra package path - defaultPackage (extra generated model files) + * Values are : + * <ul> + * <li>fullPackagePath : full package path + * <li>extraPackages : extra package path + * <li>defaultPackage (extra generated model files) + * </ul> */ protected Properties properties = new Properties(); @@ -129,8 +141,7 @@ /** * Set the optional classpath to the XSL processor * - * @param classpath - * the classpath to use when loading the XSL processor + * @param classpath the classpath to use when loading the XSL processor */ public void setClasspath(Path classpath) { Path antDefaulClasspath = createClasspath(); @@ -142,8 +153,7 @@ * * (comma-separated). * - * @param templates - * template to use. + * @param templates template to use. */ public void setTemplates(String templates) { this.templates = templates; @@ -152,11 +162,13 @@ /** * Transformation to do. * - * Values are : - object (transform into object model) - state (transform - * into state model) + * Values are : + * <ul> + * <li>object (transform into object model) + * <li>state (transform into state model) + * </ul> * - * @param transformations - * transformations + * @param transformations transformations */ public void setTransformations(String transformations) { this.transformations = transformations; @@ -177,8 +189,7 @@ /** * Permet d'ajouter des properties. exemple: toto=1,package=org.nuiton * - * @param properties - * properties + * @param properties properties */ public void setProperties(String properties) { String[] props = properties.split(","); @@ -191,8 +202,7 @@ /** * Set overwrite value. * - * @param overwrite - * overwrite value + * @param overwrite overwrite value */ public void setOverwrite(boolean overwrite) { this.overwrite = overwrite; @@ -201,8 +211,7 @@ /** * Set encoding. * - * @param encoding - * encoding + * @param encoding encoding */ public void setEncoding(String encoding) { this.encoding = encoding; @@ -211,8 +220,7 @@ /** * Set source directory. * - * @param srcDir - * source directory + * @param srcDir source directory */ public void setSrcdir(File srcDir) { this.srcDir = srcDir; @@ -221,8 +229,7 @@ /** * Set source file. * - * @param srcFile - * source file + * @param srcFile source file */ public void setSrcfile(File srcFile) { this.srcFile = srcFile; @@ -231,8 +238,7 @@ /** * Set destination directory * - * @param destDir - * destination directory + * @param destDir destination directory */ public void setDestdir(File destDir) { this.destDir = destDir; @@ -241,8 +247,7 @@ /** * Set build directory. * - * @param buildDirectory - * build directory + * @param buildDirectory build directory */ public void setBuilddirectory(String buildDirectory) { this.buildDirectory = buildDirectory; @@ -251,8 +256,7 @@ /** * Set URI resolver (FQN). * - * @param resolver - * uri resolver + * @param resolver uri resolver */ public void setResolver(String resolver) { this.resolver = resolver; @@ -288,28 +292,23 @@ } String[] templateGenerators = templates.split(","); - Template[] generators = new Template[templateGenerators.length]; + Template<Model>[] generators = new Template[templateGenerators.length]; for (int i = 0; i < templateGenerators.length; i++) { String templateName = templateGenerators[i].trim(); try { - generators[i] = (Template) Class.forName(templateName) - .newInstance(); - generators[i].setEncoding(encoding); + generators[i] = (Template<Model>)Class.forName(templateName).newInstance(); + properties.setProperty(Template.PROP_OVERWRITE, String.valueOf(overwrite)); + properties.setProperty(Template.PROP_ENCODING, encoding); generators[i].setProperties(properties); - generators[i].setOverwrite(overwrite); } catch (ClassCastException e) { - log("Generator don't herite Generator Class", e, - Project.MSG_ERR); + log("Generator don't herite Generator Class", e, Project.MSG_ERR); } catch (ClassNotFoundException e) { - log("Unable to find generator" + templateName, e, - Project.MSG_ERR); + log("Unable to find generator" + templateName, e, Project.MSG_ERR); } catch (InstantiationException e) { - log("Unable to instanciate template" + templateName, e, - Project.MSG_ERR); + log("Unable to instanciate template" + templateName, e, Project.MSG_ERR); } catch (IllegalAccessException e) { - log("Unable to parse topia input file" + templateName, e, - Project.MSG_ERR); + log("Unable to parse topia input file" + templateName, e, Project.MSG_ERR); } } @@ -335,16 +334,12 @@ * Equivalent to * <tt>doExecute(new File[] { srcFile }, destDir, generators)</tt>. * - * @param srcFile - * file to apply generator to - * @param destDir - * destination directory - * @param generators - * generators to apply - * @throws BuildException - * if can't generate + * @param srcFile file to apply generator to + * @param destDir destination directory + * @param generators generators to apply + * @throws BuildException if can't generate */ - protected void doExecute(File srcFile, File destDir, Template[] generators) + protected void doExecute(File srcFile, File destDir, Template<Model>[] generators) throws BuildException { doExecute(Collections.singletonList(srcFile), destDir, generators); } @@ -352,30 +347,50 @@ /** * Execute generation on specified files. * - * @param srcFiles - * files to apply generator to - * @param destDir - * destination directory - * @param generators - * generators to apply - * @throws BuildException - * if can't generate + * @param srcFiles files to apply generator to + * @param destDir destination directory + * @param generators generators to apply + * @throws BuildException if can't generate + * @throws IOException */ protected void doExecute(List<File> srcFiles, File destDir, - Template[] generators) throws BuildException { + Template<Model>[] generators) throws BuildException { // log classpath log("Using classpath : " + classpath); List<File> modelFiles = doConvertFiles(srcFiles, destDir); - for (Template generator : generators) { + for (Template<Model> generator : generators) { if (generator != null) { File[] modelFilesArray = modelFiles.toArray(new File[0]); log("Applying " + generator.getClass().getSimpleName() + " on " + Arrays.toString(modelFilesArray), Project.MSG_INFO); - generator.generate(modelFilesArray, destDir); + + String[] transformationsArray = transformations.split(","); + for (String transformation : transformationsArray) { + + if ("object".equals(transformation)) { + ModelReader<ObjectModel> objectModelReader = new ObjectModelReader(); + ObjectModel model = objectModelReader.read(modelFilesArray); + try { + generator.applyTemplate(model, destDir); + } catch (IOException e) { + throw new BuildException("Can't apply template on object model", e); + } + } + + else if ("state".equals(transformation)) { + ModelReader<StateModel> stateModelReader = new StateModelReader(); + Model model = stateModelReader.read(modelFilesArray); + try { + generator.applyTemplate(model, destDir); + } catch (IOException e) { + throw new BuildException("Can't apply template on state model", e); + } + } + } } } } Added: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java =================================================================== --- trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java (rev 0) +++ trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java 2010-02-24 18:08:32 UTC (rev 824) @@ -0,0 +1,58 @@ +/* *##% + * EUGene :: EUGene + * Copyright (C) 2010 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * ##%*/ + +package org.nuiton.eugene; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; + +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelGenerator; + +/** + * Basic generator generator. (implements some generation things). + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class BasicObjectModelGenerator extends ObjectModelGenerator { + + /* + * @see org.nuiton.eugene.models.object.ObjectModelGenerator#getFilenameForClass(org.nuiton.eugene.models.object.ObjectModelClass) + */ + @Override + public String getFilenameForClass(ObjectModelClass clazz) { + return clazz.getQualifiedName().replace('.', File.separatorChar) + ".java"; + } + + /* + * @see org.nuiton.eugene.models.object.ObjectModelGenerator#generateFromClass(java.io.Writer, org.nuiton.eugene.models.object.ObjectModelClass) + */ + @Override + public void generateFromClass(Writer output, ObjectModelClass clazz) + throws IOException { + output.write("package " + clazz.getPackageName() + ";\n\n"); + output.write("public class " + clazz.getName() + " {\n\n}\n"); + } + +} Property changes on: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/GeneratorTaskTest.java =================================================================== --- trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/GeneratorTaskTest.java 2010-02-24 15:59:27 UTC (rev 823) +++ trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/GeneratorTaskTest.java 2010-02-24 18:08:32 UTC (rev 824) @@ -27,7 +27,6 @@ import org.apache.tools.ant.Project; import org.junit.Assert; import org.junit.Test; -import org.nuiton.eugene.models.object.ObjectModelGenerator; import org.nuiton.util.FileUtil; import org.nuiton.util.ResourceResolver; @@ -75,8 +74,7 @@ /* Configuration */ generatorTask.setOverwrite(true); - generatorTask.setBuilddirectory("target/anttest"); - generatorTask.setTemplates(ObjectModelGenerator.class.getName()); + generatorTask.setTemplates(BasicObjectModelGenerator.class.getName()); generatorTask.setSrcdir(new File("target/test-classes/xmi/1.2")); generatorTask.setEncoding("UTF-8"); @@ -86,13 +84,16 @@ generatorTask.setDestdir(destDirGen); generatorTask.setBuilddirectory(destDirGen.getAbsolutePath()); - generatorTask.setProperties("defaultPackage=org.nuiton"); - + generatorTask.setProperties("defaultPackage=org"); + generatorTask.setProperties("generatedPackages=org"); generatorTask.setIncludes("**/*.xmi"); generatorTask.execute(); - // TODO Check result + // Test some file existence + Assert.assertTrue(new File(destDirGen, "org/codelutin/math/matrix/MatrixND.java").exists()); + Assert.assertTrue(new File(destDirGen, "org/codelutin/math/matrix/MatrixND.java").exists()); + Assert.assertTrue(new File(destDirGen, "org/test/enums/TestClass.java").exists()); // remove created temp dir FileUtil.deleteRecursively(destDirGen); @@ -110,7 +111,7 @@ /* Configuration */ generatorTask.setOverwrite(true); - generatorTask.setTemplates(ObjectModelGenerator.class.getName()); + generatorTask.setTemplates(BasicObjectModelGenerator.class.getName()); generatorTask.setSrcdir(new File("target/test-classes/xmi/2.1")); generatorTask.setEncoding("UTF-8"); generatorTask.setResolver(ResourceResolver.class.getName()); @@ -121,7 +122,8 @@ generatorTask.setDestdir(destDirGen); generatorTask.setBuilddirectory(destDirGen.getAbsolutePath()); - generatorTask.setProperties("defaultPackage=org.nuiton"); + generatorTask.setProperties("defaultPackage=org"); + generatorTask.setProperties("generatedPackages=org"); generatorTask.setIncludes("**/*.uml"); @@ -145,7 +147,7 @@ /* Configuration */ generatorTask.setOverwrite(true); - generatorTask.setTemplates(ObjectModelGenerator.class.getName()); + generatorTask.setTemplates(BasicObjectModelGenerator.class.getName()); generatorTask.setSrcdir(new File("target/test-classes/models/")); generatorTask.setEncoding("UTF-8"); @@ -155,8 +157,9 @@ generatorTask.setDestdir(destDirGen); generatorTask.setBuilddirectory(destDirGen.getAbsolutePath()); - generatorTask.setProperties("defaultPackage=org.nuiton"); - + generatorTask.setProperties("defaultPackage=org"); + generatorTask.setProperties("generatedPackages=org"); + generatorTask.setIncludes("**/*.objectmodel"); generatorTask.execute(); @@ -179,7 +182,7 @@ /* Configuration */ generatorTask.setOverwrite(true); - generatorTask.setTemplates(ObjectModelGenerator.class.getName()); + generatorTask.setTemplates(BasicObjectModelGenerator.class.getName()); generatorTask.setSrcdir(new File("target/test-classes/xmi/2.1")); generatorTask.setEncoding("UTF-8"); generatorTask.setResolver(ResourceResolver.class.getName()); @@ -190,7 +193,8 @@ generatorTask.setDestdir(destDirGen); generatorTask.setBuilddirectory(destDirGen.getAbsolutePath()); - generatorTask.setProperties("defaultPackage=org.nuiton"); + generatorTask.setProperties("defaultPackage=org"); + generatorTask.setProperties("generatedPackages=org"); generatorTask.setIncludes("**/TestXMI21.uml");