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.