[Lutingenerator-commits] r383 - lutingenerator/trunk lutingenerator/trunk/src/main/java/org/codelutin/generator maven-generator-plugin/trunk maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin
Author: tchemit Date: 2008-12-03 12:25:24 +0000 (Wed, 03 Dec 2008) New Revision: 383 Modified: lutingenerator/trunk/changelog lutingenerator/trunk/src/main/java/org/codelutin/generator/ChildGenerator.java lutingenerator/trunk/src/main/java/org/codelutin/generator/Generator.java lutingenerator/trunk/src/main/java/org/codelutin/generator/GeneratorTask.java lutingenerator/trunk/src/main/java/org/codelutin/generator/ObjectModelGenerator.java maven-generator-plugin/trunk/changelog maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/GeneratorPlugin.java Log: add a encoding goal property to be dispatched in all generator to control file generation encoding add a encoding property on generator to control file generation encoding Modified: lutingenerator/trunk/changelog =================================================================== --- lutingenerator/trunk/changelog 2008-12-03 10:22:59 UTC (rev 382) +++ lutingenerator/trunk/changelog 2008-12-03 12:25:24 UTC (rev 383) @@ -1,4 +1,5 @@ 0.62 chemit 200811?? + * 20081203 [chemit] add a encoding property on generator to control file generation encoding * 20081118 [chemit] use lutinproject 3.1 * 20081117 [chemit] : GeneratorTask can have a dedicated classLoader to be used to instanciate generator implementations Modified: lutingenerator/trunk/src/main/java/org/codelutin/generator/ChildGenerator.java =================================================================== --- lutingenerator/trunk/src/main/java/org/codelutin/generator/ChildGenerator.java 2008-12-03 10:22:59 UTC (rev 382) +++ lutingenerator/trunk/src/main/java/org/codelutin/generator/ChildGenerator.java 2008-12-03 12:25:24 UTC (rev 383) @@ -38,7 +38,7 @@ } public ChildGenerator(Generator parent){ - this.parent = parent; + setParent(parent); } @Override @@ -70,6 +70,7 @@ public void setParent(Generator parent) { this.parent = parent; + setEncoding(parent.getEncoding()); } } // ChildGenerator Modified: lutingenerator/trunk/src/main/java/org/codelutin/generator/Generator.java =================================================================== --- lutingenerator/trunk/src/main/java/org/codelutin/generator/Generator.java 2008-12-03 10:22:59 UTC (rev 382) +++ lutingenerator/trunk/src/main/java/org/codelutin/generator/Generator.java 2008-12-03 12:25:24 UTC (rev 383) @@ -19,71 +19,78 @@ package org.codelutin.generator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import java.io.File; import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; -import java.nio.charset.Charset; import java.util.List; import java.util.Properties; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - /** * Generator. - * + * * @author cedric - * - * */ public abstract class Generator { protected static final Log log = LogFactory.getLog(Generator.class); - + protected Properties properties = new Properties(); protected boolean overwrite = true; /** date de derniere modification de la source la plus recente */ protected long lastModifiedSource = 0; protected List<String> excludeTemplates; - - public Generator(){ + + protected String encoding; + + public Generator() { } public void generate(File file, File destDir) { - generate(new File[] {file}, destDir); + generate(new File[]{file}, destDir); } public void generate(File file) { - generate(new File[] {file}, new File(".")); + generate(new File[]{file}, new File(".")); } - public void setProperties(Properties p){ + public void setProperties(Properties p) { this.properties = p; } - public void setOverwrite(boolean v){ + public void setOverwrite(boolean v) { overwrite = v; } - public boolean getOverwrite(){ + public boolean getOverwrite() { return overwrite; } + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + /** - * Permet de recuperer la proprieté passé en argument + * Permet de recuperer la proprieté passé en argument + * * @param name le nom de la propriete * @return la valeur de la propriété */ - public String getProperty(String name){ + public String getProperty(String name) { return properties.getProperty(name); } - protected void setLastModifiedSource(File [] files){ + protected void setLastModifiedSource(File[] files) { for (File file : files) { if (isNewerThanSource(file)) { lastModifiedSource = file.lastModified(); @@ -92,7 +99,7 @@ } } - protected long getLastModifiedSource(){ + protected long getLastModifiedSource() { return lastModifiedSource; } @@ -100,16 +107,16 @@ /** * @param file fichier a tester * @return vrai si le fichier passé en parametre est plus recent que - * les sources sur generateur. + * les sources sur generateur. */ - protected boolean isNewerThanSource(File file){ - if(log.isDebugEnabled()) { - log.debug("source date: " + getLastModifiedSource() +" file date: " + file.lastModified() + "("+file+")"); + protected boolean isNewerThanSource(File file) { + if (log.isDebugEnabled()) { + log.debug("source date: " + getLastModifiedSource() + " file date: " + file.lastModified() + "(" + file + ")"); } return file.lastModified() > getLastModifiedSource(); } - protected File getDestinationFile(File destDir, String filename){ + protected File getDestinationFile(File destDir, String filename) { return new File(destDir, filename); } @@ -118,19 +125,19 @@ try { outputFile = outputFile.getCanonicalFile(); outputFile.getParentFile().mkdirs(); - - //Writer output = new FileWriter(outputFile); - // force UTF-8 encoding - // resolve iso generated file on mac os - // FIXME param it - Writer output = new OutputStreamWriter(new FileOutputStream(outputFile), Charset.forName("UTF-8")); - + + if (log.isDebugEnabled()) { + log.debug("encoding to use "+encoding+" : "+this); + } + Writer output = new OutputStreamWriter(new FileOutputStream(outputFile), encoding); + //Writer output = new OutputStreamWriter(new FileOutputStream(outputFile), Charset.forName("UTF-8")); + output.write(out.getBuffer().toString()); output.close(); } catch (IOException eee) { - if(log.isWarnEnabled()) { + if (log.isWarnEnabled()) { log.warn( - "Unable to write file : " + outputFile.getAbsolutePath(), eee); + "Unable to write file : " + outputFile.getAbsolutePath(), eee); } throw new RuntimeException(eee); } Modified: lutingenerator/trunk/src/main/java/org/codelutin/generator/GeneratorTask.java =================================================================== --- lutingenerator/trunk/src/main/java/org/codelutin/generator/GeneratorTask.java 2008-12-03 10:22:59 UTC (rev 382) +++ lutingenerator/trunk/src/main/java/org/codelutin/generator/GeneratorTask.java 2008-12-03 12:25:24 UTC (rev 383) @@ -30,18 +30,18 @@ package org.codelutin.generator; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.taskdefs.MatchingTask; + import java.io.File; -import java.util.Properties; -import java.util.List; import java.util.Arrays; import java.util.Iterator; +import java.util.List; +import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.taskdefs.MatchingTask; - /** * exemple d'utilisation dans ant <generator * template="org.codelutin.generator.generators.persistence.TopiaModelToDTOGenerator.java,org.codelutin.generator.generators.persistence.TopiaModelToTJDOGenerator.java" @@ -87,6 +87,8 @@ // to enable a customized classloader protected ClassLoader loader; + protected String encoding; + public void setOverwrite(boolean v) { overwrite = v; } @@ -99,6 +101,10 @@ this.excludeTemplates = excludeTemplates; } + public void setEncoding(String encoding) { + this.encoding = encoding; + } + /** * Permet d'ajouter des properties. exemple: toto=1,package=org.codelutin * @param properties TODO @@ -151,6 +157,7 @@ //generators[i] = (Generator) Class.forName(templateName).newInstance(); generators[i].setExcludeTemplates(excludeTemplates); + generators[i].setEncoding(encoding); } catch (ClassCastException eee) { System.out.println("Generator don't herite Generator Class : " Modified: lutingenerator/trunk/src/main/java/org/codelutin/generator/ObjectModelGenerator.java =================================================================== --- lutingenerator/trunk/src/main/java/org/codelutin/generator/ObjectModelGenerator.java 2008-12-03 10:22:59 UTC (rev 382) +++ lutingenerator/trunk/src/main/java/org/codelutin/generator/ObjectModelGenerator.java 2008-12-03 12:25:24 UTC (rev 383) @@ -29,20 +29,6 @@ package org.codelutin.generator; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import org.apache.commons.digester.Digester; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -62,6 +48,20 @@ import org.codelutin.util.StringUtil; import org.xml.sax.SAXException; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * Pour utiliser ce type de générateur il faut implanter au moins une des trois * méthodes generateFrom... et le getFilenameFor... associé si l'on souhaite un @@ -132,8 +132,6 @@ * stereotype ou des tag value sur les class, attribute ou operation * @param destDir le répertoire dans lequel il faudra mettre les fichiers * générés - * @throws SAXException - * @throws IOException */ public void generate(File[] files, File destDir) { setLastModifiedSource(files); @@ -142,23 +140,23 @@ // Digester parser configuration Digester digester = new Digester(); digester.addRuleSet(new DigesterObjectModelRuleSet()); - - for (int i = 0; i < files.length; i++) { - try { - digester.push(objectModel); - objectModel = (ObjectModel)digester.parse(files[i]); - } catch (IOException e) { - log.warn("Unable to parse ObjectModel input file : " - + files[i], e); - } catch (SAXException e) { - log.warn("Unable to parse ObjectModel input file : " - + files[i], e); - } - + + for (File file : files) { + try { + digester.push(objectModel); + objectModel = (ObjectModel) digester.parse(file); + } catch (IOException e) { + log.warn("Unable to parse ObjectModel input file : " + + file, e); + } catch (SAXException e) { + log.warn("Unable to parse ObjectModel input file : " + + file, e); + } + // recherche est charge le fichier propriete associe au modele - File dir = files[i].getParentFile(); - String ext = FileUtil.extension(files[i]); - String name = FileUtil.basename(files[i], "." + ext); + File dir = file.getParentFile(); + String ext = FileUtil.extension(file); + String name = FileUtil.basename(file, "." + ext); File propFile = new File(dir, name + ".properties"); RecursiveProperties prop = new RecursiveProperties(); if (!propFile.exists()) { @@ -188,20 +186,20 @@ log.warn("only tagvalue is allowed on model in properties"); } else { String tag = key.substring("model.tagvalue.".length()); - + ObjectModelImplTagValue tagvalue = new ObjectModelImplTagValue(); tagvalue.setName(tag); tagvalue.setValue(value); - ((ObjectModelImpl)objectModel).addTagValue(tagvalue); + ((ObjectModelImpl) objectModel).addTagValue(tagvalue); } } else { - + Matcher matcher = propertiesPattern.matcher(key); - + if (log.isDebugEnabled()) { log.debug("Propriete: '" + key + "'"); } - + if (matcher.find()) { // fqn is fully qualified name of class String fqn = matcher.group(1); @@ -213,14 +211,14 @@ // type is stereotype or tagvalue String type = matcher.group(4); String tag = matcher.group(5); - + if (log.isDebugEnabled()) { log.debug("Propriete: '" + key + "' => " + "fqn:" + fqn + " target:" + target + " targetName:" + targetName + " type:" + type + " tag:" + tag); } - + ObjectModelClassifier omc = objectModel .getClassifier(fqn); if (omc instanceof ObjectModelClassifierImpl) { @@ -256,8 +254,7 @@ } else { // TODO il faudra avoir des methodes d'acces en // Set sur l'interface pour eviter ce message - log - .warn("Can't add properties to model, it's not an ObjectModelClassifierImpl"); + log.warn("Can't add properties to model, it's not an ObjectModelClassifierImpl"); } } } @@ -284,6 +281,9 @@ * 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é. + * @param model + * @param destDir + * @throws java.io.IOException */ public void generate(ObjectModel model, File destDir) throws IOException { { @@ -307,22 +307,20 @@ } } - for (Iterator classes = model.getClassifiers().iterator(); classes - .hasNext();) { - ObjectModelClassifier clazz = (ObjectModelClassifier) classes - .next(); + for (Object o : model.getClassifiers()) { + ObjectModelClassifier clazz = (ObjectModelClassifier) o; String filename = getFilenameForClassifier(clazz); File outputFile = getDestinationFile(destDir, filename); if (getOverwrite() || !isNewerThanSource(outputFile)) { - try{ + try { StringWriter out = new StringWriter(); MonitorWriter monitorOut = new MonitorWriter(out); generateFromClassifier(monitorOut, clazz); write(outputFile, monitorOut); } catch (Exception eee) { log.warn("Erreur lors de la génération du fichier " + outputFile); - throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); + throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); } } else { Logger.getLogger(getClass().getName() + ".generate").log( @@ -330,22 +328,20 @@ } } - for (Iterator interfaces = model.getInterfaces().iterator(); interfaces - .hasNext();) { - ObjectModelInterface interfacez = (ObjectModelInterface) interfaces - .next(); + for (Object o : model.getInterfaces()) { + ObjectModelInterface interfacez = (ObjectModelInterface) o; String filename = getFilenameForInterface(interfacez); File outputFile = getDestinationFile(destDir, filename); if (getOverwrite() || !isNewerThanSource(outputFile)) { - try{ + try { StringWriter out = new StringWriter(); MonitorWriter monitorOut = new MonitorWriter(out); generateFromInterface(monitorOut, interfacez); write(outputFile, monitorOut); } catch (Exception eee) { log.warn("Erreur lors de la génération du fichier " + outputFile); - throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); + throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); } } else { Logger.getLogger(getClass().getName() + ".generate").log( @@ -353,21 +349,20 @@ } } - for (Iterator classes = model.getClasses().iterator(); classes - .hasNext();) { - ObjectModelClass clazz = (ObjectModelClass) classes.next(); + for (Object o : model.getClasses()) { + ObjectModelClass clazz = (ObjectModelClass) o; String filename = getFilenameForClass(clazz); File outputFile = getDestinationFile(destDir, filename); if (getOverwrite() || !isNewerThanSource(outputFile)) { - try{ + try { StringWriter out = new StringWriter(); MonitorWriter monitorOut = new MonitorWriter(out); generateFromClass(monitorOut, clazz); write(outputFile, monitorOut); } catch (Exception eee) { log.warn("Erreur lors de la génération du fichier " + outputFile); - throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); + throw new RuntimeException("Erreur lors de la génération du fichier " + outputFile, eee); } } else { Logger.getLogger(getClass().getName() + ".generate").log( Modified: maven-generator-plugin/trunk/changelog =================================================================== --- maven-generator-plugin/trunk/changelog 2008-12-03 10:22:59 UTC (rev 382) +++ maven-generator-plugin/trunk/changelog 2008-12-03 12:25:24 UTC (rev 383) @@ -1,5 +1,6 @@ 0.62 chemit 200811?? - * 20081118 [chemit] use lutinproject 3.1 + * 20081203 [chemit] add a encoding goal property to be dispatched in all generator to control file generation encoding + * 20081118 [chemit] use lutinproject 3.1 * 20081117 [chemit] - add extraClassPathDirectory parameter to can specify an extra directory to add in classLoader - bump lutingenerator version Modified: maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/GeneratorPlugin.java =================================================================== --- maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/GeneratorPlugin.java 2008-12-03 10:22:59 UTC (rev 382) +++ maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/GeneratorPlugin.java 2008-12-03 12:25:24 UTC (rev 383) @@ -40,9 +40,9 @@ import org.codelutin.generator.GeneratorTask; import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; import java.net.URLClassLoader; -import java.net.URL; -import java.net.MalformedURLException; import java.util.Arrays; import java.util.List; @@ -121,7 +121,14 @@ */ protected File extraClassPathDirectory; + /** + * Encoding to be used for generation of files. + * + * @parameter expression="${generator.encoding}" default-value="${maven.compile.encoding} + */ + protected String encoding; + public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("Effectue toutes les générations et copie les fichiers générés " + "dans le répertoire de compilation"); @@ -145,11 +152,10 @@ /* Configuration */ generator.setOverwrite(overwrite); - generator.setTemplates(templates); - generator.setSrcdir(srcDirGen); - + generator.setEncoding(encoding); + destDirGen.mkdirs(); generator.setDestdir(destDirGen); @@ -161,7 +167,7 @@ generator.setExcludeTemplates(excludeTemplates == null ? java.util.Collections.<String>emptyList() : excludeTemplates); if (extraClassPathDirectory != null) { - getLog().info("will add the cp to classloader "+ extraClassPathDirectory); + getLog().info("will add the cp to classloader " + extraClassPathDirectory); generator.setLoader(fixClassLoader(extraClassPathDirectory)); } /* Execution */ @@ -174,7 +180,7 @@ */ protected void fixCompileSourceRoots() { - if (!project.getCompileSourceRoots().contains(destDirGen.getPath())) { + if (project != null && !project.getCompileSourceRoots().contains(destDirGen.getPath())) { getLog().info("add compile source root : " + destDirGen); project.addCompileSourceRoot(destDirGen.getPath()); Resource resources = new Resource(); @@ -184,7 +190,7 @@ project.addResource(resources); } - + } protected ClassLoader fixClassLoader(File dirToAdd) throws MojoExecutionException { @@ -196,6 +202,5 @@ } - } }
participants (1)
-
tchemit@users.labs.libre-entreprise.org