Eugene-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
May 2010
- 2 participants
- 30 discussions
28 May '10
Author: fdesbois
Date: 2010-05-28 15:15:02 +0200 (Fri, 28 May 2010)
New Revision: 911
Url: http://nuiton.org/repositories/revision/eugene/911
Log:
change log level to INFO
Modified:
trunk/maven-eugene-plugin/src/main/resources/log4j.properties
Modified: trunk/maven-eugene-plugin/src/main/resources/log4j.properties
===================================================================
--- trunk/maven-eugene-plugin/src/main/resources/log4j.properties 2010-05-27 16:37:38 UTC (rev 910)
+++ trunk/maven-eugene-plugin/src/main/resources/log4j.properties 2010-05-28 13:15:02 UTC (rev 911)
@@ -6,4 +6,4 @@
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
# package level
log4j.logger.org.nuiton=INFO
-#log4j.logger.org.nuiton.eugene=DEBUG
+log4j.logger.org.nuiton.eugene=INFO
1
0
27 May '10
Author: fdesbois
Date: 2010-05-27 18:37:38 +0200 (Thu, 27 May 2010)
New Revision: 910
Url: http://nuiton.org/repositories/revision/eugene/910
Log:
Evo #611 : manage getter method in JavaBeanTransformer for boolean properties : add getter with 'is' prefix
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-20 11:57:15 UTC (rev 909)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-27 16:37:38 UTC (rev 910)
@@ -232,7 +232,8 @@
createGetMethod(output,
attrName,
attrNameCapitalized,
- attrType
+ attrType,
+ null
);
createSetMethod(output,
@@ -283,10 +284,16 @@
protected void createGetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
- String attrType) {
+ String attrType,
+ String methodPrefix) {
+
+ if (methodPrefix == null) {
+ methodPrefix = JavaGeneratorUtil.OPERATION_GETTER_DEFAULT_PREFIX;
+ }
+
ObjectModelOperation getter = addOperation(
output,
- "get" + attrNameCapitalized,
+ methodPrefix + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
);
@@ -295,6 +302,13 @@
return <%=attrName%>;
}*/
);
+
+ // Create also getter for boolean with 'is' prefix
+ if (attrType.toLowerCase().contains("boolean") &&
+ !methodPrefix.equals(JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX)) {
+ createGetMethod(output, attrName, attrNameCapitalized, attrType,
+ JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX);
+ }
}
protected void createGetChildMethod(ObjectModelClass output,
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-20 11:57:15 UTC (rev 909)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGeneratorUtil.java 2010-05-27 16:37:38 UTC (rev 910)
@@ -24,12 +24,18 @@
*/
package org.nuiton.eugene.java;
+import org.apache.commons.lang.StringUtils;
import org.nuiton.eugene.GeneratorUtil;
+import org.nuiton.eugene.models.object.ObjectModelAttribute;
+import org.nuiton.eugene.models.object.ObjectModelClass;
import org.nuiton.eugene.models.object.ObjectModelClassifier;
import org.nuiton.eugene.models.object.ObjectModelModifier;
import org.nuiton.eugene.models.object.ObjectModelOperation;
import org.nuiton.eugene.models.object.ObjectModelParameter;
+import java.util.Collection;
+import java.util.List;
+
/**
* Utility class for pure java templates.
*
@@ -38,6 +44,10 @@
*/
public class JavaGeneratorUtil extends GeneratorUtil {
+ public static final String OPERATION_GETTER_DEFAULT_PREFIX = "get";
+
+ public static final String OPERATION_GETTER_BOOLEAN_PREFIX = "is";
+
/** Stereotype for JavaBean objects. */
public static final String STEREOTYPE_BEAN = "bean";
1
0
r909 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer
by tchemit@users.nuiton.org 20 May '10
by tchemit@users.nuiton.org 20 May '10
20 May '10
Author: tchemit
Date: 2010-05-20 13:57:15 +0200 (Thu, 20 May 2010)
New Revision: 909
Url: http://nuiton.org/repositories/revision/eugene/909
Log:
fix exclude templates
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-17 16:52:57 UTC (rev 908)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-20 11:57:15 UTC (rev 909)
@@ -53,7 +53,7 @@
public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
- public static final String PROP_EXCLUDE_TEMPLATES = "excludetemplates";
+ public static final String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
public static final String PROP_TEMPLATES = "templates";
@@ -71,7 +71,7 @@
super(
PROP_TEMPLATES, "templates",
PROP_TEMPLATES_LIST, "templatesList",
- PROP_EXCLUDE_TEMPLATES, "excludetemplates",
+ PROP_EXCLUDE_TEMPLATES, "excludeTemplates",
PROP_READER, "reader",
PROP_MODEL_READER, "modelReader",
PROP_GENERATED_PACKAGES, "generatedPackages",
@@ -207,6 +207,7 @@
templateProperties.put(Template.PROP_VERBOSE, verbose);
templateProperties.put(Template.PROP_OVERWRITE, configuration.isOverwrite());
templateProperties.put(Template.PROP_CLASS_LOADER, configuration.getClassLoader());
+ templateProperties.put(Template.PROP_EXCLUDE_TEMPLATES, configuration.getProperties().get(PROP_EXCLUDE_TEMPLATES));
String generatedPackages = getGeneratedPackages();
if (StringUtils.isEmpty(generatedPackages)) {
@@ -324,8 +325,9 @@
if (configuration.isVerbose()) {
getLog().info(" overwrite = " + template.isOverwrite());
- getLog ().info(" encoding = " + template.getEncoding());
+ getLog().info(" encoding = " + template.getEncoding());
getLog().info(" lastModifiedSource = " + template.getLastModifiedSource());
+ getLog().info(" exclude = " + template.getExcludeTemplates());
}
// apply template
1
0
r908 - trunk/eugene/src/main/java/org/nuiton/eugene/models/object
by fdesbois@users.nuiton.org 17 May '10
by fdesbois@users.nuiton.org 17 May '10
17 May '10
Author: fdesbois
Date: 2010-05-17 18:52:57 +0200 (Mon, 17 May 2010)
New Revision: 908
Url: http://nuiton.org/repositories/revision/eugene/908
Log:
Ano #619 : add association class case for tagvalue attribute on participants
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-16 12:30:04 UTC (rev 907)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-17 16:52:57 UTC (rev 908)
@@ -40,6 +40,7 @@
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet;
+import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelImpl;
@@ -207,9 +208,11 @@
if (CLASS.equals(target)) {
elems.add(omc);
} else if (ATTRIBUTE.equals(target)) {
- ObjectModelClass classmodel = (ObjectModelClass) omc;
- elems.add(classmodel
- .getAttribute(targetName));
+
+ ObjectModelAttribute attr =
+ getAttribute((ObjectModelClass)omc, targetName);
+ elems.add(attr);
+
} else if (OPERATION.equals(target)) {
elems.addAll(omc.getOperations(targetName));
}
@@ -268,4 +271,36 @@
}
}*/
}
+
+ /**
+ * Retrieve an attribute from a {@code clazz} with its {@code name}.
+ * This method manage the association class case to explore participants
+ * attributes if needed.
+ *
+ * @param clazz where the attribute need to be find
+ * @param name attribute name to find
+ * @return the attribute found or null
+ */
+ protected ObjectModelAttribute getAttribute(ObjectModelClass clazz,
+ String name) {
+ ObjectModelAttribute result = clazz.getAttribute(name);
+
+ // Ano #619 : FD-2010-05-17 : Specific case for Association class :
+ // check on participant attributes
+ if (result == null && clazz instanceof ObjectModelAssociationClassImpl) {
+ if (log.isDebugEnabled()) {
+ log.debug("Attribute " + name + " not found from " +
+ clazz.getQualifiedName() +" association class. " +
+ "Will check participants...");
+ }
+ ObjectModelAssociationClass assoc = (ObjectModelAssociationClass)clazz;
+ for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) {
+ if (participant.getName().equals(name)) {
+ result = participant;
+ break;
+ }
+ }
+ }
+ return result;
+ }
}
1
0
r907 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 16 May '10
by tchemit@users.nuiton.org 16 May '10
16 May '10
Author: tchemit
Date: 2010-05-16 14:30:04 +0200 (Sun, 16 May 2010)
New Revision: 907
Url: http://nuiton.org/repositories/revision/eugene/907
Log:
improve log
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:19:55 UTC (rev 906)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:30:04 UTC (rev 907)
@@ -305,8 +305,6 @@
/** fixed classloader */
protected ClassLoader fixedClassLoader;
- private WriterReport writerReport;
-
@Override
protected void init() throws Exception {
@@ -352,7 +350,7 @@
public void addFile(String entry, File file, boolean b) {
super.addFile(entry, file, b);
if (b || isVerbose()) {
- getLog().info(String.format("[%1$s] Will generate %2$s", entry, file));
+ getLog().info("Will generate " + file);
}
if (getLog().isDebugEnabled()) {
getLog().debug(String.format("[%1$s] Will generate %2$s", entry, file));
1
0
Author: tchemit
Date: 2010-05-16 14:19:55 +0200 (Sun, 16 May 2010)
New Revision: 906
Url: http://nuiton.org/repositories/revision/eugene/906
Log:
- Anomalie #613: Files are generated even if they are up to date
- Evolution #614: Improve template configuration design
- Evolution #615: Improve plugin console messages
Added:
trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
Modified:
trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java
trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java
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-05-14 13:44:45 UTC (rev 905)
+++ trunk/ant-eugene-task/src/main/java/org/nuiton/eugene/GeneratorTask.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -274,10 +274,12 @@
for (int i = 0; i < templateGenerators.length; i++) {
String templateName = templateGenerators[i].trim();
try {
- generators[i] = (Template<Model>)Class.forName(templateName).newInstance();
- properties.setProperty(Template.PROP_OVERWRITE, String.valueOf(overwrite));
+ Template<Model> template = (Template<Model>)
+ Class.forName(templateName).newInstance();
+ generators[i] = template;
+ properties.put(Template.PROP_OVERWRITE, overwrite);
properties.setProperty(Template.PROP_ENCODING, encoding);
- generators[i].setProperties(properties);
+ template.getConfiguration().getProperties().putAll(properties);
} catch (ClassCastException e) {
log("Generator don't inherit Template Class", e, Project.MSG_ERR);
@@ -329,7 +331,7 @@
* @param destDir destination directory
* @param generators generators to apply
* @throws BuildException if can't generate
- * @throws IOException
+ * @throws BuildException if io errors while generation
*/
protected void doExecute(List<File> srcFiles, File destDir,
Template<Model>[] generators) throws BuildException {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -28,12 +28,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.Model;
+import org.nuiton.eugene.writer.WriterReport;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.util.List;
/**
* AbstractGenerator
@@ -76,12 +78,6 @@
return super.getEncoding();
}
- /**
- * Permet de recuperer la proprieté passé en argument
- *
- * @param name le nom de la propriete
- * @return la valeur de la propriété
- */
@Override
public String getProperty(String name) {
if (parent != null) {
@@ -98,6 +94,14 @@
return super.getLastModifiedSource();
}
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ if (parent != null) {
+ return parent.getConfiguration().getProperty(key, type);
+ }
+ return getConfiguration().getProperty(key, type);
+ }
+
/**
* @param file fichier a tester
* @return vrai si le fichier passé en parametre est plus recent que
@@ -131,14 +135,15 @@
return parent.canGeneratePackage(packageName);
}
// if not generation restriction, generate everything
- if (getGeneratedPackages() != null &&
- !getGeneratedPackages().isEmpty()) {
+ List<String> generatedPackages = getGeneratedPackages();
+
+ if (generatedPackages != null && !generatedPackages.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 : getGeneratedPackages()) {
+ for (String generatedPackage : generatedPackages) {
// cas egalité parfaites
if (packageName != null &&
@@ -182,6 +187,12 @@
}
}
+ WriterReport writerReport = getWriterReport();
+
+ if (writerReport != null) {
+ writerReport.addFile(getClass().getName(), outputFile, false);
+ }
+
Writer output = getWriter(outputFile);
try {
if (log.isDebugEnabled()) {
@@ -201,7 +212,7 @@
}
protected Writer getWriter(File outputFile) throws IOException {
-
+
FileOutputStream stream = new FileOutputStream(outputFile);
Writer output;
String encoding = getEncoding();
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -90,7 +90,9 @@
Template<M> generator;
if (getExcludeTemplates().contains(generatorClass.getName())) {
// exclude generator
- log.info("exclude generator " + generatorClass);
+ if (log.isInfoEnabled()) {
+ log.info("exclude generator " + generatorClass);
+ }
continue;
}
try {
@@ -98,12 +100,14 @@
// init template
+ generator.setConfiguration(getConfiguration());
+
if (generator instanceof AbstractGenerator) {
((AbstractGenerator<M>) generator).setParent(this);
}
- if (generator instanceof Transformer) {
- generator.setProperties(properties);
- }
+// if (generator instanceof Transformer) {
+// generator.setProperties(properties);
+// }
// will use it
result.add(generator);
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -24,6 +24,10 @@
*/
package org.nuiton.eugene;
+import org.nuiton.eugene.writer.WriterReport;
+
+import java.util.Properties;
+
/**
* Default template configuration
*
@@ -32,31 +36,124 @@
*/
public class DefaultTemplateConfiguration implements TemplateConfiguration {
- protected boolean overwrite = true;
+ public static final String DEFAULT_ENCONDING = "UTF-8";
- protected boolean verbose;
+ protected Properties properties;
- protected String encoding = "UTF-8";
+ public DefaultTemplateConfiguration() {
+ }
- protected ClassLoader loader = getClass().getClassLoader();
+ public DefaultTemplateConfiguration(Properties properties) {
+ this.properties = new Properties();
+ this.properties.putAll(properties);
+ }
@Override
public boolean isOverwrite() {
- return overwrite;
+ Boolean value = getProperty(PROP_OVERWRITE, Boolean.class);
+ if (value == null) {
+ value = true;
+ setProperty(PROP_OVERWRITE, value);
+ }
+ return value;
}
@Override
public boolean isVerbose() {
- return verbose;
+ Boolean value = getProperty(PROP_VERBOSE, Boolean.class);
+ if (value == null) {
+ value = false;
+ setProperty(PROP_VERBOSE, value);
+ }
+ return value;
}
@Override
public String getEncoding() {
- return encoding;
+ String value = getProperty(PROP_ENCODING, String.class);
+ if (value == null) {
+ value = DEFAULT_ENCONDING;
+ setProperty(PROP_ENCODING, value);
+ }
+ return value;
}
@Override
public ClassLoader getClassLoader() {
- return loader;
+ ClassLoader value = getProperty(PROP_CLASS_LOADER, ClassLoader.class);
+ if (value == null) {
+ value = getClass().getClassLoader();
+ setProperty(PROP_CLASS_LOADER, value);
+ }
+ return value;
}
+
+ @Override
+ public WriterReport getWriterReport() {
+ WriterReport report =
+ getProperty(PROP_WRITER_REPORT, WriterReport.class);
+ return report;
+ }
+
+ @Override
+ public long getLastModifiedSource() {
+ Long value = getProperty(PROP_LAST_MODIFIED_SOURCE, Long.class);
+ if (value == null) {
+ value = 0l;
+ setProperty(PROP_LAST_MODIFIED_SOURCE, value);
+ }
+ return value;
+ }
+
+ @Override
+ public Properties getProperties() {
+ if (properties == null) {
+ properties = new Properties();
+ }
+ return properties;
+ }
+
+ @Override
+ public String getProperty(String key) {
+ return getProperty(key, String.class);
+ }
+
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ Object o = getProperties().get(key);
+ if (o != null && !type.isAssignableFrom(type)) {
+ throw new IllegalArgumentException("property [" + key + "] is not of type " + type.getName() + ", but : " + o.getClass().getName());
+ }
+ return (V) o;
+ }
+
+ @Override
+ public void setProperty(String key, Object value) {
+ getProperties().put(key, value);
+ }
+
+ public void setOverwrite(boolean overwrite) {
+ setProperty(PROP_OVERWRITE, overwrite);
+ }
+
+ public void setVerbose(boolean verbose) {
+ setProperty(PROP_VERBOSE, verbose);
+ }
+
+ public void setEncoding(String encoding) {
+ setProperty(PROP_ENCODING, encoding);
+ }
+
+ public void setLoader(ClassLoader loader) {
+ setProperty(PROP_CLASS_LOADER, loader);
+ }
+
+ public void setLastModifiedSource(long lastModifiedSource) {
+ setProperty(PROP_LAST_MODIFIED_SOURCE, lastModifiedSource);
+ }
+
+ public void setProperties(Properties properties) {
+ this.properties = properties;
+ }
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ModelReader.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -32,8 +32,8 @@
import java.io.File;
/**
- * FileReader TODO real doc :)
- *
+ * ModelReader TODO real doc :)
+ * <p/>
* Created: 26 oct. 2009
*
* @author fdesbois <fdesbois(a)codelutin.com>
@@ -45,30 +45,35 @@
private static final Log log = LogFactory.getLog(ModelReader.class);
/** date de derniere modification de la source la plus recente */
- protected long lastModifiedSource = 0;
+ protected long lastModifiedSource;
protected void setLastModifiedSource(File... files) {
for (File file : files) {
if (file.lastModified() > getLastModifiedSource()) {
lastModifiedSource = file.lastModified();
- log.debug("source date: " + lastModifiedSource
- + " files[i] date: " + file.lastModified() + "(" + file
- + ")");
+
+ if (log.isDebugEnabled()) {
+ log.debug("source date: " + lastModifiedSource
+ + " files[i] date: " + file.lastModified() +
+ "(" + file + ")");
+ }
}
}
}
+ /**
+ * @return the last modified file source (says the newer incoming file)
+ */
public long getLastModifiedSource() {
return lastModifiedSource;
}
- //TODO-TC : il vaut mieux directement un type dit variable
- // example : public abstract M read(File... file) {}
-
-// public M read(File file) {
-// return read(new File[] { file });
-// }
-
+ /**
+ * Read files to produce a memory model.
+ *
+ * @param file files to read
+ * @return the new model builded from files
+ */
public abstract M read(File... file);
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,6 +27,7 @@
import org.apache.commons.lang.StringUtils;
import org.nuiton.eugene.models.Model;
+import org.nuiton.eugene.writer.WriterReport;
import java.io.File;
import java.io.IOException;
@@ -37,32 +38,21 @@
/**
* Generator. TODO javadoc
- *
+ * <p/>
* Created: 5 août 2004
*
- * @param <M> Model associated to the generator (input model)
- *
* @author Cedric Pineau <pineau(a)codelutin.com>
+ * @param <M> Model associated to the generator (input model)
*/
public abstract class Template<M extends Model> implements TemplateConfiguration {
- public static final String PROP_OVERWRITE = "overwrite";
- public static final String PROP_ENCODING = "encoding";
-
- public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
- 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 TemplateConfiguration configuration;
-
- protected Properties properties = new Properties();
protected List<String> excludeTemplates;
- /**
+ /**
* List of package to allow generation.
- *
+ * <p/>
* If {@code null} or empty, generate all packages.
*/
protected List<String> generatedPackages;
@@ -70,17 +60,8 @@
/** Model */
protected M model;
-// /**
-// * Old method from EUGene 1.0.1 used to generate files. Now, you have to
-// * use a Reader instead of directly use a Template.
-// *
-// * @param file list of tiles
-// * @param destDir destination folder
-// * @deprecated since 2.0.0
-// */
-// @Deprecated
-// public abstract void generate(File[] file, File destDir);
+
public abstract void applyTemplate(M model, File destDir) throws IOException;
public TemplateConfiguration getConfiguration() {
@@ -95,7 +76,6 @@
}
/**
- *
* @return {@code true} if must overwrite ouput
* @deprecated since 2.0.2, prefer use the {@link #isOverwrite()} method
*/
@@ -108,8 +88,9 @@
public boolean isOverwrite() {
return getConfiguration().isOverwrite();
}
+
@Override
- public boolean isVerbose() {
+ public boolean isVerbose() {
return getConfiguration().isVerbose();
}
@@ -123,43 +104,51 @@
return getConfiguration().getClassLoader();
}
- /**
- * @param encoding encoding value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_ENCODING} value
- * @see Template#setProperties(Properties)
- */
- @Deprecated
- public void setEncoding(String encoding) {
- //this.encoding = encoding;
- properties.setProperty(PROP_ENCODING, encoding);
+ @Override
+ public long getLastModifiedSource() {
+ return getConfiguration().getLastModifiedSource();
}
- public void setProperties(Properties p) {
- properties = p;
+ @Override
+ public Properties getProperties() {
+ return getConfiguration().getProperties();
}
+ @Override
+ public <V> V getProperty(String key, Class<V> type) {
+ return getConfiguration().getProperty(key, type);
+ }
+
+ public String getProperty(String key) {
+ return getConfiguration().getProperty(key);
+ }
+
+ @Override
+ public WriterReport getWriterReport() {
+ return getConfiguration().getWriterReport();
+ }
+
+ @Override
+ public void setProperty(String key, Object value) {
+ getConfiguration().setProperty(key, value);
+ if (PROP_GENERATED_PACKAGES.equals(key)) {
+ // reset cache value
+ generatedPackages = null;
+ } else if (PROP_EXCLUDE_TEMPLATES.equals(key)) {
+ // reset cache value
+ excludeTemplates = null;
+ }
+ }
+
/**
- * Permet de recuperer la proprieté passé en argument
+ * Set the properties configuration.
*
- * @param name le nom de la propriete
- * @return la valeur de la propriété
+ * @param p the configuration
+ * @deprecated since 2.0.2, prefer use the {@link TemplateConfiguration} api.
*/
- public String getProperty(String name) {
- return properties.getProperty(name);
- }
-
- /**
- * Set list of package to allow generation.
- *
- * 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;
+ public void setProperties(Properties p) {
+ getConfiguration().getProperties().putAll(p);
}
protected List<String> getGeneratedPackages() {
@@ -170,27 +159,10 @@
//TC-20091125 avoid manual array copy
generatedPackages.addAll(Arrays.asList(genPackages.split(",")));
}
- }
+ }
return generatedPackages;
}
- /**
- * @param lastModifiedSource lastModifiedSource value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_LAST_MODIFIED_SOURCE} value
- * @see Template#setProperties(Properties)
- */
- @Deprecated
- public void setLastModifiedSource(long lastModifiedSource) {
- properties.setProperty(PROP_LAST_MODIFIED_SOURCE,
- String.valueOf(lastModifiedSource));
- }
-
- public long getLastModifiedSource() {
- return Long.parseLong(
- properties.getProperty(PROP_LAST_MODIFIED_SOURCE, "0"));
- }
-
public List<String> getExcludeTemplates() {
if (excludeTemplates == null) {
excludeTemplates = new ArrayList<String>();
@@ -203,11 +175,6 @@
return excludeTemplates;
}
- @Deprecated
- public void setExcludeTemplates(List<String> excludeTemplates) {
- this.excludeTemplates = excludeTemplates;
- }
-
public M getModel() {
return model;
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -24,6 +24,10 @@
*/
package org.nuiton.eugene;
+import org.nuiton.eugene.writer.WriterReport;
+
+import java.util.Properties;
+
/**
* Contract of a {@link Template} configuration
*
@@ -32,6 +36,24 @@
*/
public interface TemplateConfiguration {
+ String PROP_OVERWRITE = "overwrite";
+
+ String PROP_VERBOSE = "verbose";
+
+ String PROP_ENCODING = "encoding";
+
+ String PROP_CLASS_LOADER = "classLoader";
+
+ String PROP_DEFAULT_PACKAGE = "defaultPackage";
+
+ String PROP_LAST_MODIFIED_SOURCE = "lastModifiedSource";
+
+ String PROP_GENERATED_PACKAGES = "generatedPackages";
+
+ String PROP_EXCLUDE_TEMPLATES = "excludeTemplates";
+
+ String PROP_WRITER_REPORT = "writerReport";
+
/**
* @return {@code true} if must regenerate files even if they are up to
* date
@@ -47,4 +69,17 @@
/** @return the classloader to use to seek for resources */
ClassLoader getClassLoader();
+ WriterReport getWriterReport();
+
+ long getLastModifiedSource();
+
+ Properties getProperties();
+
+ String getProperty(String key);
+
+ <V> V getProperty(String key, Class<V> type);
+
+ void setProperty(String key, Object value);
+
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -82,7 +82,20 @@
this.model = model;
previousTransformer = initPreviousTransformer();
outputTemplate = initOutputTemplate();
- outputTemplate.setProperties(getOutputProperties());
+
+ // build output template configuration
+ // merge input configuration + output properties
+ Properties properties = getConfiguration().getProperties();
+ properties.putAll(getOutputProperties());
+
+ TemplateConfiguration outconfig =
+ new DefaultTemplateConfiguration(properties);
+
+ // push back to outputPropertie the all configuration
+ //FIXME tchemit 20100516 Should rethink this...
+ outputProperties = properties;
+
+ outputTemplate.setConfiguration(outconfig);
outputModel = initOutputModel();
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -102,8 +102,8 @@
public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug("Will generate class "+ input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate class "+ input.getQualifiedName());
}
preparePrefix(input);
@@ -170,8 +170,8 @@
public void generateFromInterface(Writer output,
ObjectModelInterface input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug(input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate interface "+ input.getQualifiedName());
}
preparePrefix(input);
@@ -238,8 +238,8 @@
@Override
public void generateFromEnum(Writer output, ObjectModelEnumeration input)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug(input.getQualifiedName());
+ if (isVerbose()) {
+ log.info("Will generate enumeration "+ input.getQualifiedName());
}
preparePrefix(input);
generateHeader(output, input); // Imports, package et documentation
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -187,13 +187,13 @@
File outputFile = getDestinationFile(destDir, filename);
if (!isOverwrite() && isNewerThanSource(outputFile)) {
- if (log.isTraceEnabled()) {
- log.trace("file " + outputFile + " is up-to-date");
+ if (isVerbose()) {
+ log.info("Will not generate " + outputFile + " (up-to-date).");
}
return;
}
- if (!outputFile.exists() && log.isTraceEnabled()) {
- log.trace("not up-to-date " + outputFile.lastModified()
+ if (!outputFile.exists() && log.isDebugEnabled()) {
+ log.debug("not up-to-date " + outputFile.lastModified()
+ " <" + outputFile + ">");
}
try {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelReader.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -30,6 +30,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.regex.Matcher;
@@ -38,10 +39,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.ModelReader;
-import org.nuiton.eugene.models.object.ObjectModel;
-import org.nuiton.eugene.models.object.ObjectModelClass;
-import org.nuiton.eugene.models.object.ObjectModelClassifier;
-import org.nuiton.eugene.models.object.ObjectModelElement;
import org.nuiton.eugene.models.object.xml.DigesterObjectModelRuleSet;
import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
@@ -65,7 +62,17 @@
public class ObjectModelReader extends ModelReader<ObjectModel> {
private static final Log log = LogFactory.getLog(ObjectModelReader.class);
-
+
+ public static final String TAGVALUE = "tagvalue";
+
+ public static final String STEREOTYPE = "stereotype";
+
+ public static final String OPERATION = "operation";
+
+ public static final String ATTRIBUTE = "attribute";
+
+ public static final String CLASS = "class";
+
/**
* L'expression réguliere match les chaines de type
* <package.ClassName>.<class|attribute|operation>.[name].<stereotype|tagvalue>.[tag]
@@ -79,6 +86,7 @@
protected Pattern propertiesPattern = Pattern
.compile("((?:[_a-zA-Z0-9]+\\.)+(?:_?[A-Z][_a-zA-Z0-9]*\\.)+)(?:(class|attribute|operation)\\.)(?:([_a-z0-9][_a-zA-Z0-9]*)\\.)?(?:(stereotype|tagvalue)\\.?)([_a-z0-9][_a-zA-Z0-9]*)?");
+ public static final String MODEL = "model";
/**
* @param files les noms des fichiers existant contenant du XML représentant
@@ -89,6 +97,11 @@
@Override
public ObjectModel read(File... files) {
setLastModifiedSource(files);
+ if (log.isDebugEnabled()) {
+ log.debug("LastModifiedSource = " + getLastModifiedSource() +
+ " for files " + Arrays.toString(files));
+ }
+
ObjectModel objectModel = new ObjectModelImpl();
// Digester parser configuration
@@ -122,7 +135,12 @@
+ " associé au model");
}
try {
- prop.load(new FileInputStream(propFile));
+ FileInputStream inStream = new FileInputStream(propFile);
+ try {
+ prop.load(inStream);
+ } finally {
+ inStream.close();
+ }
} catch (IOException eee) {
log.warn("Impossible de lire le fichier de propriete "
+ propFile, eee);
@@ -133,9 +151,11 @@
String key = (String) e.nextElement();
String value = prop.getProperty(key);
- if (key.startsWith("model")) {
+ if (key.startsWith(MODEL)) {
if (!key.startsWith("model.tagvalue.")) {
- log.warn("only tagvalue is allowed on model in properties");
+ if (log.isWarnEnabled()) {
+ log.warn("only tagvalue is allowed on model in properties");
+ }
} else {
String tag = key.substring("model.tagvalue."
.length());
@@ -175,22 +195,27 @@
ObjectModelClassifier omc = objectModel
.getClassifier(fqn);
+ if (omc == null) {
+ log.warn("Could not find classifier for " + fqn+" from tag value " + key);
+ continue;
+ }
+
if (omc instanceof ObjectModelClassifierImpl) {
// on utilise une liste car il peut y avoir plusieur
// operation avec le nom donné
List<ObjectModelElement> elems = new ArrayList<ObjectModelElement>();
- if ("class".equals(target)) {
+ if (CLASS.equals(target)) {
elems.add(omc);
- } else if ("attribute".equals(target)) {
+ } else if (ATTRIBUTE.equals(target)) {
ObjectModelClass classmodel = (ObjectModelClass) omc;
elems.add(classmodel
.getAttribute(targetName));
- } else if ("operation".equals(target)) {
+ } else if (OPERATION.equals(target)) {
elems.addAll(omc.getOperations(targetName));
}
for (Object elem1 : elems) {
ObjectModelElementImpl elem = (ObjectModelElementImpl) elem1;
- if ("stereotype".equals(type)) {
+ if (STEREOTYPE.equals(type)) {
// pour les stereotypes
ObjectModelImplRef stereotype = new ObjectModelImplRef();
stereotype.setName(value);
@@ -198,7 +223,7 @@
continue;
}
- if ("tagvalue".equals(type)) {
+ if (TAGVALUE.equals(type)) {
// pour les tagvalues
ObjectModelImplTagValue tagvalue = new ObjectModelImplTagValue();
tagvalue.setName(tag);
@@ -221,7 +246,7 @@
// TODO il faudra avoir des methodes d'acces en
// Set sur l'interface pour eviter ce message
if (log.isWarnEnabled()) {
- 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 : " + omc.getQualifiedName());
}
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/AbstractChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,10 +27,18 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.StringUtil;
import java.io.File;
import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
/**
* Abstract implementation of the {@link ChainedFileWriter}.
@@ -39,25 +47,33 @@
* @since 2.0.0
*/
public abstract class AbstractChainedFileWriter implements ChainedFileWriter {
+
/** Logger */
private static final Log log =
LogFactory.getLog(AbstractChainedFileWriter.class);
+
/** entries to treate with this writer */
protected List<ChainedFileWriterEntry> entries;
+
/** previous writer (can be null) */
protected ChainedFileWriter previousWriter;
+
/** next writer (can be null) */
protected ChainedFileWriter nextWriter;
+
/**
* universe of authorized properties (keys are property names, values are
* property descriptions).
*/
protected final Map<String, String> authorizedPropertyDescriptions;
+
/**
* real properties obtained fro a configuration in {@link
* #initWriter(ChainedFileWriterConfiguration)} method
*/
protected Map<String, Object> properties;
+
+ private WriterReport writerReport;
protected AbstractChainedFileWriter(String... propertyNameAndDescriptions) {
if (propertyNameAndDescriptions.length % 2 != 0) {
@@ -126,10 +142,9 @@
@Override
public void generate(ChainedFileWriterConfiguration configuration)
throws IOException {
- if (log.isDebugEnabled()) {
- log.debug("[" + getInputProtocol() +
- "] Start generate with writer " + this);
- }
+
+ long t0 = System.nanoTime();
+
initWriter(configuration);
try {
@@ -150,23 +165,53 @@
}
}
- for (ChainedFileWriterEntry e : entries) {
- if (log.isDebugEnabled()) {
- log.debug("[" + getInputProtocol() +
- "] Will generate entry " + e.getInputDirectory()
- + " : " + e.getIncludePattern());
- }
- generate(configuration,
- outputDir,
- e.getInputDirectory(),
- e.getIncludePattern()
- );
- }
+ Map<File, List<String>> mergeEntries = mergeEntries(entries);
+
+ generateEntries(configuration, outputDir, mergeEntries);
+
} finally {
clear();
}
}
+ protected Map<File, List<String>> mergeEntries(List<ChainedFileWriterEntry> entries) {
+ // merge entries if required
+ Map<File, List<String>> merge = new HashMap<File, List<String>>();
+ for (ChainedFileWriterEntry e : entries) {
+ File input = e.getInputDirectory();
+ List<String> includes = merge.get(input);
+ if (includes == null) {
+ includes = new ArrayList<String>();
+ merge.put(input, includes);
+ }
+ includes.add(e.getIncludePattern());
+ }
+ return merge;
+ }
+
+ protected void generateEntries(ChainedFileWriterConfiguration configuration,
+ File outputDir,
+ Map<File, List<String>> entries) throws IOException {
+
+ // apply from merge entries
+ for (Map.Entry<File, List<String>> e : entries.entrySet()) {
+ File input = e.getKey();
+ List<String> includes = e.getValue();
+ String includePattern = StringUtil.join(includes, ",", true);
+ if (log.isDebugEnabled()) {
+ log.debug("[" + getInputProtocol() +
+ "] Will generate entry " + input
+ + " : " + includePattern);
+ }
+ generate(configuration,
+ outputDir,
+ input,
+ includePattern
+ );
+ }
+ }
+
+
@Override
public String getInputProtocol(String modelType) {
// input protocol is the same for all model
@@ -215,4 +260,14 @@
}
}
}
+
+ @Override
+ public void setWriterReport(WriterReport writerReport) {
+ this.writerReport = writerReport;
+ }
+
+ @Override
+ public WriterReport getWriterReport() {
+ return writerReport;
+ }
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -159,4 +159,11 @@
/** @return the list of all entries registered */
List<ChainedFileWriterEntry> getEntries();
+
+
+ /** @return the writer report (to save generated file to later report) */
+ WriterReport getWriterReport();
+
+ void setWriterReport(WriterReport writerReport);
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,7 +27,6 @@
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.TemplateConfiguration;
import java.io.File;
import java.util.Map;
@@ -39,7 +38,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.0.0
*/
-public interface ChainedFileWriterConfiguration extends TemplateConfiguration{
+public interface ChainedFileWriterConfiguration {
/** @return the type of model used */
String getModelType();
Added: trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -0,0 +1,66 @@
+/*
+ * #%L
+ * EUGene :: EUGene
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2004 - 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>.
+ * #L%
+ */
+package org.nuiton.eugene.writer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * A class to save generated files in {@link ChainedFileWriter}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public class WriterReport {
+
+ protected Map<String, List<File>> datas;
+
+ public Map<String, List<File>> getDatas() {
+ if (datas == null) {
+ datas = new TreeMap<String, List<File>>();
+ }
+ return datas;
+ }
+
+ public void addFile(String entry, File file, boolean verbose) {
+ List<File> files = getDatas().get(entry);
+ if (files == null) {
+ files = new ArrayList<File>();
+ getDatas().put(entry, files);
+ }
+ files.add(file);
+ }
+
+ public int getFilesCount() {
+ int tot = 0;
+ for (List<File> files : getDatas().values()) {
+ tot += files.size();
+ }
+ return tot;
+ }
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/writer/WriterReport.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/GeneratorUtilTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -27,7 +27,6 @@
package org.nuiton.eugene;
import java.util.Set;
-import org.apache.commons.lang.time.DurationFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
@@ -127,7 +126,7 @@
*/
@Test
public void testGetSimpleName() {
- System.out.println("getSimpleName");
+ log.info("getSimpleName");
String str = "List";
String expResult = "List";
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,6 +31,7 @@
import junit.framework.Assert;
import org.junit.Test;
+import org.nuiton.eugene.Template;
import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
@@ -53,15 +54,17 @@
Assert.assertTrue(generator.canGenerateElement(new ObjectModelElementImpl()));
Assert.assertTrue(generator.canGenerateElement(new ObjectModelClassImpl()));
- List<String> generatedPackages = new ArrayList<String>();
- generatedPackages.add("org.nuiton.eugene");
+// List<String> generatedPackages = new ArrayList<String>();
+// generatedPackages.add("org.nuiton.eugene");
- generator.setGeneratedPackages(generatedPackages);
-
+ generator.setProperty(Template.PROP_GENERATED_PACKAGES , "org.nuiton.eugene");
+// generator.setGeneratedPackages(generatedPackages);
+
// Still true
Assert.assertTrue(generator.canGenerateElement(new ObjectModelElementImpl()));
// become false
- Assert.assertFalse(generator.canGenerateElement(new ObjectModelClassImpl()));
+ boolean b = generator.canGenerateElement(new ObjectModelClassImpl());
+ Assert.assertFalse(b);
ObjectModelClassImpl testClass = new ObjectModelClassImpl();
testClass.setPackage("org.nuiton.eugene");
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -115,13 +115,10 @@
* Apply XSL stylesheet on a topcased model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLIsis() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLIsis() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/isis-fish.xmi")
.toURI());
@@ -139,13 +136,10 @@
* Apply XSL stylesheet on a topcased model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLTopia() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLTopia() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/topiatest.xmi")
.toURI());
@@ -183,13 +177,10 @@
* Apply XSL stylesheet on an Argouml model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLDependency() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLDependency() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/dependency.xmi")
.toURI());
@@ -217,13 +208,10 @@
* Apply XSL stylesheet on an Argouml model.
* And make test on it.
*
- * @throws URISyntaxException
- * @throws IOException
- * @throws TransformerException
+ * @throws Exception
*/
@Test
- public void testXSLEnumeration() throws URISyntaxException, IOException,
- TransformerException {
+ public void testXSLEnumeration() throws Exception {
File xmiFile = new File(Resource.getURL("xmi/1.2/enumeration.xmi")
.toURI());
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,6 +31,7 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
import org.nuiton.eugene.models.Model;
@@ -311,7 +312,8 @@
Template<M> template = (Template<M>) Class.forName(templateName,
true, fixedClassLoader).newInstance();
// configuration
- template.setProperties(templateProperties);
+ template.setConfiguration(new DefaultTemplateConfiguration(templateProperties));
+// template.setProperties(templateProperties);
templatesList.add(template);
} catch (InstantiationException e) {
throw new MojoFailureException("Can't instantiate generator : "
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -31,9 +31,9 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter;
import org.nuiton.eugene.plugin.writer.ModelChainedFileWriter;
@@ -42,13 +42,21 @@
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
import org.nuiton.eugene.writer.ChainedFileWriterEntry;
import org.nuiton.eugene.writer.ChainedWriterEngine;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.AbstractPlugin;
+import org.nuiton.util.StringUtil;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Smart file generator.
@@ -92,10 +100,10 @@
* <input>zargo:src/main/xmi:**\/*.zargo2</input>
* </inputs>
* </pre>
- *
+ * <p/>
* <b>Note:</b> If your using a single input, you can just write :
* <pre>
- * <inputs>zargo</inputs>
+ * <inputs>zargo</inputs>
* </pre>
*
* @parameter expression="${eugene.inputs}"
@@ -103,6 +111,7 @@
* @since 2.0.0
*/
protected String[] inputs;
+
/**
* List of input (protocol) not to treate separated by comma.
* <p/>
@@ -116,6 +125,7 @@
* @since 2.0.0
*/
protected String skipInputs;
+
/**
* Where to generate files.
*
@@ -124,6 +134,7 @@
* @since 2.0.0
*/
protected File outputDirectory;
+
/**
* Ecrase les fichiers générés.
*
@@ -131,6 +142,7 @@
* @since 2.0.0
*/
protected boolean overwrite;
+
/**
* Pour activer le mode verbeux.
*
@@ -138,6 +150,7 @@
* @since 2.0.0
*/
protected boolean verbose;
+
/**
* Encoding to be used for generation of files.
*
@@ -145,6 +158,7 @@
* @since 2.0.0
*/
protected String encoding;
+
/**
* A flag to mark the mojo to be used in a test phase. This will permits
* to add generated sources in test compile roots.
@@ -153,6 +167,7 @@
* @since 2.0.0
*/
protected boolean testPhase;
+
/**
* The type of model to be used.
* <p/>
@@ -163,6 +178,7 @@
* @since 2.0.0
*/
protected String modelType;
+
/**
* Properties to pass to writer.
*
@@ -170,6 +186,7 @@
* @since 2.0.0
*/
protected Map<String, Object> properties;
+
/**
* Ne génère rien, analyse juste la configuration.
*
@@ -177,6 +194,7 @@
* @since 2.0.0
*/
protected boolean dryRun;
+
/**
* Nom du paquetage pour les fichiers générés (xmi input sepcific).
*
@@ -184,6 +202,7 @@
* @since 2.0.0
*/
protected String fullPackagePath;
+
/**
* Nom du resolver a utiliser pour les transformations xmi vers model
* (xmi input sepcific).
@@ -192,14 +211,16 @@
* @since 2.0.0
*/
protected String resolver;
+
/**
* Templates à utiliser, séparés par des virgules pour les transformations
- * depuis les models (model input sepcific).
+ * depuis les models (model input sepcific).
*
* @parameter expression="${eugene.templates}"
* @since 0.50
*/
protected String templates;
+
/**
* Templates à ne pas utiliser lors de la transformations des models
* (model input sepcific).
@@ -208,6 +229,7 @@
* @since 0.63
*/
protected String[] excludeTemplates;
+
/**
* Nom par défaut du paquetage généré (model input sepcific).
*
@@ -215,6 +237,7 @@
* @since 0.50
*/
protected String defaultPackage;
+
/**
* List of packages to generate (comma separated). (model input sepcific).
* <p/>
@@ -224,6 +247,7 @@
* @since 1.0.0-rc-8
*/
protected String generatedPackages;
+
/**
* Maven project.
*
@@ -232,6 +256,7 @@
* @since 2.0.0
*/
protected MavenProject project;
+
/**
* Le settings (pour obtenir le mode offline).
*
@@ -248,40 +273,49 @@
* @component role="org.nuiton.eugene.models.Model"
*/
protected Map<String, Model> _models;
+
/**
* All available writers introspects via plexus
*
* @component role="org.nuiton.eugene.writer.ChainedFileWriter"
*/
protected Map<String, ChainedFileWriter> writers;
+
/**
* All available writers introspects via plexus
*
* @component role="org.nuiton.eugene.ModelReader"
*/
protected Map<String, ModelReader<?>> modelReaders;
+
/**
* All available templates introspects via plexus
*
* @component role="org.nuiton.eugene.Template"
*/
protected Map<String, Template<?>> modelTemplates;
+
/**
* The engine to compute {@link ChainedFileWriter} from inputs entries.
*
* @component role="org.nuiton.eugene.writer.ChainedWriterEngine"
*/
protected ChainedWriterEngine engine;
- /**
- * fixed classloader
- */
+
+ /** fixed classloader */
protected ClassLoader fixedClassLoader;
+ private WriterReport writerReport;
+
@Override
protected void init() throws Exception {
+ if (getLog().isDebugEnabled()) {
+ verbose = true;
+ }
+
modelType = modelType.trim().toLowerCase();
-
+
// Check model type is accepted
// pouvoir associé un nom à un type de service).
Model model = _models.get(modelType);
@@ -313,12 +347,26 @@
// add log support
((BaseChainedFileWriter) writer).setLog(getLog());
}
+ writer.setWriterReport(new WriterReport() {
+ @Override
+ public void addFile(String entry, File file, boolean b) {
+ super.addFile(entry, file, b);
+ if (b || isVerbose()) {
+ getLog().info(String.format("[%1$s] Will generate %2$s", entry, file));
+ }
+ if (getLog().isDebugEnabled()) {
+ getLog().debug(String.format("[%1$s] Will generate %2$s", entry, file));
+ }
+ }
+ });
}
// detect top level writers
for (String include : inputs) {
- getLog().info("Register include : " + include);
+ if (isVerbose()) {
+ getLog().info("Register include : " + include);
+ }
engine.registerInclude(include);
}
@@ -351,6 +399,15 @@
properties.put(ModelChainedFileWriter.PROP_TEMPLATES, templates);
properties.put(ModelChainedFileWriter.PROP_EXCLUDE_TEMPLATES,
getExcludeTemplatesAsString());
+
+ DefaultTemplateConfiguration configuration =
+ new DefaultTemplateConfiguration();
+ configuration.setEncoding(getEncoding());
+ configuration.setLoader(getClassLoader());
+ configuration.setOverwrite(isOverwrite());
+ configuration.setVerbose(isVerbose());
+ properties.put(ModelChainedFileWriter.PROP_TEMPLATE_CONFIGURATION,
+ configuration);
}
}
@@ -392,6 +449,7 @@
"] as required in skipInputs configuration.");
continue;
}
+ long t0 = System.nanoTime();
int size = writer.getEntries().size();
if (size == 1) {
getLog().info(
@@ -416,6 +474,8 @@
}
writer.generate(this);
+ String message = reportGeneratedFiles(writer, t0);
+ getLog().info(message);
if ("model".equals(writer.getInputProtocol())) {
@@ -435,9 +495,25 @@
}
}
+
+ public String reportGeneratedFiles(ChainedFileWriter writer, long t0) {
+ WriterReport writerReport = writer.getWriterReport();
+ int nbFiles = writerReport.getFilesCount();
+
+ if (nbFiles == 0) {
+ return "No file generated.";
+ }
+
+ long delay = System.nanoTime() - t0;
+ if (nbFiles == 1) {
+ return "Generate one file in " + StringUtil.convertTime(delay) + ".";
+ }
+ return "Generate " + nbFiles + " files in " + StringUtil.convertTime(delay) + ".";
+ }
+
/**
* Add a single input to the {@link #inputs} property.
- *
+ * <p/>
* <b>Note:</b> This is a convinient way to allow in pom to write
* <pre>
* <inputs>zargo</inputs>
@@ -576,10 +652,10 @@
if (testPhase) {
File extraClassPathDirectory = new File(
getProject().getBuild().getOutputDirectory());
-// if (verbose) {
- getLog().info("Add in generator's classLoader : " +
- extraClassPathDirectory);
-// }
+ if (verbose) {
+ getLog().info("Add in generator's classLoader : " +
+ extraClassPathDirectory);
+ }
addDirectoryToUrlsList(
extraClassPathDirectory,
urls,
@@ -600,7 +676,6 @@
);
}
-
if (project.getProjectReferences() != null) {
// this case is for multi-module when calling from a
// parent module
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -44,9 +44,7 @@
*/
public abstract class BaseChainedFileWriter extends AbstractChainedFileWriter {
- /**
- * Logger
- */
+ /** Logger */
private Log log;
protected BaseChainedFileWriter(String... propertyNameAndDescriptions) {
@@ -69,8 +67,13 @@
protected void initWriter(ChainedFileWriterConfiguration configuration) {
super.initWriter(configuration);
+ if (!configuration.isVerbose()) {
+
+ // nothing else to do
+ return;
+ }
+
// log writer config
-
StringBuilder buffer = new StringBuilder();
Set<Map.Entry<String, String>> set =
getAuthorizedPropertyDescriptions().entrySet();
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -26,8 +26,10 @@
package org.nuiton.eugene.plugin.writer;
import org.apache.commons.lang.StringUtils;
+import org.nuiton.eugene.DefaultTemplateConfiguration;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
import org.nuiton.plugin.PluginHelper;
@@ -63,6 +65,8 @@
public static final String PROP_READER = "reader";
+ public static final String PROP_TEMPLATE_CONFIGURATION = "templateConfiguration";
+
public ModelChainedFileWriter() {
super(
PROP_TEMPLATES, "templates",
@@ -71,7 +75,8 @@
PROP_READER, "reader",
PROP_MODEL_READER, "modelReader",
PROP_GENERATED_PACKAGES, "generatedPackages",
- PROP_DEFAULT_PACKAGE, "defaultPackage"
+ PROP_DEFAULT_PACKAGE, "defaultPackage",
+ PROP_TEMPLATE_CONFIGURATION, "templateConfiguration"
);
}
@@ -144,6 +149,10 @@
return getProperty(PROP_TEMPLATES, String.class);
}
+ public TemplateConfiguration getTemplateConfiguration() {
+ return getProperty(PROP_TEMPLATE_CONFIGURATION, TemplateConfiguration.class);
+ }
+
protected ModelReader<?> getModelReader() {
return getProperty(PROP_MODEL_READER, ModelReader.class);
}
@@ -189,24 +198,27 @@
}
}
+ boolean verbose = configuration.isVerbose();
+
Properties templateProperties = new Properties();
- templateProperties.setProperty(Template.PROP_DEFAULT_PACKAGE,
- getDefaultPackage());
- templateProperties.setProperty(
- Template.PROP_OVERWRITE,
- String.valueOf(configuration.isOverwrite()));
- templateProperties.setProperty(Template.PROP_ENCODING,
- configuration.getEncoding());
- templateProperties.setProperty(
- Template.PROP_LAST_MODIFIED_SOURCE,
- String.valueOf(getModelReader().getLastModifiedSource()));
+
+ templateProperties.put(Template.PROP_DEFAULT_PACKAGE, getDefaultPackage());
+ templateProperties.put(Template.PROP_ENCODING, configuration.getEncoding());
+ templateProperties.put(Template.PROP_VERBOSE, verbose);
+ templateProperties.put(Template.PROP_OVERWRITE, configuration.isOverwrite());
+ templateProperties.put(Template.PROP_CLASS_LOADER, configuration.getClassLoader());
+
String generatedPackages = getGeneratedPackages();
if (StringUtils.isEmpty(generatedPackages)) {
- getLog().info(" generating all packages");
+ if (verbose) {
+ getLog().info("generating all packages");
+ }
} else {
templateProperties.put(Template.PROP_GENERATED_PACKAGES,
generatedPackages);
- getLog().info(" generating only for packages " + generatedPackages);
+ if (verbose) {
+ getLog().info("generating only for packages " + generatedPackages);
+ }
}
// init templates
@@ -230,7 +242,9 @@
"Can't obtain template [" + templateName +
"] for reason " + e.getMessage(), e);
}
- } else {
+ }
+
+ if (verbose) {
getLog().info("will use the template [" + templateName + "]");
}
@@ -238,7 +252,8 @@
templatesList.add(template);
// set the properties of the template
- template.setProperties(templateProperties);
+ template.setConfiguration(
+ new DefaultTemplateConfiguration(templateProperties));
}
properties.put(PROP_TEMPLATES_LIST, templatesList);
@@ -260,13 +275,15 @@
List<File> modelFiles = new ArrayList<File>();
String[] includePatterns = includePattern.split(",");
- getLog().info("Generating from " + inputDirectory + " : " +
- includePattern);
+ if (configuration.isVerbose()) {
+ getLog().info("Generating from " + inputDirectory + " : " +
+ includePattern);
+ }
if (configuration.isVerbose()) {
- getLog().info("Will use classLoader "+configuration.getClassLoader());
+ getLog().info("Will use classLoader " + configuration.getClassLoader());
}
-
+
for (File srcDirGen : ioContext.getInputs()) {
if (configuration.isVerbose()) {
@@ -275,28 +292,46 @@
}
List<File> currentFiles = PluginHelper.getIncludedFiles(
srcDirGen, includePatterns, null);
+ if (currentFiles.size() == 1) {
+ getLog().info("Using one model :");
+ } else {
+ getLog().info("Using " + currentFiles.size() + " models :");
+ }
+ for (File currentFile : currentFiles) {
+ getLog().info(" " + currentFile.getAbsolutePath());
+ }
modelFiles.addAll(currentFiles);
}
// read the model
- Model model = getModelReader().read(modelFiles.toArray(
- new File[modelFiles.size()]));
+ File[] filesToRead = modelFiles.toArray(new File[modelFiles.size()]);
+ Model model = getModelReader().read(filesToRead);
+
+ // get the last modified source timestamp from reader
+ long lastModifiedSource = getModelReader().getLastModifiedSource();
+
// apply all templates to the model
for (Template<Model> template : getTemplatesList()) {
- getLog().info("Apply " + template.getClass().getSimpleName() +
- " generator");
+ getLog().info("Apply generator " + template.getClass().getSimpleName());
- template.setConfiguration(configuration);
-
+ // set the lastModified source property
+ template.setProperty(Template.PROP_LAST_MODIFIED_SOURCE, lastModifiedSource);
+
+ template.setProperty(Template.PROP_WRITER_REPORT, getWriterReport());
+
+ if (configuration.isVerbose()) {
+ getLog().info(" overwrite = " + template.isOverwrite());
+ getLog ().info(" encoding = " + template.getEncoding());
+ getLog().info(" lastModifiedSource = " + template.getLastModifiedSource());
+ }
+
// apply template
template.applyTemplate(model, ioContext.getOutput());
-
}
-
}
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -28,6 +28,7 @@
import org.nuiton.eugene.models.object.ObjectModel;
import org.nuiton.eugene.models.state.StateModel;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.PluginHelper;
import org.nuiton.plugin.PluginIOContext;
import org.nuiton.util.FasterCachedResourceResolver;
@@ -58,8 +59,8 @@
* vers du model).
*
* @author tchemit
+ * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="xmi"
* @since 2.0.0
- * @plexus.component role="org.nuiton.eugene.writer.ChainedFileWriter" role-hint="xmi"
*/
public class XmiChainedFileWriter extends BaseChainedFileWriter {
@@ -144,50 +145,44 @@
File outputDir,
File inputDirectory,
String includePattern) throws IOException {
- long t0 = System.nanoTime();
- boolean overwrite = configuration.isOverwrite();
- try {
- getLog().info("Processing XSL tranformation on " +
- inputDirectory + " for " + includePattern);
+ getLog().info("Processing XSL tranformation on " +
+ inputDirectory + " for " + includePattern);
+ if (configuration.isVerbose()) {
getLog().info(" with fullPackagePath : " + getFullPackagePath());
getLog().info(" with resolver : " + getResolver());
+ }
+ // recuperation des fichiers a traiter
+ List<File> files = PluginHelper.getIncludedFiles(
+ inputDirectory, new String[]{includePattern}, null);
- // recuperation des fichiers a traiter
- List<File> files = PluginHelper.getIncludedFiles(
- inputDirectory, new String[]{includePattern}, null);
+ // lancement des traitements xsl sur les fichiers trouvés
+ // dans le repertoire
+ actionXsl(configuration,
+ outputDir,
+ inputDirectory,
+ files
+ );
- // lancement des traitements xsl sur les fichiers trouvés
- // dans le repertoire
- actionXsl(configuration,
- outputDir,
- inputDirectory,
- files,
- overwrite
- );
- } finally {
- getLog().info("xsl done in " +
- PluginHelper.convertTime(System.nanoTime() - t0));
+ if (configuration.isVerbose()) {
+ getLog().info("Copy resources files.");
}
- getLog().info("Copy resources files");
-
PluginIOContext ioContext = new PluginIOContext();
ioContext.setInput(inputDirectory);
ioContext.setOutput(outputDir);
PluginHelper.copyFiles(ioContext,
null,
new String[]{includePattern},
- overwrite
+ configuration.isOverwrite()
);
}
protected void actionXsl(ChainedFileWriterConfiguration configuration,
- File outputDir,
- File dir,
- List<File> files,
- boolean overwrite) throws IOException {
+ File outputDir,
+ File dir,
+ List<File> files) throws IOException {
for (File file : files) {
try {
@@ -212,21 +207,26 @@
File dstDir = outputDir;
if (!relatifPath.isEmpty()) {
dstDir = new File(dstDir, relatifPath);
- if (!dstDir.exists()) {
- boolean b = dstDir.mkdirs();
- if (!b) {
- throw new IOException(
- "could not create directory " + dstDir);
- }
- }
+ PluginHelper.createDirectoryIfNecessary(dstDir);
}
File result = new File(dstDir, filename);
- if (!overwrite && file.lastModified() < result.lastModified()) {
- getLog().info("file up-to-date : " + result);
+ if (!configuration.isOverwrite() && file.lastModified() < result.lastModified()) {
+
+ if (configuration.isVerbose()) {
+ getLog().info("Will not generate " + result +
+ " (up-to-date).");
+ }
continue;
}
- if (getLog().isDebugEnabled()) {
- getLog().debug("generate " + result);
+
+ WriterReport writerReport = getWriterReport();
+ if (writerReport != null) {
+
+ writerReport.addFile(
+ getClass().getName(),
+ result,
+ true
+ );
}
// Create the xsl transformer and set parameters
@@ -238,11 +238,18 @@
);
transformer.setURIResolver(fileResolver);
- transformer.transform(
- new StreamSource(file),
- new StreamResult(new FileOutputStream(result))
- );
+ FileOutputStream output = new FileOutputStream(result);
+ try {
+ transformer.transform(
+ new StreamSource(file),
+ new StreamResult(output)
+ );
+ } finally {
+ output.close();
+ }
+ } catch (IOException e) {
+ throw e;
} catch (Exception e) {
throw new IOException(e.getMessage(), e);
}
@@ -284,7 +291,9 @@
((ResourceResolver) result).setCl(loader);
if (result instanceof FasterCachedResourceResolver) {
boolean offline = configuration.isOffline();
- getLog().debug("using offline mode ? : " + offline);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("using offline mode ? : " + offline);
+ }
((FasterCachedResourceResolver) result).setOffline(offline);
}
}
@@ -348,9 +357,7 @@
return version;
}
- /**
- * Sax handler to find xmi version into xmi document.
- */
+ /** Sax handler to find xmi version into xmi document. */
protected class XmiVersionHandler extends DefaultHandler {
protected String version;
@@ -370,12 +377,16 @@
if (qName.equals("XMI")) {
version = attributes.getValue("xmi.version");
- getLog().debug("XMI version found : " + version);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("XMI version found : " + version);
+ }
}
if (version == null) {
version = attributes.getValue("xmi:version");
- getLog().debug("XMI version found : " + version);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("XMI version found : " + version);
+ }
}
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoChainedFileWriter.java 2010-05-16 12:19:55 UTC (rev 906)
@@ -25,12 +25,20 @@
package org.nuiton.eugene.plugin.writer;
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.IOUtil;
import org.nuiton.eugene.writer.ChainedFileWriterConfiguration;
+import org.nuiton.eugene.writer.WriterReport;
import org.nuiton.plugin.PluginHelper;
import org.nuiton.plugin.PluginIOContext;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
/**
* To write model files from zargo files.
@@ -107,11 +115,11 @@
getLog().info("Expanding xmi from " + inputDirectory + " : " +
includePattern);
- PluginHelper.expandFiles(ioContext,
- new String[]{includePattern},
- null,
- XMI_FILE_FILTER,
- overwrite
+ expandFiles(ioContext,
+ new String[]{includePattern},
+ null,
+ XMI_FILE_FILTER,
+ configuration
);
getLog().info("Copying resources from " + inputDirectory + " : " +
@@ -123,4 +131,76 @@
overwrite
);
}
+
+ public void expandFiles(PluginIOContext p,
+ String[] includes,
+ String[] excludes,
+ String[] zipIncludes,
+ ChainedFileWriterConfiguration configuration) throws IOException {
+
+ DirectoryScanner ds = new DirectoryScanner();
+
+ for (File input : p.getInputs()) {
+ ds.setBasedir(input);
+ if (includes != null) {
+ ds.setIncludes(includes);
+ }
+ if (excludes != null) {
+
+ ds.setExcludes(excludes);
+ }
+ ds.addDefaultExcludes();
+ ds.scan();
+ for (String file : ds.getIncludedFiles()) {
+ File in = new File(input, file);
+ File out = new File(p.getOutput(), file).getParentFile();
+ expandFile(in, out, zipIncludes, configuration);
+ }
+ }
+ }
+
+ public void expandFile(File src,
+ File dst,
+ String[] includes,
+ ChainedFileWriterConfiguration configuration) throws IOException {
+ ZipFile zipFile = new ZipFile(src);
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements()) {
+ ZipEntry nextElement = entries.nextElement();
+ String name = nextElement.getName();
+ for (String include : includes) {
+ if (DirectoryScanner.match(include, name)) {
+ if (configuration.isVerbose()) {
+ getLog().info("matching name : " + name +
+ " with pattern " + include);
+ }
+ File dstFile = new File(dst, name);
+ if (configuration.isOverwrite() ||
+ !dstFile.exists() ||
+ nextElement.getTime() > dstFile.lastModified()) {
+
+ if (configuration.isVerbose()) {
+ getLog().info("will expand : " + name + " to " + dstFile);
+ }
+
+ WriterReport writerReport = getWriterReport();
+ if (writerReport != null) {
+ writerReport.addFile(getClass().getName(), dstFile, true);
+ }
+
+ InputStream inputStream =
+ zipFile.getInputStream(nextElement);
+ FileOutputStream outStream =
+ new FileOutputStream(dstFile);
+ try {
+ IOUtil.copy(inputStream, outStream, 2048);
+ } finally {
+ outStream.close();
+ }
+ }
+
+ }
+ }
+ }
+ }
}
1
0
Author: tchemit
Date: 2010-05-14 15:44:45 +0200 (Fri, 14 May 2010)
New Revision: 905
Url: http://nuiton.org/repositories/revision/eugene/905
Log:
- add TemplateConfiguration
- remove deprecated methods
- add classLoader in template (via TemplateConfiguration) to seek Impl
- clean code
Added:
trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
Removed:
trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
Modified:
trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java
trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
Modified: trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java
===================================================================
--- trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/ant-eugene-task/src/test/java/org/nuiton/eugene/BasicObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -49,10 +49,10 @@
}
@Override
- public void generateFromClass(Writer output, ObjectModelClass clazz)
+ public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
- output.write("package " + clazz.getPackageName() + ";\n\n");
- output.write("public class " + clazz.getName() + " {\n\n}\n");
+ output.write("package " + input.getPackageName() + ";\n\n");
+ output.write("public class " + input.getName() + " {\n\n}\n");
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -58,15 +58,14 @@
public void setParent(AbstractGenerator<M> parent) {
this.parent = parent;
- //setEncoding(parent.getEncoding());
}
@Override
- public boolean getOverwrite() {
+ public boolean isOverwrite() {
if (parent != null) {
- return parent.getOverwrite();
+ return parent.isOverwrite();
}
- return super.getOverwrite();
+ return super.isOverwrite();
}
@Override
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/AbstractMetaTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -62,13 +62,6 @@
protected abstract boolean validateModel(M model);
@Override
- public final void generate(File[] file, File destDir) {
- throw new UnsupportedOperationException(
- "Transformer does not implements any longer this deprecated " +
- "method");
- }
-
- @Override
public void applyTemplate(M model, File destDir) throws IOException {
boolean isValid = validateModel(model);
Added: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -0,0 +1,62 @@
+/*
+ * #%L
+ * EUGene :: EUGene
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2004 - 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>.
+ * #L%
+ */
+package org.nuiton.eugene;
+
+/**
+ * Default template configuration
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public class DefaultTemplateConfiguration implements TemplateConfiguration {
+
+ protected boolean overwrite = true;
+
+ protected boolean verbose;
+
+ protected String encoding = "UTF-8";
+
+ protected ClassLoader loader = getClass().getClassLoader();
+
+ @Override
+ public boolean isOverwrite() {
+ return overwrite;
+ }
+
+ @Override
+ public boolean isVerbose() {
+ return verbose;
+ }
+
+ @Override
+ public String getEncoding() {
+ return encoding;
+ }
+
+ @Override
+ public ClassLoader getClassLoader() {
+ return loader;
+ }
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/DefaultTemplateConfiguration.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Deleted: trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -1,184 +0,0 @@
-/*
- * #%L
- * EUGene :: EUGene
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2004 - 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>.
- * #L%
- */
-
-package org.nuiton.eugene;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Class used in generators that allows to manage easily imports. A first-pass
- * allow to register imports, and in a second-pass, returns the type to use in
- * generated code.
- *
- * @author thimel, chemit
- * @deprecated This class was moved to {@link org.nuiton.eugene.java} package
- */
-@Deprecated
-public class ImportsManager {
-
- private static Set<String> primitiveTypes;
-
- static {
- primitiveTypes = new HashSet<String>();
-
- primitiveTypes.add("byte");
- primitiveTypes.add("Byte");
- primitiveTypes.add("short");
- primitiveTypes.add("Short");
- primitiveTypes.add("int");
- primitiveTypes.add("Integer");
- primitiveTypes.add("long");
- primitiveTypes.add("Long");
- primitiveTypes.add("float");
- primitiveTypes.add("Float");
- primitiveTypes.add("double");
- primitiveTypes.add("Double");
-
- primitiveTypes.add("char");
- primitiveTypes.add("Char");
- primitiveTypes.add("String");
-
- primitiveTypes.add("boolean");
- primitiveTypes.add("Boolean");
-
- primitiveTypes.add("void");
-
- }
- private Map<String, String> imports = new HashMap<String, String>();
- private State state = State.FILLING;
-
- /**
- * From the given class, add it to the imports list.
- * @param clazz the class to import
- * @return true if import add was successful
- * @see ImportsManager#addImport(String)
- */
- public boolean addImport(Class<?> clazz) {
- return addImport(clazz.getName());
- }
-
- /**
- * From the given fqn (fully qualified name), add it to the imports list.
- * If there is a conflict adding this import, will return false.
- * If reading of the imports has started, this method will return false,
- * unless type does not need to be imported.
- * @param fqn the fully qualified name to import
- * @return true if import add was successful
- */
- public boolean addImport(String fqn) {
- // if no package don't include it
- if (fqn.indexOf(".") == -1) {
- return true;
- }
-
- // Exclude java.lang classes
- if (fqn == null || fqn.trim().isEmpty() ||
- (fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9)) {
- return true;
- }
- // Exclude primitive types
- if (primitiveTypes.contains(fqn)) {
- return true;
- }
- // Reject generics
- if (fqn.indexOf("<") != -1 || fqn.indexOf(">") != -1) {
- return false;
- }
- String name = fqn.substring(fqn.lastIndexOf(".") + 1);
- String inPlaceFqn = imports.get(name);
- if (inPlaceFqn == null) {
- // Someone has started to read imports, impossible to add some more
- if (state == State.READING) {
- return false;
- } else {
- imports.put(name, fqn);
- return true;
- }
- }
- // if fqn is not the same, return false. Otherwise, no need to override.
- return inPlaceFqn.equals(fqn);
- }
-
- /**
- * Accorging to the already added types, returns the type to write in file.
- * If there is a conflict, returns the fully qualified name, otherwise
- * returns the simple name
- * @param fqn the fully qualified name to add
- * @return the fqn or simple name according to in-place imports
- */
- public String getType(String fqn) {
- boolean importResult = addImport(fqn);
- if (!importResult) {
- // There is a conflict, do not use simple name
- return fqn;
- } else {
- // No conflict, use simple name
- int packageEndIndex = fqn.lastIndexOf(".");
- if (packageEndIndex == -1) {
- return fqn;
- } else {
- return fqn.substring(packageEndIndex + 1);
- }
- }
- }
-
- /**
- * List the imports. This method will remove the useless imports according
- * to the given packageName (no need to import a class in the same package)
- * @param packageName the current package name (to avoid useless imports)
- * @return the imports alphabeticaly sorted
- */
- public List<String> getImports(String packageName) {
- state = State.READING;
- List<String> result = new ArrayList<String>();
- for (String fqn : imports.values()) {
- if (!(fqn.lastIndexOf(".") == packageName.length() && fqn.startsWith(packageName + "."))) {
- result.add(fqn);
- }
- }
- Collections.sort(result);
- return result;
- }
-
- /**
- * Method to reset imports list. If imports has been listed, it becomes back
- * possible to add imports.
- */
- public void clearImports() {
- imports.clear();
- state = State.FILLING;
- }
-
- private enum State {
-
- FILLING, READING
- }
-}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Template.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Template.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -26,8 +26,6 @@
package org.nuiton.eugene;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.Model;
import java.io.File;
@@ -46,15 +44,18 @@
*
* @author Cedric Pineau <pineau(a)codelutin.com>
*/
-public abstract class Template<M extends Model> {
+public abstract class Template<M extends Model> implements TemplateConfiguration {
- 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_DEFAULT_PACKAGE = "defaultPackage";
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 TemplateConfiguration configuration;
+
protected Properties properties = new Properties();
protected List<String> excludeTemplates;
@@ -69,40 +70,59 @@
/** Model */
protected M model;
- /**
- * Old method from EUGene 1.0.1 used to generate files. Now, you have to
- * use a Reader instead of directly use a Template.
- *
- * @param file list of tiles
- * @param destDir destination folder
- * @deprecated since 2.0.0
- */
- @Deprecated
- public abstract void generate(File[] file, File destDir);
+// /**
+// * Old method from EUGene 1.0.1 used to generate files. Now, you have to
+// * use a Reader instead of directly use a Template.
+// *
+// * @param file list of tiles
+// * @param destDir destination folder
+// * @deprecated since 2.0.0
+// */
+// @Deprecated
+// public abstract void generate(File[] file, File destDir);
public abstract void applyTemplate(M model, File destDir) throws IOException;
-
+ public TemplateConfiguration getConfiguration() {
+ if (configuration == null) {
+ configuration = new DefaultTemplateConfiguration();
+ }
+ return configuration;
+ }
+
+ public void setConfiguration(TemplateConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
/**
- * @param v override value
- * @deprecated since 2.0.0, use a Properties object to add the
- * {@link Template#PROP_OVERWRITE} value
- * @see Template#setProperties(Properties)
+ *
+ * @return {@code true} if must overwrite ouput
+ * @deprecated since 2.0.2, prefer use the {@link #isOverwrite()} method
*/
@Deprecated
- public void setOverwrite(boolean v) {
- //overwrite = v;
- properties.setProperty(PROP_OVERWRITE, String.valueOf(v));
+ public boolean getOverwrite() {
+ return isOverwrite();
}
- public boolean getOverwrite() {
- return Boolean.parseBoolean(properties.getProperty(PROP_OVERWRITE, "true"));
+ @Override
+ public boolean isOverwrite() {
+ return getConfiguration().isOverwrite();
}
+ @Override
+ public boolean isVerbose() {
+ return getConfiguration().isVerbose();
+ }
+ @Override
public String getEncoding() {
- return properties.getProperty(PROP_ENCODING, "");
+ return getConfiguration().getEncoding();
}
+ @Override
+ public ClassLoader getClassLoader() {
+ return getConfiguration().getClassLoader();
+ }
+
/**
* @param encoding encoding value
* @deprecated since 2.0.0, use a Properties object to add the
@@ -149,9 +169,6 @@
if (!StringUtils.isEmpty(genPackages)) {
//TC-20091125 avoid manual array copy
generatedPackages.addAll(Arrays.asList(genPackages.split(",")));
-// for (String s : genPackages.split(",")) {
-// generatedPackages.add(s);
-// }
}
}
return generatedPackages;
@@ -181,9 +198,6 @@
if (!StringUtils.isEmpty(excludes)) {
//TC-20091125 avoid manual array copy
excludeTemplates.addAll(Arrays.asList(excludes.split(",")));
-// for (String s : excludes.split(",")) {
-// excludeTemplates.add(s);
-// }
}
}
return excludeTemplates;
Added: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java (rev 0)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -0,0 +1,50 @@
+/*
+ * #%L
+ * EUGene :: EUGene
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2004 - 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>.
+ * #L%
+ */
+package org.nuiton.eugene;
+
+/**
+ * Contract of a {@link Template} configuration
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.0.2
+ */
+public interface TemplateConfiguration {
+
+ /**
+ * @return {@code true} if must regenerate files even if they are up to
+ * date
+ */
+ boolean isOverwrite();
+
+ /** @return {@code true} if build is verbose. */
+ boolean isVerbose();
+
+ /** @return encoding to use to read and write files */
+ String getEncoding();
+
+ /** @return the classloader to use to seek for resources */
+ ClassLoader getClassLoader();
+
+}
Property changes on: trunk/eugene/src/main/java/org/nuiton/eugene/TemplateConfiguration.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Transformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -138,23 +138,6 @@
}
/**
- * Old method from previous EUGene 1.0.1 version. Used before creation
- * of ModelReader.
- *
- * @param file
- * @param destDir
- * @deprecated no need to manage list of files in input, prefer use input model.
- */
- @Override
- @Deprecated
- public void generate(File[] file, File destDir) {
- outputTemplate = initOutputTemplate();
- outputTemplate.setProperties(getOutputProperties());
- getOutputTemplate().generate(file, destDir);
- }
-
-
- /**
* This method apply the current transformation. You can use an other
* transformer for previous transformation by overriding
* {@link #initPreviousTransformer} method. In this case, the current
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -35,6 +35,7 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -434,16 +435,25 @@
ObjectModelClass output) {
// Get name for Impl class
- String implQualifiedName = input.getQualifiedName() + "Impl";
+ String fqn = input.getQualifiedName() + "Impl";
+ URL location = getFileInClassPath(fqn);
+ if (location != null) {
+
+ if (isVerbose()) {
+ log.info("Will not generate ["+fqn+"] which exists : "+location);
+ }
+ // file already found in class-path, do not generate it
+ return null;
+ }
+
// Does bean own operations ?
boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() ||
!input.getOperations().isEmpty();
- String resourceName = "/" + implQualifiedName.replaceAll("\\.", "/");
ObjectModelClass resultClassImpl = null;
// Generate the Impl class if not already exist in classpath and no operation is defined in model
- if (getClass().getResource(resourceName) == null && !hasOperations) {
+ if (!hasOperations) {
String implName = input.getName() + "Impl";
resultClassImpl = createClass(implName, input.getPackageName());
// set the abstract resulClass as the resultClassImpl super class
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -95,26 +95,26 @@
* Generate from all classes.
*
* @param output Writer for generating the java file
- * @param clazz Class to manage for creating an output file
+ * @param input Class to manage for creating an output file
* @throws IOException if any pb while writing file
*/
@Override
- public void generateFromClass(Writer output, ObjectModelClass clazz)
+ public void generateFromClass(Writer output, ObjectModelClass input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug("Will generate class "+clazz.getQualifiedName());
+ log.debug("Will generate class "+ input.getQualifiedName());
}
- preparePrefix(clazz);
+ preparePrefix(input);
// Imports, package et documentation
- generateHeader(output, clazz);
+ generateHeader(output, input);
- String abstractStr = clazz.isAbstract() ? " abstract " : " ";
- String className = clazz.getName();
+ String abstractStr = input.isAbstract() ? " abstract " : " ";
+ String className = input.getName();
String extend = "";
- Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
+ Iterator<ObjectModelClass> j = input.getSuperclasses().iterator();
if (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
@@ -122,7 +122,7 @@
String implement = "";
for (Iterator<ObjectModelInterface> i =
- clazz.getInterfaces().iterator(); i.hasNext();) {
+ input.getInterfaces().iterator(); i.hasNext();) {
ObjectModelClassifier parentInterface = i.next();
String interfaceName = GeneratorUtil.getSimpleName(
parentInterface.getQualifiedName());
@@ -135,7 +135,7 @@
log.debug(className+" : super : "+extend+", interfaces : "
+ implement);
}
- generateAnnotations(output, clazz, clazz);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public<%=abstractStr%>class <%=className%>}*/
@@ -157,9 +157,9 @@
}*/
}
- generateInnerClassifiers(output, clazz.getInnerClassifiers());
- generateAttributes(output, clazz,clazz.getAttributes());
- generateOperations(output, clazz,clazz.getOperations());
+ generateInnerClassifiers(output, input.getInnerClassifiers());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=className%>
@@ -168,20 +168,20 @@
@Override
public void generateFromInterface(Writer output,
- ObjectModelInterface interfacez)
+ ObjectModelInterface input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug(interfacez.getQualifiedName());
+ log.debug(input.getQualifiedName());
}
- preparePrefix(interfacez);
+ preparePrefix(input);
// Imports, package et documentation
- generateHeader(output, interfacez);
+ generateHeader(output, input);
- String interfaceName = interfacez.getName();
+ String interfaceName = input.getName();
String extend = "";
- Iterator<ObjectModelInterface> j = interfacez.getInterfaces().iterator();
+ Iterator<ObjectModelInterface> j = input.getInterfaces().iterator();
while (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
@@ -189,7 +189,7 @@
extend += ", ";
}
}
- generateAnnotations(output, interfacez, interfacez);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public interface <%=interfaceName%>}*/
@@ -203,8 +203,8 @@
}*/
}
- generateAttributes(output, interfacez, interfacez.getAttributes());
- generateOperations(output, interfacez, interfacez.getOperations());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=interfaceName%>
}*/
@@ -236,23 +236,23 @@
}
@Override
- public void generateFromEnum(Writer output, ObjectModelEnumeration enumz)
+ public void generateFromEnum(Writer output, ObjectModelEnumeration input)
throws IOException {
if (log.isDebugEnabled()) {
- log.debug(enumz.getQualifiedName());
+ log.debug(input.getQualifiedName());
}
- preparePrefix(enumz);
- generateHeader(output, enumz); // Imports, package et documentation
+ preparePrefix(input);
+ generateHeader(output, input); // Imports, package et documentation
- String enumzName = enumz.getName();
+ String enumzName = input.getName();
String extend = "";
- Iterator<ObjectModelInterface> j = enumz.getInterfaces().iterator();
+ Iterator<ObjectModelInterface> j = input.getInterfaces().iterator();
if (j.hasNext()) {
ObjectModelClassifier p = j.next();
extend += GeneratorUtil.getSimpleName(p.getQualifiedName());
}
- generateAnnotations(output, enumz, enumz);
+ generateAnnotations(output, input, input);
/*{
<%=prefix%>public enum <%=enumzName%>}*/
@@ -267,18 +267,18 @@
}*/
}
// generation of literal
- if (enumz.getLiterals().isEmpty()) {
+ if (input.getLiterals().isEmpty()) {
/*{ ; }*/
} else {
- Iterator<String> i = enumz.getLiterals().iterator();
+ Iterator<String> i = input.getLiterals().iterator();
while (i.hasNext()) {
String literal = i.next();
/*{<%=prefix%> <%=literal%><%=(i.hasNext() ? "," : ";")%>
}*/
}
}
- generateAttributes(output, enumz, enumz.getAttributes());
- generateOperations(output, enumz, enumz.getOperations());
+ generateAttributes(output, input, input.getAttributes());
+ generateOperations(output, input, input.getOperations());
/*{
<%=prefix%>} //<%=enumzName%>
}*/
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -43,6 +43,7 @@
import org.nuiton.eugene.models.object.ObjectModelTransformer;
import org.nuiton.eugene.models.object.ObjectModelType;
+import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -382,4 +383,14 @@
public void setConstantPrefix(String constantPrefix) {
this.constantPrefix = constantPrefix;
}
+
+ protected URL getFileInClassPath(String fqn) {
+ String resourceName = fqn.replaceAll("\\.", "/") + ".java";
+ URL fileLocation = getClassLoader().getResource(resourceName);
+ if (log.isDebugEnabled()) {
+ log.debug("Look for resource : " + resourceName + " = " + fileLocation);
+ }
+ return fileLocation;
+ }
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/ObjectModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -25,51 +25,51 @@
package org.nuiton.eugene.models.object;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.eugene.AbstractGenerator;
+import org.nuiton.eugene.MonitorWriter;
+
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Collection;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.AbstractGenerator;
-import org.nuiton.eugene.MonitorWriter;
-
/**
* 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
* nom de fichier convenable. Si dans une méthode generateFrom... on utilise pas
* le Writer alors aucun fichier n'est généré.
- *
+ * <p/>
* <pre>
* public String getFilenameForClass(ObjectModelClass clazz){
* return super.getFilenameForClass(Clazz) + "Service.java";
* }
- *
+ * <p/>
* public void generateFromClass(Writer output, ObjectModelClass clazz) throws IOException{
* if(clazz.getType().equals("service")){
* / *{
* public class .... {
- *
+ * <p/>
* }
* }* /
* }
* }
* </pre>
- *
+ * <p/>
* Le nom de l'argument writer doit absolument etre output et pas autre chose si
* vous souhaitez utiliser le processeur
* org.codelutin.processor.filters.GeneratorTemplatesFilter pour vous
* s'implifier l'écriture des templates.
- *
+ * <p/>
* Created: 14 mars 2004
- *
+ *
* @author Benjamin Poussin <poussin(a)codelutin.com> Copyright Code Lutin
- *
* @version $Revision$
- *
- * Mise a jour: $Date$ par : */
+ * <p/>
+ * Mise a jour: $Date$ par :
+ */
public class ObjectModelGenerator extends AbstractGenerator<ObjectModel> {
/** Logger for this class. */
@@ -82,21 +82,6 @@
super(parent);
}
- @Override
- @Deprecated
- public void generate(File[] files, File destDir) {
- ObjectModelReader reader = new ObjectModelReader();
- ObjectModel objectModel = reader.read(files);
- setLastModifiedSource(reader.getLastModifiedSource());
- try {
- applyTemplate(objectModel, destDir);
- } catch (IOException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Unable to generate for file", eee);
- }
- }
- }
-
/**
* Par defaut la methode appelle la methode
* {@link #generateFromModel(Writer, ObjectModel)} puis boucle sur chaque
@@ -110,7 +95,8 @@
* 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 le modele memoire a utiliser
+ *
+ * @param model le modele memoire a utiliser
* @param destDir le repertoire ou generer
* @throws IOException pour tout pb
*/
@@ -146,33 +132,32 @@
* Deux méthodes dépendent du type et peuvent être surchargées :
* getFilenameForXXX et generateFromXXX (XXX étant un type prédéfini pour une méthode existante).
*
- * @see ObjectModelType
- *
* @param elements Collection d'éléments d'un des types ci-dessus
- * @param destDir dossier de destination pour le fichier généré
- * @param type type explicite d'ObjectModel
+ * @param destDir dossier de destination pour le fichier généré
+ * @param type type explicite d'ObjectModel
+ * @see ObjectModelType
*/
private void generateFromElements(Collection<? extends ObjectModelElement> elements,
File destDir,
ObjectModelType type) {
-
+
for (ObjectModelElement element : elements) {
String filename = "";
// Filename depends on type of element (Classifier, Class, Interface or Enumeration)
switch (type) {
case OBJECT_MODEL_CLASSIFIER:
- filename = getFilenameForClassifier((ObjectModelClassifier)element);
+ filename = getFilenameForClassifier((ObjectModelClassifier) element);
break;
case OBJECT_MODEL_INTERFACE:
- filename = getFilenameForInterface((ObjectModelInterface)element);
+ filename = getFilenameForInterface((ObjectModelInterface) element);
break;
case OBJECT_MODEL_CLASS:
- filename = getFilenameForClass((ObjectModelClass)element);
+ filename = getFilenameForClass((ObjectModelClass) element);
break;
case OBJECT_MODEL_ENUMERATION:
- filename = getFilenameForEnumeration((ObjectModelEnumeration)element);
+ filename = getFilenameForEnumeration((ObjectModelEnumeration) element);
}
-
+
generateFromElement(element, destDir, filename, type);
}
}
@@ -183,12 +168,11 @@
* ObjectModelInterface et ObjectModelEnumeration.
* La méthode generateFromXXX dépend du type d'élément et peut être surchargée.
*
- * @see ObjectModelType
- *
- * @param element element à généré
- * @param destDir dossier de destination
+ * @param element element à généré
+ * @param destDir dossier de destination
* @param filename nom du fichier de sortie
- * @param type type d'ObjectModel
+ * @param type type d'ObjectModel
+ * @see ObjectModelType
*/
protected void generateFromElement(Object element,
File destDir,
@@ -200,9 +184,9 @@
// effectue un appel pour savoir si on a le droit de generer l'element
// courant
if (canGenerateElement(element)) {
-
+
File outputFile = getDestinationFile(destDir, filename);
- if (!getOverwrite() && isNewerThanSource(outputFile)) {
+ if (!isOverwrite() && isNewerThanSource(outputFile)) {
if (log.isTraceEnabled()) {
log.trace("file " + outputFile + " is up-to-date");
}
@@ -210,7 +194,7 @@
}
if (!outputFile.exists() && log.isTraceEnabled()) {
log.trace("not up-to-date " + outputFile.lastModified()
- + " <" + outputFile + ">");
+ + " <" + outputFile + ">");
}
try {
StringWriter out = new StringWriter();
@@ -243,36 +227,36 @@
} catch (Exception eee) {
log.warn("Erreur lors de la génération du fichier "
- + outputFile);
+ + outputFile);
throw new RuntimeException(
"Erreur lors de la génération du fichier "
- + outputFile, eee);
+ + outputFile, eee);
}
}
}
/**
* Test if given element can be generated.
- *
+ * <p/>
* An element can be generated if his package is in the
* {@link #generatedPackages} list or if {@link #generatedPackages} is
* null or empty.
- *
+ *
* @param element element to test
* @return generation allowed
*/
protected boolean canGenerateElement(Object element) {
-
+
boolean canGenerate = true;
-
+
// can get package only for Classifiers
if (element instanceof ObjectModelClassifier) {
- ObjectModelClassifier classifier = (ObjectModelClassifier)element;
+ ObjectModelClassifier classifier = (ObjectModelClassifier) element;
String classifierPackage = classifier.getPackageName();
-
- canGenerate = super.canGeneratePackage(classifierPackage);
+
+ canGenerate = canGeneratePackage(classifierPackage);
}
-
+
return canGenerate;
}
@@ -280,6 +264,7 @@
* Par defaut cette methode retourne le getName du model. Si l'on souhaite
* utiliser la methode generateFromModel il vaut mieux surcharger cette
* methode
+ *
* @param model le modele utilise
* @return le nom du fichier a generer
*/
@@ -291,7 +276,8 @@
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
- * @param model le modele utilise
+ *
+ * @param model le modele utilise
* @param packageName le nom du paquetage
* @return le repertoire correspondant au paquetage
*/
@@ -303,28 +289,29 @@
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param interfacez l'interface utilisee
* @return le nom du l'interface a generer
*/
public String getFilenameForInterface(ObjectModelInterface interfacez) {
return getFilenameForClassifier(interfacez);
-// return interfacez.getQualifiedName().replace('.', File.separatorChar);
}
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param clazz la classe utilisee
* @return le nom de la classe a generer
*/
public String getFilenameForClass(ObjectModelClass clazz) {
return getFilenameForClassifier(clazz);
-// return clazz.getQualifiedName().replace('.', File.separatorChar);
}
/**
* Par defaut cette methode retourne le QualifiedName convertie en chemin
* par exemple pour org.codelutin.Toto on aurait org/codelutin/Toto
+ *
* @param classifier le classifier utilisee
* @return le nom du classifier a generer
*/
@@ -334,30 +321,29 @@
public String getFilenameForEnumeration(ObjectModelEnumeration enumeration) {
return getFilenameForClassifier(enumeration);
-// return enumeration.getQualifiedName().replace('.', File.separatorChar);
}
public void generateFromModel(Writer output,
- ObjectModel model) throws IOException {
+ ObjectModel input) throws IOException {
}
public void generateFromInterface(Writer output,
- ObjectModelInterface interfacez) throws IOException {
+ ObjectModelInterface input) throws IOException {
}
public void generateFromEnum(Writer output,
- ObjectModelEnumeration interfacez) throws IOException {
+ ObjectModelEnumeration input) throws IOException {
}
public void generateFromClass(Writer output,
- ObjectModelClass clazz) throws IOException {
+ ObjectModelClass input) throws IOException {
}
public void generateFromClassifier(Writer output,
- ObjectModelClassifier clazz) throws IOException {
+ ObjectModelClassifier input) throws IOException {
}
public void generateFromEnumeration(Writer output,
- ObjectModelEnumeration enumeration) throws IOException {
+ ObjectModelEnumeration input) throws IOException {
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/state/StateModelGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -74,26 +74,26 @@
super(parent);
}
- /*
- * @see org.nuiton.eugene.Generator#generate(java.io.File[], java.io.File)
- */
- @Override
- @Deprecated
- public void generate(File[] files, File destDir) {
+// /*
+// * @see org.nuiton.eugene.Generator#generate(java.io.File[], java.io.File)
+// */
+// @Override
+// @Deprecated
+// public void generate(File[] files, File destDir) {
+//
+// StateModelReader reader = new StateModelReader();
+// StateModel stateModel = reader.read(files);
+// setLastModifiedSource(reader.getLastModifiedSource());
+//
+// // generate code
+// try {
+// applyTemplate(stateModel, destDir);
+// } catch (IOException e) {
+// log.warn("Can't generate code for files", e);
+// }
+// }
- StateModelReader reader = new StateModelReader();
- StateModel stateModel = reader.read(files);
- setLastModifiedSource(reader.getLastModifiedSource());
- // generate code
- try {
- applyTemplate(stateModel, destDir);
- } catch (IOException e) {
- log.warn("Can't generate code for files", e);
- }
- }
-
-
/**
* Par défaut, appel {@link #generateFromModel(MonitorWriter , StateModel)} pour le
* model et {@link #generateFromState(Writer,StateModelState)} pour tous les
@@ -110,10 +110,9 @@
String filename = getFilenameFromModel(stateModel);
File outputFile = getDestinationFile(destDir, filename);
- if (getOverwrite() || !isNewerThanSource(outputFile)) {
+ if (isOverwrite() || !isNewerThanSource(outputFile)) {
+ MonitorWriter monitorOut = new MonitorWriter(new StringWriter());
try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
generateFromModel(monitorOut, stateModel);
write(outputFile, monitorOut);
} catch (Exception eee) {
@@ -122,6 +121,8 @@
throw new RuntimeException(
"Erreur lors de la génération du fichier " + outputFile,
eee);
+ } finally {
+ monitorOut.close();
}
}
@@ -137,10 +138,9 @@
String filenameState = getFilenameFromState(state, chart
.getName());
File outputFiletate = getDestinationFile(destDir, filenameState);
- if (getOverwrite() || !isNewerThanSource(outputFiletate)) {
+ if (isOverwrite() || !isNewerThanSource(outputFiletate)) {
+ MonitorWriter monitorOut = new MonitorWriter(new StringWriter());
try {
- StringWriter out = new StringWriter();
- MonitorWriter monitorOut = new MonitorWriter(out);
generateFromState(monitorOut, state);
write(outputFiletate, monitorOut);
} catch (Exception eee) {
@@ -149,6 +149,8 @@
throw new RuntimeException(
"Erreur lors de la génération du fichier "
+ outputFiletate, eee);
+ } finally {
+ monitorOut.close();
}
}
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/writer/ChainedFileWriterConfiguration.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -27,6 +27,7 @@
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import java.io.File;
import java.util.Map;
@@ -38,7 +39,7 @@
* @author tchemit <chemit(a)codelutin.com>
* @since 2.0.0
*/
-public interface ChainedFileWriterConfiguration {
+public interface ChainedFileWriterConfiguration extends TemplateConfiguration{
/** @return the type of model used */
String getModelType();
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/ObjectModelGeneratorTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -31,7 +31,6 @@
import junit.framework.Assert;
import org.junit.Test;
-import org.nuiton.eugene.models.object.ObjectModelGenerator;
import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl;
import org.nuiton.eugene.models.object.xml.ObjectModelElementImpl;
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI12ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -85,9 +85,12 @@
transformer.setURIResolver(new ResourceResolver());
- transformer.transform(new StreamSource(xmiFile), new StreamResult(
- new FileOutputStream(result)));
-
+ FileOutputStream out = new FileOutputStream(result);
+ try {
+ transformer.transform(new StreamSource(xmiFile), new StreamResult(out));
+ } finally {
+ out.close();
+ }
return result;
}
@@ -98,11 +101,14 @@
* @return object model
*/
protected ObjectModel loadModel(File modelFile) {
- ObjectModelGenerator generator = new ObjectModelGenerator();
- generator.setOverwrite(true);
- generator.generate(new File[] { modelFile }, new File("output"));
- ObjectModel objectModel = generator.getModel();
- return objectModel;
+// ObjectModelGenerator generator = new ObjectModelGenerator();
+ ObjectModelReader reader = new ObjectModelReader();
+ ObjectModel model = reader.read(modelFile);
+ return model;
+// generator.applyTemplate(model);
+// generator.generate(new File[] { modelFile }, new File("output"));
+// ObjectModel objectModel = generator.getModel();
+// return objectModel;
}
/**
Modified: trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java
===================================================================
--- trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/eugene/src/test/java/org/nuiton/eugene/models/object/XMI21ToObjectModelTest.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -91,8 +91,13 @@
String basePath = xmiFile.getParent();
transformer.setURIResolver(new ResourceResolver(basePath));
- transformer.transform(new StreamSource(xmiFile), new StreamResult(
- new FileOutputStream(result)));
+ FileOutputStream out = new FileOutputStream(result);
+ try {
+ transformer.transform(new StreamSource(xmiFile), new StreamResult(
+ out));
+ } finally {
+ out.close();
+ }
return result;
}
@@ -104,11 +109,13 @@
* @return object model
*/
protected ObjectModel loadModel(File modelFile) {
- ObjectModelGenerator generator = new ObjectModelGenerator();
- generator.setOverwrite(true);
- generator.generate(new File[] { modelFile }, new File("output"));
- ObjectModel objectModel = generator.getModel();
- return objectModel;
+ ObjectModelReader reader = new ObjectModelReader();
+ ObjectModel model = reader.read(modelFile);
+ return model;
+// ObjectModelGenerator generator = new ObjectModelGenerator();
+// generator.generate(new File[] { modelFile }, new File("output"));
+// ObjectModel objectModel = generator.getModel();
+// return objectModel;
}
/**
Modified: trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java
===================================================================
--- trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/it/smart-generate/generators/src/main/java/org/nuiton/eugene/test/generator/BeanGenerator.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -46,12 +46,12 @@
import java.util.List;
import java.util.Set;
import java.util.HashSet;
-import org.apache.commons.lang.StringUtils;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.object.ObjectModelGenerator;
import org.nuiton.eugene.GeneratorUtil;
-import org.nuiton.eugene.ImportsManager;
+import org.nuiton.eugene.java.ImportsManager;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
import org.nuiton.eugene.models.object.ObjectModelClass;
import org.nuiton.eugene.models.object.ObjectModelClassifier;
@@ -608,7 +608,7 @@
* @param attributes list of attributes for the generation (may be not empty)
* @param imports the ImportsManager used to generate the header imports of the DTO
* @return the same list of attributes in parameter with attributes from entities dependencies
- * @see org.nuiton.eugene.ImportsManager
+ * @see org.nuiton.eugene.java.ImportsManager
* @see org.nuiton.eugene.models.object.ObjectModelDependency
*/
private List<ObjectModelAttribute> setAttributesForDTO(ObjectModelClass clazz,
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/SmartGenerateMojo.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -33,6 +33,7 @@
import org.apache.maven.settings.Settings;
import org.nuiton.eugene.ModelReader;
import org.nuiton.eugene.Template;
+import org.nuiton.eugene.TemplateConfiguration;
import org.nuiton.eugene.models.Model;
import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter;
import org.nuiton.eugene.plugin.writer.ModelChainedFileWriter;
@@ -584,7 +585,22 @@
urls,
urlsAsString
);
+
+ addDirectoryToUrlsList(
+ new File(getProject().getBuild().getTestSourceDirectory()),
+ urls,
+ urlsAsString
+ );
+ } else {
+
+ addDirectoryToUrlsList(
+ new File(getProject().getBuild().getSourceDirectory()),
+ urls,
+ urlsAsString
+ );
}
+
+
if (project.getProjectReferences() != null) {
// this case is for multi-module when calling from a
// parent module
@@ -612,7 +628,7 @@
if (!project.getArtifacts().isEmpty()) {
// this is a special case when artifacts were resolved
// (for example in site phase)
- if (verbose) {
+ if (isVerbose()) {
getLog().info(
"Use resolved artifacts to build class-path");
}
@@ -629,7 +645,7 @@
}
// we ask to add the directory in classloader
loader = getClass().getClassLoader();
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
getLog().info("original classloader " + loader);
}
if (loader instanceof URLClassLoader) {
@@ -637,7 +653,7 @@
// car sinon on risque de ne pas retrouver les resources...
for (URL u : ((URLClassLoader) loader).getURLs()) {
addUrlToUrlsList(u, urls, urlsAsString);
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
getLog().debug("original cp entry: " + u);
}
}
@@ -652,9 +668,9 @@
urls.toArray(new URL[urls.size()]),
loader);
}
- if (getLog().isDebugEnabled()) {
+ if (isVerbose()) {
for (URL u : urls) {
- getLog().debug("cp entry: " + u);
+ getLog().info("cp entry: " + u);
}
}
fixedClassLoader = loader;
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-13 17:16:19 UTC (rev 904)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ModelChainedFileWriter.java 2010-05-14 13:44:45 UTC (rev 905)
@@ -50,11 +50,17 @@
public class ModelChainedFileWriter extends BaseChainedFileWriter {
public static final String PROP_GENERATED_PACKAGES = "generatedPackages";
+
public static final String PROP_EXCLUDE_TEMPLATES = "excludetemplates";
+
public static final String PROP_TEMPLATES = "templates";
+
public static final String PROP_TEMPLATES_LIST = "templatesList";
+
public static final String PROP_DEFAULT_PACKAGE = "defaultPackage";
+
public static final String PROP_MODEL_READER = "modelReader";
+
public static final String PROP_READER = "reader";
public ModelChainedFileWriter() {
@@ -205,21 +211,19 @@
// init templates
- List<Template<Model>> templatesList = new ArrayList<Template<Model>>();
+ List<Template<?>> templatesList = new ArrayList<Template<?>>();
String[] templatesNames = getTemplates().split(",");
for (String templateName : templatesNames) {
// remove trailing spaces
templateName = templateName.trim();
- Template<Model> template;
-
- template = (Template<Model>)
+ Template<?> template =
configuration.getModelTemplates().get(templateName);
if (template == null) {
getLog().warn("template [" + templateName + "] is not " +
"registred via plexus, try to load it directly");
try {
- template = (Template<Model>) Class.forName(
+ template = (Template<?>) Class.forName(
templateName, true, loader).newInstance();
} catch (Exception e) {
throw new IllegalStateException(
@@ -259,6 +263,10 @@
getLog().info("Generating from " + inputDirectory + " : " +
includePattern);
+ if (configuration.isVerbose()) {
+ getLog().info("Will use classLoader "+configuration.getClassLoader());
+ }
+
for (File srcDirGen : ioContext.getInputs()) {
if (configuration.isVerbose()) {
@@ -281,6 +289,8 @@
getLog().info("Apply " + template.getClass().getSimpleName() +
" generator");
+ template.setConfiguration(configuration);
+
// apply template
template.applyTemplate(model, ioContext.getOutput());
1
0
Author: tchemit
Date: 2010-05-13 19:16:19 +0200 (Thu, 13 May 2010)
New Revision: 904
Url: http://nuiton.org/repositories/revision/eugene/904
Log:
fix log4j dependency
Modified:
trunk/maven-eugene-plugin/pom.xml
Modified: trunk/maven-eugene-plugin/pom.xml
===================================================================
--- trunk/maven-eugene-plugin/pom.xml 2010-05-13 17:15:46 UTC (rev 903)
+++ trunk/maven-eugene-plugin/pom.xml 2010-05-13 17:16:19 UTC (rev 904)
@@ -70,6 +70,12 @@
<artifactId>maven-helper-plugin</artifactId>
</dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+
</dependencies>
<!-- ************************************************************* -->
1
0
13 May '10
Author: tchemit
Date: 2010-05-13 19:15:46 +0200 (Thu, 13 May 2010)
New Revision: 903
Url: http://nuiton.org/repositories/revision/eugene/903
Log:
add constant prefix api
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -27,7 +27,11 @@
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.models.object.*;
+import org.nuiton.eugene.models.object.ObjectModelAttribute;
+import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
@@ -35,6 +39,7 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/*{generator option: parentheses = false}*/
/*{generator option: writeString = +}*/
@@ -44,94 +49,104 @@
* (and nothing else) according to the JavaBeans 1.1 norm.
*
* @author tchemit <chemit(a)codelutin.com>
+ * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaBeanTransformer"
* @since 2.0.2
- * @plexus.component role="org.nuiton.eugene.Template" role-hint="org.nuiton.eugene.java.JavaBeanTransformer"
*/
public class JavaBeanTransformer extends ObjectModelTransformerToJava {
private static final Log log = LogFactory.getLog(JavaBeanTransformer.class);
+ public static final String DEFAULT_CONSTANT_PREFIX = "PROPERTY_";
+
@Override
- public void transformFromClass(ObjectModelClass clazz) {
- if (!canGenerate(clazz)) {
+ public void transformFromClass(ObjectModelClass input) {
+ if (!canGenerate(input)) {
if (log.isDebugEnabled()) {
- log.debug("Skip generation for "+clazz.getQualifiedName());
+ log.debug("Skip generation for " + input.getQualifiedName());
}
return;
}
- ObjectModelClass resultClass =
- createAbstractClass(clazz.getName(), clazz.getPackageName());
+ ObjectModelClass output =
+ createAbstractClass(input.getName(), input.getPackageName());
if (log.isDebugEnabled()) {
- log.debug("will generate "+ resultClass.getQualifiedName());
+ log.debug("will generate " + output.getQualifiedName());
}
- ObjectModelClass resultClassImpl = generateImpl(clazz, resultClass);
+ ObjectModelClass ouputImpl = generateImpl(input, output);
if (log.isDebugEnabled()) {
- if (resultClassImpl == null) {
+ if (ouputImpl == null) {
log.debug("will generate impl " +
- resultClass.getQualifiedName());
+ output.getQualifiedName());
} else {
log.debug("do not generate existing impl " +
- resultClass.getQualifiedName());
+ output.getQualifiedName());
}
}
+
+ String prefix = getConstantPrefix(input, DEFAULT_CONSTANT_PREFIX);
- addSuperClass(clazz, resultClass, resultClassImpl);
+ setConstantPrefix(prefix);
- addInterfaces(clazz, resultClass);
+ addSuperClass(input, output, ouputImpl);
+ addInterfaces(input, output);
+
+ Set<String> constantNames = addConstantsFromDependency(input, output);
+
// Get available properties
- List<ObjectModelAttribute> properties = getProperties(clazz);
+ List<ObjectModelAttribute> properties = getProperties(input);
// Add properties constant
for (ObjectModelAttribute attr : properties) {
- createPropertyConstant(resultClass, attr);
+ createPropertyConstant(output, attr, prefix, constantNames);
}
// Add properties field + javabean methods
for (ObjectModelAttribute attr : properties) {
- createProperty(resultClass, attr);
+ createProperty(output, attr);
}
-
+
// Add operations
- createAbstractOperations(resultClass, clazz.getOperations());
+ createAbstractOperations(output, input.getOperations());
// Add property change support
- createPropertyChangeSupport(resultClass);
+ createPropertyChangeSupport(output);
boolean hasAMultipleProperty = containsMutiple(properties);
// Add helper operations
if (hasAMultipleProperty) {
- createGetChildMethod(resultClass);
+ createGetChildMethod(output);
}
}
- @Override
- public String getConstantName(String propertyName) {
- return "PROPERTY_" + super.getConstantName(propertyName);
- }
+ protected void createPropertyConstant(ObjectModelClass output,
+ ObjectModelAttribute attr,
+ String prefix,
+ Set<String> constantNames) {
- protected void createPropertyConstant(ObjectModelClass resultClass,
- ObjectModelAttribute attr) {
-
String attrName = getAttributeName(attr);
- String constantName = getConstantName(attrName);
+ String constantName = prefix + builder.getConstantName(attrName);
- addConstant(resultClass,
+ if (constantNames.contains(constantName)) {
+
+ // already generated
+ return;
+ }
+
+ addConstant(output,
constantName,
String.class,
"\"" + attrName + "\"",
ObjectModelModifier.PUBLIC
);
-
}
protected String getAttributeName(ObjectModelAttribute attr) {
@@ -167,9 +182,8 @@
return result;
}
- protected void createProperty(
- ObjectModelClass resultClass,
- ObjectModelAttribute attr) {
+ protected void createProperty(ObjectModelClass output,
+ ObjectModelAttribute attr) {
String attrName = getAttributeName(attr);
String attrType = getAttributeType(attr);
@@ -183,21 +197,21 @@
if (multiple) {
- createGetChildMethod(resultClass,
+ createGetChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
simpleType
);
- createAddChildMethod(resultClass,
+ createAddChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
constantName
);
- createRemoveChildMethod(resultClass,
+ createRemoveChildMethod(output,
attrName,
attrNameCapitalized,
attrType,
@@ -214,13 +228,13 @@
simpleType = JavaGeneratorUtil.getSimpleName(attrType);
}
- createGetMethod(resultClass,
+ createGetMethod(output,
attrName,
attrNameCapitalized,
attrType
);
- createSetMethod(resultClass,
+ createSetMethod(output,
attrName,
attrNameCapitalized,
attrType,
@@ -229,7 +243,7 @@
);
// Add attribute to the class
- addAttribute(resultClass,
+ addAttribute(output,
attrName,
attrType,
"",
@@ -238,19 +252,20 @@
}
- protected void createAbstractOperations(ObjectModelClass resultClass,
+ protected void createAbstractOperations(ObjectModelClass ouput,
Iterable<ObjectModelOperation> operations) {
JavaGeneratorUtil.cloneOperations(
this,
operations,
- resultClass,
+ ouput,
true,
ObjectModelModifier.ABSTRACT
);
}
- protected List<ObjectModelAttribute> getProperties(ObjectModelClass clazz) {
+
+ protected List<ObjectModelAttribute> getProperties(ObjectModelClass input) {
List<ObjectModelAttribute> attributes =
- (List<ObjectModelAttribute>) clazz.getAttributes();
+ (List<ObjectModelAttribute>) input.getAttributes();
List<ObjectModelAttribute> attrs =
new ArrayList<ObjectModelAttribute>();
@@ -264,12 +279,12 @@
return attrs;
}
- protected void createGetMethod(ObjectModelClass resultClass,
+ protected void createGetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType) {
ObjectModelOperation getter = addOperation(
- resultClass,
+ output,
"get" + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
@@ -280,13 +295,14 @@
}*/
);
}
- protected void createGetChildMethod(ObjectModelClass resultClass,
+
+ protected void createGetChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String simpleType) {
ObjectModelOperation getChild = addOperation(
- resultClass,
+ output,
"get" + attrNameCapitalized,
attrType,
ObjectModelModifier.PUBLIC
@@ -300,13 +316,13 @@
);
}
- protected void createAddChildMethod(ObjectModelClass resultClass,
+ protected void createAddChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String constantName) {
ObjectModelOperation addChild = addOperation(
- resultClass,
+ output,
"add" + attrNameCapitalized,
"void",
ObjectModelModifier.PUBLIC
@@ -320,13 +336,13 @@
);
}
- protected void createRemoveChildMethod(ObjectModelClass resultClass,
+ protected void createRemoveChildMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String constantName) {
ObjectModelOperation operation = addOperation(
- resultClass,
+ output,
"remove" + attrNameCapitalized,
"boolean",
ObjectModelModifier.PUBLIC
@@ -343,14 +359,14 @@
);
}
- protected void createSetMethod(ObjectModelClass resultClass,
+ protected void createSetMethod(ObjectModelClass output,
String attrName,
String attrNameCapitalized,
String attrType,
String simpleType,
String constantName) {
ObjectModelOperation operation = addOperation(
- resultClass,
+ output,
"set" + attrNameCapitalized,
"void",
ObjectModelModifier.PUBLIC
@@ -366,9 +382,9 @@
);
}
- protected void createGetChildMethod(ObjectModelClass resultClass) {
+ protected void createGetChildMethod(ObjectModelClass output) {
ObjectModelOperation getChild = addOperation(
- resultClass,
+ output,
"getChild", "<T> T",
ObjectModelModifier.PROTECTED
);
@@ -390,59 +406,59 @@
);
}
- protected void addInterfaces(ObjectModelClass clazz,
- ObjectModelClass resultClass) {
+ protected void addInterfaces(ObjectModelClass input,
+ ObjectModelClass output) {
// Add interfaces from inputModel
- for (ObjectModelInterface parentInterface : clazz.getInterfaces()) {
- addInterface(resultClass, parentInterface.getQualifiedName());
+ for (ObjectModelInterface parentInterface : input.getInterfaces()) {
+ addInterface(output, parentInterface.getQualifiedName());
}
}
- protected void addSuperClass(ObjectModelClass clazz,
- ObjectModelClass resultClass,
- ObjectModelClass resultClassImpl) {
+ protected void addSuperClass(ObjectModelClass input,
+ ObjectModelClass output,
+ ObjectModelClass outputImpl) {
// Set superclass
- if (resultClassImpl == null) {
- Iterator<ObjectModelClass> j = clazz.getSuperclasses().iterator();
+ if (outputImpl == null) {
+ Iterator<ObjectModelClass> j = input.getSuperclasses().iterator();
if (j.hasNext()) {
ObjectModelClass p = j.next();
// We want to set the inheritance to the implementation class of the father
// Ex for model : A -> B (a inherits B) we want : A -> BImpl -> B
String qualifiedName = p.getQualifiedName() + "Impl";
- setSuperClass(resultClass, qualifiedName);
+ setSuperClass(output, qualifiedName);
}
}
}
- protected ObjectModelClass generateImpl(ObjectModelClass clazz,
- ObjectModelClass resultClass) {
+ protected ObjectModelClass generateImpl(ObjectModelClass input,
+ ObjectModelClass output) {
// Get name for Impl class
- String implQualifiedName = clazz.getQualifiedName() + "Impl";
+ String implQualifiedName = input.getQualifiedName() + "Impl";
// Does bean own operations ?
- boolean hasOperations = !clazz.getAllOtherOperations(true).isEmpty() ||
- !clazz.getOperations().isEmpty();
+ boolean hasOperations = !input.getAllOtherOperations(true).isEmpty() ||
+ !input.getOperations().isEmpty();
String resourceName = "/" + implQualifiedName.replaceAll("\\.", "/");
- ObjectModelClass resultClassImpl=null;
+ ObjectModelClass resultClassImpl = null;
// Generate the Impl class if not already exist in classpath and no operation is defined in model
- if(getClass().getResource(resourceName) == null && !hasOperations) {
- String implName = clazz.getName() + "Impl";
- resultClassImpl = createClass(implName, clazz.getPackageName());
+ if (getClass().getResource(resourceName) == null && !hasOperations) {
+ String implName = input.getName() + "Impl";
+ resultClassImpl = createClass(implName, input.getPackageName());
// set the abstract resulClass as the resultClassImpl super class
- setSuperClass(resultClassImpl, resultClass.getQualifiedName());
+ setSuperClass(resultClassImpl, output.getQualifiedName());
}
return resultClassImpl;
}
- protected boolean canGenerate(ObjectModelClass clazz) {
- return clazz.hasStereotype(JavaGeneratorUtil.STEREOTYPE_BEAN);
+ protected boolean canGenerate(ObjectModelClass input) {
+ return input.hasStereotype(JavaGeneratorUtil.STEREOTYPE_BEAN);
}
- protected void createPropertyChangeSupport(ObjectModelClass resultClass) {
+ protected void createPropertyChangeSupport(ObjectModelClass output) {
- addAttribute(resultClass,
+ addAttribute(output,
"pcs",
PropertyChangeSupport.class,
"new PropertyChangeSupport(this);",
@@ -453,8 +469,8 @@
// Add PropertyListener
ObjectModelOperation operation;
-
- operation = addOperation(resultClass,
+
+ operation = addOperation(output,
"addPropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -466,7 +482,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"addPropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -479,7 +495,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"removePropertyChangeListener",
"void",
ObjectModelModifier.PUBLIC
@@ -491,10 +507,10 @@
}*/
);
- operation= addOperation(resultClass,
- "removePropertyChangeListener",
- "void",
- ObjectModelModifier.PUBLIC
+ operation = addOperation(output,
+ "removePropertyChangeListener",
+ "void",
+ ObjectModelModifier.PUBLIC
);
addParameter(operation, String.class, "propertyName");
addParameter(operation, PropertyChangeListener.class, "listener");
@@ -504,7 +520,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"firePropertyChange",
"void",
ObjectModelModifier.PROTECTED
@@ -518,7 +534,7 @@
}*/
);
- operation = addOperation(resultClass,
+ operation = addOperation(output,
"firePropertyChange",
"void",
ObjectModelModifier.PROTECTED
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -29,14 +29,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.models.object.ObjectModelAttribute;
-import org.nuiton.eugene.models.object.ObjectModelClassifier;
-import org.nuiton.eugene.models.object.ObjectModelDependency;
-import org.nuiton.eugene.models.object.ObjectModelEnumeration;
import org.nuiton.eugene.models.object.ObjectModelInterface;
import org.nuiton.eugene.models.object.ObjectModelModifier;
-import java.util.Collection;
import java.util.Iterator;
+import java.util.Set;
/*{generator option: parentheses = false}*/
/*{generator option: writeString = +}*/
@@ -56,89 +53,77 @@
LogFactory.getLog(JavaInterfaceTransformer.class);
@Override
- public void transformFromInterface(ObjectModelInterface interfacez) {
+ public void transformFromInterface(ObjectModelInterface input) {
// Can only generate an interface with no stereotypes
- if (!interfacez.getStereotypes().isEmpty()) {
+ if (!input.getStereotypes().isEmpty()) {
return;
}
- ObjectModelInterface resultInterface = createInterface(
- interfacez.getName(), interfacez.getPackageName());
+ ObjectModelInterface output = createInterface(input.getName(),
+ input.getPackageName());
if (log.isDebugEnabled()) {
log.debug("generate interface " +
- resultInterface.getQualifiedName());
+ output.getQualifiedName());
}
// extend interface
Iterator<ObjectModelInterface> it =
- interfacez.getInterfaces().iterator();
+ input.getInterfaces().iterator();
if (it.hasNext()) {
ObjectModelInterface extend = it.next();
- addInterface(resultInterface, extend.getQualifiedName());
+ addInterface(output, extend.getQualifiedName());
}
- // constant attributes
- for (ObjectModelAttribute attr : interfacez.getAttributes()) {
- // only static attribut with value
- if (!attr.isStatic() &&
- StringUtils.isNotEmpty(attr.getDefaultValue())) {
- addConstant(resultInterface,
- attr.getName(),
- attr.getType(),
- attr.getDefaultValue(),
- ObjectModelModifier.PUBLIC
- );
+ String prefix = getConstantPrefix(input, "");
+
+ if (StringUtils.isEmpty(prefix)) {
+
+ // no specific prefix, so no prefix
+ if (log.isWarnEnabled()) {
+ log.warn("[" + input.getName() + "] Will generate constants with NO prefix, not a good idea...");
}
}
+ setConstantPrefix(prefix);
- // constant attributes via 'constants' enumeration dependency
- // literals of enumeration will be values and constant name will be generated
- ObjectModelDependency constantsDependencies =
- interfacez.getDependency(JavaGeneratorUtil.DEPENDENCIES_CONSTANTS);
- if (constantsDependencies != null) {
+ Set<String> constants = addConstantsFromDependency(input, output);
- ObjectModelClassifier classifier = constantsDependencies.getSupplier();
+ // constant attributes
+ for (ObjectModelAttribute attr : input.getAttributes()) {
- if (classifier instanceof ObjectModelEnumeration) {
+ if (attr.isStatic() ||
+ !StringUtils.isNotEmpty(attr.getDefaultValue())) {
- ObjectModelEnumeration constants =
- (ObjectModelEnumeration) classifier;
+ // only static attribut with value
+ continue;
+ }
- // look if there is a constant_prefix tag value
- String prefix = JavaGeneratorUtil.findTagValue(
- JavaGeneratorUtil.TAG_CONSTANT_PREFIX,
- constants,
- null
- );
+ String constantName = attr.getName();
- if (prefix==null) {
- prefix = "";
- }
+ if (constants.contains(constantName)) {
- // add all literal of dependency as constants in interface
- Collection<String> literals = constants.getLiterals();
- for (String literal : literals) {
-
- String constantName = prefix + getConstantName(literal);
-
- addConstant(resultInterface,
- constantName,
- String.class,
- "\"" + literal + "\"",
- ObjectModelModifier.PUBLIC
- );
- }
+ // already generated
+ continue;
}
+
+ // add constant
+ addConstant(output,
+ constantName,
+ attr.getType(),
+ attr.getDefaultValue(),
+ ObjectModelModifier.PUBLIC
+ );
}
+
// interface operations
JavaGeneratorUtil.cloneOperations(this,
- interfacez.getOperations(),
- resultInterface,
+ input.getOperations(),
+ output,
false
);
}
+
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-11 12:19:39 UTC (rev 902)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java 2010-05-13 17:15:46 UTC (rev 903)
@@ -25,11 +25,29 @@
package org.nuiton.eugene.java;
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.eugene.Template;
-import org.nuiton.eugene.models.object.*;
+import org.nuiton.eugene.models.object.ObjectModel;
+import org.nuiton.eugene.models.object.ObjectModelAttribute;
+import org.nuiton.eugene.models.object.ObjectModelClass;
+import org.nuiton.eugene.models.object.ObjectModelClassifier;
+import org.nuiton.eugene.models.object.ObjectModelDependency;
+import org.nuiton.eugene.models.object.ObjectModelElement;
+import org.nuiton.eugene.models.object.ObjectModelEnumeration;
+import org.nuiton.eugene.models.object.ObjectModelInterface;
+import org.nuiton.eugene.models.object.ObjectModelModifier;
+import org.nuiton.eugene.models.object.ObjectModelOperation;
+import org.nuiton.eugene.models.object.ObjectModelParameter;
+import org.nuiton.eugene.models.object.ObjectModelTransformer;
+import org.nuiton.eugene.models.object.ObjectModelType;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* Created: 28 oct. 2009
*
@@ -39,11 +57,12 @@
private static final Log log =
LogFactory.getLog(ObjectModelTransformerToJava.class);
- /**
- * internal builder
- */
+
+ /** internal builder */
protected JavaBuilder builder;
+ private String constantPrefix;
+
@Override
protected Template<ObjectModel> initOutputTemplate() {
// by default, use a stupid java generator
@@ -56,6 +75,7 @@
log.debug("inputModelName = " + getModel().getName());
}
builder = new JavaBuilder(getModel().getName());
+ setConstantPrefix("");
return builder.getModel();
}
@@ -139,9 +159,27 @@
}
public String getConstantName(String propertyName) {
- return builder.getConstantName(propertyName);
+ return getConstantPrefix() + builder.getConstantName(propertyName);
}
+ protected String getConstantPrefix(ObjectModelClassifier input,
+ String defaultPrefix) {
+
+ // look if there is a constant_prefix tag value
+ String prefix = JavaGeneratorUtil.findTagValue(
+ JavaGeneratorUtil.TAG_CONSTANT_PREFIX,
+ input,
+ getModel()
+ );
+
+ if (StringUtils.isEmpty(prefix)) {
+
+ // no specific prefix, use default prefix
+ prefix = defaultPrefix;
+ }
+ return prefix.trim();
+ }
+
protected ObjectModelAttribute addConstant(
ObjectModelClassifier classifier,
String name,
@@ -277,4 +315,71 @@
ObjectModelModifier... modifiers) {
return builder.addBlock(classifier, modifiers);
}
+
+ /**
+ * Search in {@code input} model, for a enumeration dependency named
+ * {@link JavaGeneratorUtil#DEPENDENCIES_CONSTANTS}.
+ * <p/>
+ * If found, add all literals on {@code output} model as constants.
+ * <p/>
+ * You can add a {@link JavaGeneratorUtil#TAG_CONSTANT_PREFIX} to your
+ * enumeration to prefix constant names.
+ *
+ * @param input the input model
+ * @param output the ouput model
+ * @return the set of constants names generated
+ */
+ protected Set<String> addConstantsFromDependency(ObjectModelClassifier input,
+ ObjectModelClassifier output) {
+
+ // constant attributes via 'constants' enumeration dependency
+ // literals of enumeration will be values and constant name will be generated
+ ObjectModelDependency constantsDependencies =
+ input.getDependency(JavaGeneratorUtil.DEPENDENCIES_CONSTANTS);
+
+ if (constantsDependencies == null) {
+
+ // no dependency found
+ return Collections.emptySet();
+ }
+
+ ObjectModelClassifier classifier = constantsDependencies.getSupplier();
+
+ if (!(classifier instanceof ObjectModelEnumeration)) {
+
+ // do not have an enumeration
+ return Collections.emptySet();
+ }
+
+ Set<String> constantNames = new HashSet<String>();
+ ObjectModelEnumeration constants =
+ (ObjectModelEnumeration) classifier;
+
+ // add all literal of dependency as constants in interface
+ Collection<String> literals = constants.getLiterals();
+ for (String literal : literals) {
+
+ // always use builder method to obtain constant name to not use a
+ // possible altered by transformer
+ String constantName = getConstantName(literal);
+
+ addConstant(output,
+ constantName,
+ String.class,
+ "\"" + literal + "\"",
+ ObjectModelModifier.PUBLIC
+ );
+ constantNames.add(constantName);
+ }
+
+ return constantNames;
+ }
+
+ public String getConstantPrefix() {
+ return constantPrefix;
+ }
+
+ public void setConstantPrefix(String constantPrefix) {
+ this.constantPrefix = constantPrefix;
+ }
}
1
0
Author: tchemit
Date: 2010-05-11 14:19:39 +0200 (Tue, 11 May 2010)
New Revision: 902
Url: http://nuiton.org/repositories/revision/eugene/902
Log:
Evolution #599: Use nuiton-utils 1.3
Evolution #600: Use log4j 1.2.16
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-10 10:00:26 UTC (rev 901)
+++ trunk/pom.xml 2010-05-11 12:19:39 UTC (rev 902)
@@ -241,7 +241,7 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.14</version>
+ <version>1.2.16</version>
<scope>test</scope>
</dependency>
@@ -270,7 +270,7 @@
<ant.version>1.7.1</ant.version>
<processor.version>1.0.3</processor.version>
- <nuiton-utils.version>1.2.2</nuiton-utils.version>
+ <nuiton-utils.version>1.3</nuiton-utils.version>
<!--Multilanguage maven-site -->
<locales>en,fr</locales>
1
0