Author: fdesbois Date: 2009-11-12 21:10:53 +0100 (Thu, 12 Nov 2009) New Revision: 711 Added: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Generator.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java Log: Improve extension for transformation (initInputModel, initOutputModel, initOutputGenerator, transform method without destDir parameter) Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2009-11-12 20:10:53 UTC (rev 711) @@ -59,7 +59,7 @@ if (parent != null) { return parent.getOverwrite(); } - return overwrite; + return super.getOverwrite(); } /** @@ -73,7 +73,7 @@ if (parent != null) { return parent.getProperty(name); } - return properties.getProperty(name); + return super.getProperty(name); } @Override @@ -81,7 +81,7 @@ if (parent != null) { return parent.getLastModifiedSource(); } - return this.lastModifiedSource; + return super.getLastModifiedSource(); } /** @@ -116,13 +116,13 @@ return parent.canGeneratePackage(packageName); } // if not generation restriction, generate everything - if (generatedPackages != null && !generatedPackages.isEmpty()) { + if (getGeneratedPackages() != null && !getGeneratedPackages().isEmpty()) { canGenerate = false; // on doit donc tester que le package courant // soit est egal a un des element de la liste // soit commence par ca - for (String generatedPackage : generatedPackages) { + for (String generatedPackage : getGeneratedPackages()) { // cas egalité parfaites if (packageName != null && packageName.equals(generatedPackage)) { Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Generator.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-11-12 20:10:53 UTC (rev 711) @@ -22,9 +22,11 @@ import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Properties; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.Model; @@ -46,8 +48,15 @@ protected static Log log = LogFactory.getLog(Generator.class); + public static final String PROP_DEFAULT_PACKAGE = "defaultPackage"; + public static final String PROP_OVERWRITE = "overwrite"; + public static final String PROP_ENCODING = "encoding"; + public static final String PROP_LAST_MODIFIED_SOURCE = "lastModifiedSource"; + public static final String PROP_GENERATED_PACKAGES = "generatedPackages"; + public static final String PROP_EXCLUDE_TEMPLATES = "excludeTemplates"; + protected Properties properties = new Properties(); - protected boolean overwrite = true; + //protected boolean overwrite = true; protected List<String> excludeTemplates; @@ -61,28 +70,29 @@ protected String encoding; /** date de derniere modification de la source la plus recente */ - protected long lastModifiedSource = 0; + //protected long lastModifiedSource = 0; /** Model */ protected M model; - public Generator() { - } - + @Deprecated public void setOverwrite(boolean v) { - overwrite = v; + //overwrite = v; + properties.setProperty(PROP_OVERWRITE, String.valueOf(v)); } public boolean getOverwrite() { - return overwrite; + return Boolean.parseBoolean(properties.getProperty(PROP_OVERWRITE, "true")); } public String getEncoding() { - return encoding; + return properties.getProperty(PROP_ENCODING, ""); } + @Deprecated public void setEncoding(String encoding) { - this.encoding = encoding; + //this.encoding = encoding; + properties.setProperty(PROP_ENCODING, encoding); } public void setProperties(Properties p) { @@ -105,23 +115,49 @@ * If {@code null} or empty, generate all packages. * * @param generatedPackages list of package to generate + * @deprecated */ + @Deprecated public void setGeneratedPackages(List<String> generatedPackages) { this.generatedPackages = generatedPackages; } + protected List<String> getGeneratedPackages() { + if (generatedPackages == null) { + String genPackages = getProperty(PROP_GENERATED_PACKAGES); + if (!StringUtils.isEmpty(genPackages)) { + generatedPackages = new ArrayList<String>(); + for (String s : genPackages.split(",")) { + generatedPackages.add(s); + } + } + } + return this.generatedPackages; + } + + @Deprecated public void setLastModifiedSource(long lastModifiedSource) { - this.lastModifiedSource = lastModifiedSource; + properties.setProperty(PROP_LAST_MODIFIED_SOURCE, String.valueOf(lastModifiedSource)); } public long getLastModifiedSource() { - return this.lastModifiedSource; + return Long.parseLong(properties.getProperty(PROP_LAST_MODIFIED_SOURCE, "0")); } public List<String> getExcludeTemplates() { + if (excludeTemplates == null) { + String excludes = getProperty(PROP_EXCLUDE_TEMPLATES); + if (!StringUtils.isEmpty(excludes)) { + excludeTemplates = new ArrayList<String>(); + for (String s : excludes.split(",")) { + excludeTemplates.add(s); + } + } + } return excludeTemplates; } + @Deprecated public void setExcludeTemplates(List<String> excludeTemplates) { this.excludeTemplates = excludeTemplates; } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ObjectModelTransformer.java 2009-11-12 20:10:53 UTC (rev 711) @@ -41,54 +41,28 @@ */ public abstract class ObjectModelTransformer<O extends Model> extends Transformer<ObjectModel, O> { - public ObjectModelTransformer(Generator<O> output) { - super(output); + public ObjectModelTransformer() { + super(); } - 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 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 inputModel to transform - * @param destDir destination folder for generation after transformation - * @throws IOException - */ @Override - public void generate(ObjectModel model, File destDir) throws IOException { + public void transform(ObjectModel model) { - this.model = model; // inputModel - - initOutputModel(); + transformFromElement(getModel(), ObjectModelType.OBJECT_MODEL); - transformFromElement(model, ObjectModelType.OBJECT_MODEL); - // transformFromClassifier - transformFromElements(model.getClassifiers(), ObjectModelType.OBJECT_MODEL_CLASSIFIER); + transformFromElements(getModel().getClassifiers(), ObjectModelType.OBJECT_MODEL_CLASSIFIER); // transformFromInterface - transformFromElements(model.getInterfaces(), ObjectModelType.OBJECT_MODEL_INTERFACE); + transformFromElements(getModel().getInterfaces(), ObjectModelType.OBJECT_MODEL_INTERFACE); // transformFromClass - transformFromElements(model.getClasses(), ObjectModelType.OBJECT_MODEL_CLASS); + transformFromElements(getModel().getClasses(), ObjectModelType.OBJECT_MODEL_CLASS); // transformFromEnumeration - transformFromElements(model.getEnumerations(), ObjectModelType.OBJECT_MODEL_ENUMERATION); + transformFromElements(getModel().getEnumerations(), ObjectModelType.OBJECT_MODEL_ENUMERATION); debugOutputModel(); - - outputGenerator.generate(getOutputModel(), destDir); } protected abstract void debugOutputModel(); Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2009-11-12 20:10:53 UTC (rev 711) @@ -46,46 +46,37 @@ protected O outputModel; - public Transformer(Generator<O> outputGenerator) { + protected Properties outputProperties; + + public Transformer() { super(); - this.outputGenerator = outputGenerator; } - @Override - public void setOverwrite(boolean v) { - outputGenerator.setOverwrite(v); + protected void init(I model) { + this.model = initInputModel(model); + this.outputGenerator = initOutputGenerator(); + this.outputGenerator.setProperties(getOutputProperties()); + this.outputModel = initOutputModel(); } - @Override - public void setEncoding(String encoding) { - outputGenerator.setEncoding(encoding); + protected I initInputModel(I model) { + return model; } - @Override - public void setProperties(Properties p) { - outputGenerator.setProperties(p); - } + protected abstract Generator<O> initOutputGenerator(); - /** - * Set list of package to allow generation. - * - * If {@code null} or empty, generate all packages. - * - * @param generatedPackages list of package to generate - */ - @Override - public void setGeneratedPackages(List<String> generatedPackages) { - outputGenerator.setGeneratedPackages(generatedPackages); - } + protected abstract O initOutputModel(); @Override - public void setLastModifiedSource(long lastModifiedSource) { - outputGenerator.setLastModifiedSource(lastModifiedSource); + public void setProperties(Properties outputProperties) { + this.outputProperties = outputProperties; } - @Override - public void setExcludeTemplates(List<String> excludeTemplates) { - outputGenerator.setExcludeTemplates(excludeTemplates); + protected Properties getOutputProperties() { + if (outputProperties == null) { + outputProperties = new Properties(); + } + return outputProperties; } public Generator<O> getOutputGenerator() { @@ -99,6 +90,36 @@ @Override @Deprecated public void generate(File[] file, File destDir) { + this.outputGenerator = initOutputGenerator(); + this.outputGenerator.setProperties(getOutputProperties()); getOutputGenerator().generate(file, destDir); } + + + /** + * 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 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 inputModel to transform + * @param destDir destination folder for generation after transformation + * @throws IOException + */ + @Override + public void generate(I model, File destDir) throws IOException { + init(model); + transform(model); + getOutputGenerator().generate(getOutputModel(), destDir); + } + + public abstract void transform(I model); } Modified: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2009-11-12 20:10:53 UTC (rev 711) @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.Generator; import org.nuiton.eugene.ImportsManager; import org.nuiton.eugene.ObjectModelTransformer; import org.nuiton.eugene.models.object.*; @@ -41,20 +42,24 @@ private static final Log log = LogFactory.getLog(ObjectModelTransformerToJava.class); - private JavaBuilder builder; + protected JavaBuilder builder; public ObjectModelTransformerToJava() { - super(new JavaGenerator()); + super(); } @Override + protected Generator<ObjectModel> initOutputGenerator() { + return new JavaGenerator(); + } + + @Override protected ObjectModel initOutputModel() { if (log.isInfoEnabled()) { log.debug("inputModelName = " + getModel().getName()); } this.builder = new JavaBuilder(getModel().getName()); - this.outputModel = builder.getModel(); - return this.outputModel; + return builder.getModel(); } @Override Added: branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java =================================================================== --- branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java (rev 0) +++ branches/eugene-2.0/eugene-test/src/main/java/org/nuiton/eugene/test/generator/Megatron.java 2009-11-12 20:10:53 UTC (rev 711) @@ -0,0 +1,43 @@ + +package org.nuiton.eugene.test.generator; + +import org.nuiton.eugene.java.ObjectModelTransformerToJava; +import org.nuiton.eugene.models.object.ObjectModelClass; + +/** + * Megatron + * + * Chainage des transformer : Modele de depart -> transformation dans BeanTransformer = modele d'entrée de Megatron + * + * Created: 12 nov. 2009 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class Megatron extends ObjectModelTransformerToJava { + + public Megatron() { + super(); + } + + /* + CAS modele de sortie vide : modele d'entree transformee par BeanTransformer + + @Override + protected ObjectModel initInputModel(ObjectModel model) { // preparation du modele d'entrée + BeanTransformer beanTransformer = new BeanTransformer(); + beanTransformer.transform(model); + return beanTransformer.getOutputModel(); + }*/ + + @Override + public void transformFromClass(ObjectModelClass clazz) { + + + + } + +} Modified: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-11-07 17:41:17 UTC (rev 710) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-11-12 20:10:53 UTC (rev 711) @@ -31,6 +31,7 @@ import java.util.Map.Entry; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Resource; import org.apache.maven.plugin.MojoExecutionException; @@ -185,15 +186,15 @@ } M model = modelReader.read(modelFiles); - List<String> packages = getPackagesToGenerate(); + //List<String> packages = getPackagesToGenerate(); - if (packages == null) { + if (StringUtils.isEmpty(generatedPackages)) { getLog().info(" generating all packages"); } else { - getLog().info(" generating only for packages " + packages); + getLog().info(" generating only for packages " + generatedPackages); } - List<Generator<M>> generators = getGenerators(packages, modelReader); + List<Generator<M>> generators = getGenerators(modelReader); for (Generator<M> generator : generators) { getLog().info("Apply " + generator.getClass().getSimpleName() + " generator"); @@ -233,17 +234,6 @@ return generateResources; } - protected List<String> getPackagesToGenerate() { - List<String> generatedPackagesAsList = null; - if (generatedPackages != null && !generatedPackages.isEmpty()) { - generatedPackagesAsList = new ArrayList<String>(); - for (String s : generatedPackages.split(",")) { - generatedPackagesAsList.add(s); - } - } - return generatedPackagesAsList; - } - /** * Recuperation de la liste des fichiers de modele a traite. * @@ -311,11 +301,19 @@ @SuppressWarnings("unchecked") protected <M extends Model> List<Generator<M>> - getGenerators(List<String> generatedPackagesAsList, ModelReader<M> modelReader) + getGenerators(ModelReader<M> modelReader) throws MojoFailureException, MojoExecutionException { // init generators Properties generatorProperties = new Properties(); - generatorProperties.setProperty("defaultPackage", defaultPackage); + generatorProperties.setProperty(Generator.PROP_DEFAULT_PACKAGE, defaultPackage); + generatorProperties.setProperty(Generator.PROP_OVERWRITE, String.valueOf(overwrite)); + generatorProperties.setProperty(Generator.PROP_ENCODING, encoding); + generatorProperties.setProperty(Generator.PROP_LAST_MODIFIED_SOURCE, String.valueOf(modelReader.getLastModifiedSource())); + if (generatedPackages != null) { + generatorProperties.setProperty(Generator.PROP_GENERATED_PACKAGES, generatedPackages); + } + generatorProperties.setProperty(Generator.PROP_EXCLUDE_TEMPLATES, getExcludeTemplatesAsString()); + List<Generator<M>> generators = new ArrayList<Generator<M>>(); String[] templatesNames = templates.split(","); ClassLoader fixedClassLoader = fixClassLoader(); @@ -326,12 +324,7 @@ Generator<M> generator = (Generator<M>) Class.forName(templateName, true, fixedClassLoader).newInstance(); // configuration - generator.setExcludeTemplates(Arrays.asList(excludeTemplates)); generator.setProperties(generatorProperties); - generator.setOverwrite(overwrite); - generator.setEncoding(encoding); - generator.setLastModifiedSource(modelReader.getLastModifiedSource()); - generator.setGeneratedPackages(generatedPackagesAsList); generators.add(generator); } catch (InstantiationException e) { throw new MojoFailureException("Can't instantiate generator : " + templateName, e); @@ -344,6 +337,17 @@ return generators; } + protected String getExcludeTemplatesAsString() { + String result = ""; + for (int i=0; i < excludeTemplates.length; i++) { + result += excludeTemplates[i]; + if (i != excludeTemplates.length-1) { + result += ","; + } + } + return result; + } + /** * permet d'ajout le répertoire de génération des fichiers java dans les répertoires * de compilation du projet Maven.
participants (1)
-
fdesbois@users.nuiton.org