Index: lutingenerator/src/java/org/codelutin/generator/Generator.java diff -u lutingenerator/src/java/org/codelutin/generator/Generator.java:1.6 lutingenerator/src/java/org/codelutin/generator/Generator.java:1.7 --- lutingenerator/src/java/org/codelutin/generator/Generator.java:1.6 Thu Jul 15 13:33:38 2004 +++ lutingenerator/src/java/org/codelutin/generator/Generator.java Wed Aug 4 08:53:16 2004 @@ -8,6 +8,9 @@ import java.io.File; import java.util.Properties; +import java.io.Writer; +import java.io.IOException; +import java.io.FileWriter; /** * @author cedric @@ -18,6 +21,10 @@ public abstract class Generator { protected Properties properties = new Properties(); + protected boolean overwrite = true; + /** date de derniere modification de la source la plus recente */ + protected long lastModifiedSource = 0; + public void generate(File file, File destDir) { generate(new File[] {file}, destDir); @@ -31,11 +38,55 @@ this.properties = p; } + public void setOverwrite(boolean v){ + overwrite = v; + } + + public boolean getOverwrite(){ + return overwrite; + } + /** * Permet de recuperer les proprietes passé en argument */ public String getProperty(String name){ return properties.getProperty(name); + } + + protected void setLastModifiedSource(File [] files){ + for (int i = 0; i < files.length; i++) { + if(isNewerThanSource(files[i])){ + lastModifiedSource = files[i].lastModified(); + } + } + } + + /** + * @return vrai si le fichier passé en parametre est plus recent que + * les sources sur generateur. + */ + protected boolean isNewerThanSource(File file){ + return file.lastModified() > lastModifiedSource; + } + + protected File getDestinationFile(File destDir, String filename){ + return new File(destDir, filename); + } + + protected void write(File outputFile, MonitorWriter out) { + if (out.isModified()) { + try { + outputFile = outputFile.getCanonicalFile(); + outputFile.getParentFile().mkdirs(); + Writer output = new FileWriter(outputFile); + output.write(out.getBuffer().toString()); + output.close(); + } catch (IOException eee) { + System.out.println( + "I was unable to write file : " + outputFile.getAbsolutePath()); + eee.printStackTrace(); + } + } } public abstract void generate(File[] file, File destDir); Index: lutingenerator/src/java/org/codelutin/generator/GeneratorTask.java diff -u lutingenerator/src/java/org/codelutin/generator/GeneratorTask.java:1.8 lutingenerator/src/java/org/codelutin/generator/GeneratorTask.java:1.9 --- lutingenerator/src/java/org/codelutin/generator/GeneratorTask.java:1.8 Thu Jul 15 13:33:38 2004 +++ lutingenerator/src/java/org/codelutin/generator/GeneratorTask.java Wed Aug 4 08:53:16 2004 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.8 $ + * @version $Revision: 1.9 $ * - * Mise a jour: $Date: 2004/07/15 13:33:38 $ + * Mise a jour: $Date: 2004/08/04 08:53:16 $ * par : $Author: bpoussin $ */ @@ -38,6 +38,8 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.MatchingTask; import java.util.Properties; +import java.util.logging.Logger; +import java.util.logging.Level; /** * exemple d'utilisation dans ant * Copyright Code Lutin -* @version $Revision: 1.1 $ +* @version $Revision: 1.2 $ * -* Mise a jour: $Date: 2004/06/08 14:47:46 $ -* par : $Author: mazelier $ +* Mise a jour: $Date: 2004/08/04 08:53:16 $ +* par : $Author: bpoussin $ */ package org.codelutin.generator; @@ -34,14 +34,25 @@ import java.io.FilterWriter; import java.io.IOException; import java.io.Writer; +import java.io.StringWriter; - +/** +* Permet de savoir si on a ecrit dans le flux ou non. L'ecriture d'une chaine +* vide a le meme comportement que l'ecriture d'une vrai chaine. +* De cette façon meme les fichiers peuvent être créer. +*/ public class MonitorWriter extends FilterWriter { // MonitorWriter boolean modified = false; + StringWriter out = null; - public MonitorWriter(Writer out) { + public MonitorWriter(StringWriter out) { super(out); + this.out = out; + } + + public StringBuffer getBuffer(){ + return out.getBuffer(); } public boolean isModified() { Index: lutingenerator/src/java/org/codelutin/generator/ObjectModelGenerator.java diff -u lutingenerator/src/java/org/codelutin/generator/ObjectModelGenerator.java:1.14 lutingenerator/src/java/org/codelutin/generator/ObjectModelGenerator.java:1.15 --- lutingenerator/src/java/org/codelutin/generator/ObjectModelGenerator.java:1.14 Thu Jul 15 13:33:38 2004 +++ lutingenerator/src/java/org/codelutin/generator/ObjectModelGenerator.java Wed Aug 4 08:53:16 2004 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin -* @version $Revision: 1.14 $ +* @version $Revision: 1.15 $ * -* Mise a jour: $Date: 2004/07/15 13:33:38 $ +* Mise a jour: $Date: 2004/08/04 08:53:16 $ * par : $Author: bpoussin $ */ @@ -45,6 +45,8 @@ import org.codelutin.generator.models.object.xml.ObjectModelImpl; import org.codelutin.util.ResourceNotFoundException; import org.codelutin.xml.XMLObjectParser; +import java.util.logging.Logger; +import java.util.logging.Level; /** * Pour utiliser ce type de générateur il faut implanter au moins une des trois @@ -88,6 +90,7 @@ * générés */ public void generate(File[] files, File destDir) { + setLastModifiedSource(files); ObjectModel objectModel = new ObjectModelImpl(); for (int i = 0; i < files.length; i++) { try { @@ -127,13 +130,15 @@ { this.model = model; - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - generateFromModel(monitorOut, model); - - if (monitorOut.isModified()) { - String filename = getFilenameForModel(model); - write(destDir, filename, out.getBuffer()); + String filename = getFilenameForModel(model); + File outputFile = getDestinationFile(destDir, filename); + if(getOverwrite() || !isNewerThanSource(outputFile)){ + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + generateFromModel(monitorOut, model); + write(outputFile, monitorOut); + }else{ + Logger.getLogger(getClass().getName() + ".generate").log(Level.FINE, "file "+ outputFile + "is up-to-date"); } } @@ -142,13 +147,15 @@ ) { ObjectModelClassifier clazz = (ObjectModelClassifier) classes.next(); - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - generateFromClassifier(monitorOut, clazz); - - if (monitorOut.isModified()) { - String filename = getFilenameForClassifier(clazz); - write(destDir, filename, out.getBuffer()); + String filename = getFilenameForClassifier(clazz); + File outputFile = getDestinationFile(destDir, filename); + if(getOverwrite() || !isNewerThanSource(outputFile)){ + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + generateFromClassifier(monitorOut, clazz); + write(outputFile, monitorOut); + }else{ + Logger.getLogger(getClass().getName() + ".generate").log(Level.FINE, "file "+ outputFile + "is up-to-date"); } } @@ -158,13 +165,15 @@ ObjectModelInterface interfacez = (ObjectModelInterface) interfaces.next(); - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - generateFromInterface(monitorOut, interfacez); - - if (monitorOut.isModified()) { - String filename = getFilenameForInterface(interfacez); - write(destDir, filename, out.getBuffer()); + String filename = getFilenameForInterface(interfacez); + File outputFile = getDestinationFile(destDir, filename); + if(getOverwrite() || !isNewerThanSource(outputFile)){ + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + generateFromInterface(monitorOut, interfacez); + write(outputFile, monitorOut); + }else{ + Logger.getLogger(getClass().getName() + ".generate").log(Level.FINE, "file "+ outputFile + "is up-to-date"); } } @@ -173,29 +182,16 @@ ) { ObjectModelClass clazz = (ObjectModelClass) classes.next(); - StringWriter out = new StringWriter(); - MonitorWriter monitorOut = new MonitorWriter(out); - generateFromClass(monitorOut, clazz); - - if (monitorOut.isModified()) { - String filename = getFilenameForClass(clazz); - write(destDir, filename, out.getBuffer()); + String filename = getFilenameForClass(clazz); + File outputFile = getDestinationFile(destDir, filename); + if(getOverwrite() || !isNewerThanSource(outputFile)){ + StringWriter out = new StringWriter(); + MonitorWriter monitorOut = new MonitorWriter(out); + generateFromClass(monitorOut, clazz); + write(outputFile, monitorOut); + }else{ + Logger.getLogger(getClass().getName() + ".generate").log(Level.FINE, "file "+ outputFile + "is up-to-date"); } - } - } - - protected void write(File destDir, String filename, StringBuffer out) { - File outputFile = new File(destDir, filename); - try { - outputFile = outputFile.getCanonicalFile(); - outputFile.getParentFile().mkdirs(); - Writer output = new FileWriter(outputFile); - output.write(out.toString()); - output.close(); - } catch (IOException eee) { - System.out.println( - "I was unable to write file : " + outputFile.getAbsolutePath()); - eee.printStackTrace(); } } Index: lutingenerator/src/java/org/codelutin/generator/UIModelGenerator.java diff -u lutingenerator/src/java/org/codelutin/generator/UIModelGenerator.java:1.4 lutingenerator/src/java/org/codelutin/generator/UIModelGenerator.java:1.5 --- lutingenerator/src/java/org/codelutin/generator/UIModelGenerator.java:1.4 Wed Jun 30 13:27:25 2004 +++ lutingenerator/src/java/org/codelutin/generator/UIModelGenerator.java Wed Aug 4 08:53:16 2004 @@ -18,6 +18,8 @@ import org.codelutin.generator.models.ui.UIModelObject; import org.codelutin.util.ResourceNotFoundException; import org.codelutin.xml.XMLObjectParser; +import java.util.logging.Logger; +import java.util.logging.Level; /** * @author cedric @@ -34,7 +36,7 @@ } public void generate(File[] tabUIFilesName, File destDir) { - + setLastModifiedSource(tabUIFilesName); for(int i = 0; i