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
August 2009
- 4 participants
- 37 discussions
Author: tchemit
Date: 2009-08-24 21:15:31 +0200 (Mon, 24 Aug 2009)
New Revision: 615
Modified:
trunk/maven-eugene-plugin/src/site/rst/index.rst
Log:
update doc
Modified: trunk/maven-eugene-plugin/src/site/rst/index.rst
===================================================================
(Binary files differ)
1
0
Author: tchemit
Date: 2009-08-24 21:15:14 +0200 (Mon, 24 Aug 2009)
New Revision: 614
Modified:
trunk/eugene/src/test/resources/log4j.properties
Log:
change log level
Modified: trunk/eugene/src/test/resources/log4j.properties
===================================================================
--- trunk/eugene/src/test/resources/log4j.properties 2009-08-24 19:05:16 UTC (rev 613)
+++ trunk/eugene/src/test/resources/log4j.properties 2009-08-24 19:15:14 UTC (rev 614)
@@ -7,5 +7,5 @@
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n
# package level
-log4j.logger.org.nuiton.eugene=DEBUG
+log4j.logger.org.nuiton.eugene=INFO
log4j.logger.org.apache.commons.digester=INFO
\ No newline at end of file
1
0
Author: tchemit
Date: 2009-08-24 21:05:16 +0200 (Mon, 24 Aug 2009)
New Revision: 613
Modified:
trunk/maven-eugene-plugin/src/site/rst/index.rst
Log:
update doc
Modified: trunk/maven-eugene-plugin/src/site/rst/index.rst
===================================================================
(Binary files differ)
1
0
r612 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 24 Aug '09
by tchemit@users.nuiton.org 24 Aug '09
24 Aug '09
Author: tchemit
Date: 2009-08-24 21:04:29 +0200 (Mon, 24 Aug 2009)
New Revision: 612
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java
Log:
use PluginHelper.getIncludedFiles to botain the model files to treate
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 2009-08-24 19:02:00 UTC (rev 611)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-08-24 19:04:29 UTC (rev 612)
@@ -34,8 +34,8 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
-import org.nuiton.util.FileUtil;
import org.nuiton.eugene.Generator;
+import org.nuiton.util.PluginHelper;
/**
* Effectue toutes les générations et copie les fichiers générés
@@ -143,6 +143,11 @@
getLog().warn("no model to treate");
return;
}
+ if (verbose) {
+ for (File m : modelFiles) {
+ getLog().info("will treate model file : " + m);
+ }
+ }
List<String> packages = getPackagesToGenerate();
@@ -200,34 +205,54 @@
return generatedPackagesAsList;
}
+ /**
+ * Recuperation de la liste des fichiers de modele a traite.
+ *
+ * @return la liste des modeles a utiliser
+ */
protected File[] getModelFiles() {
- // get file to generate
- // TODO improve this loop
- // TODO too strange code
- //TODO TC-20090820 use a DirectoryScanner which understand ant-like regex patterns :)
List<File> modelFiles = new ArrayList<File>();
String[] includePatterns = includes.split(",");
+
for (File srcDirGen : generateResources.getInputs()) {
- for (String includePattern : includePatterns) {
- includePattern = includePattern.trim();
- boolean recursive = false;
- if (includePattern.startsWith("**/")) {
- recursive = true;
- includePattern = includePattern.substring(3);
- }
- // transform pattern in java regex
- includePattern = includePattern.replaceAll("\\.", "\\\\.");
- includePattern = includePattern.replaceAll("\\*", ".*");
- // log java regex
- if (verbose) {
- getLog().info("Search for " + includePattern + " in " + srcDirGen.getAbsolutePath());
- }
- List<File> currentFiles = FileUtil.find(srcDirGen, includePattern, recursive);
- modelFiles.addAll(currentFiles);
+
+ if (verbose) {
+ getLog().info("Search for " + Arrays.toString(includePatterns) + " in " + srcDirGen.getAbsolutePath());
}
+ List<File> currentFiles = PluginHelper.getIncludedFiles(srcDirGen, includePatterns, null);
+ modelFiles.addAll(currentFiles);
}
return modelFiles.toArray(new File[modelFiles.size()]);
}
+
+// protected File[] getModelFiles() {
+// // get file to generate
+// // TODO improve this loop
+// // TODO too strange code
+// //TODO TC-20090820 use a DirectoryScanner which understand ant-like regex patterns :)
+// List<File> modelFiles = new ArrayList<File>();
+// String[] includePatterns = includes.split(",");
+// for (File srcDirGen : generateResources.getInputs()) {
+// for (String includePattern : includePatterns) {
+// includePattern = includePattern.trim();
+// boolean recursive = false;
+// if (includePattern.startsWith("**/")) {
+// recursive = true;
+// includePattern = includePattern.substring(3);
+// }
+// // transform pattern in java regex
+// includePattern = includePattern.replaceAll("\\.", "\\\\.");
+// includePattern = includePattern.replaceAll("\\*", ".*");
+// // log java regex
+// if (verbose) {
+// getLog().info("Search for " + includePattern + " in " + srcDirGen.getAbsolutePath());
+// }
+// List<File> currentFiles = FileUtil.find(srcDirGen, includePattern, recursive);
+// modelFiles.addAll(currentFiles);
+// }
+// }
+// return modelFiles.toArray(new File[modelFiles.size()]);
+// }
protected List<Generator> getGenerators(List<String> generatedPackagesAsList) throws MojoFailureException, MojoExecutionException {
// init generators
1
0
r611 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 24 Aug '09
by tchemit@users.nuiton.org 24 Aug '09
24 Aug '09
Author: tchemit
Date: 2009-08-24 21:02:00 +0200 (Mon, 24 Aug 2009)
New Revision: 611
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java
Log:
change log level
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-08-24 19:00:58 UTC (rev 610)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-08-24 19:02:00 UTC (rev 611)
@@ -391,9 +391,9 @@
loader = new URLClassLoader(urls.toArray(new URL[urls.size()]),
loader);
}
- if (verbose) {
+ if (getLog().isDebugEnabled()) {
for (URL u : urls) {
- getLog().info("cp entry: " + u);
+ getLog().debug("cp entry: " + u);
}
}
return loader;
1
0
r610 - trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin
by tchemit@users.nuiton.org 24 Aug '09
by tchemit@users.nuiton.org 24 Aug '09
24 Aug '09
Author: tchemit
Date: 2009-08-24 21:00:58 +0200 (Mon, 24 Aug 2009)
New Revision: 610
Modified:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java
Log:
normalize parameter with prefix eugene.
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java 2009-08-23 17:06:17 UTC (rev 609)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java 2009-08-24 19:00:58 UTC (rev 610)
@@ -39,14 +39,14 @@
/**
* Ecrase les fichiers générés.
*
- * @parameter expression="${generator.overwrite}" default-value="false"
+ * @parameter expression="${eugene.overwrite}" default-value="false"
* @since 0.50
*/
protected boolean overwrite;
/**
* Pour activer le mode verbeux.
*
- * @parameter expression="${generator.verbose}" default-value="${maven.verbose}"
+ * @parameter expression="${eugene.verbose}" default-value="${maven.verbose}"
* @since 1.0.0-rc-8
*/
protected boolean verbose;
1
0
Author: tchemit
Date: 2009-08-23 19:06:17 +0200 (Sun, 23 Aug 2009)
New Revision: 609
Modified:
trunk/maven-eugene-plugin/pom.xml
trunk/pom.xml
Log:
remove ant deps
Modified: trunk/maven-eugene-plugin/pom.xml
===================================================================
--- trunk/maven-eugene-plugin/pom.xml 2009-08-23 17:04:57 UTC (rev 608)
+++ trunk/maven-eugene-plugin/pom.xml 2009-08-23 17:06:17 UTC (rev 609)
@@ -27,7 +27,7 @@
<!-- TODO TC-20090823 remove ant deps -->
- <dependency>
+ <!--dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
</dependency>
@@ -35,7 +35,7 @@
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-trax</artifactId>
- </dependency>
+ </dependency-->
<dependency>
<groupId>org.apache.maven</groupId>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-08-23 17:04:57 UTC (rev 608)
+++ trunk/pom.xml 2009-08-23 17:06:17 UTC (rev 609)
@@ -112,7 +112,7 @@
</dependency>
<!-- TODO TC-20090823 remove ant deps -->
- <dependency>
+ <!--dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>${ant.version}</version>
@@ -124,7 +124,7 @@
<artifactId>ant-trax</artifactId>
<version>${ant.version}</version>
<scope>runtime</scope>
- </dependency>
+ </dependency-->
<dependency>
<groupId>org.apache.maven</groupId>
1
0
r608 - in trunk: . eugene eugene/src/site maven-eugene-plugin maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin maven-eugene-plugin/src/site src/site
by tchemit@users.nuiton.org 23 Aug '09
by tchemit@users.nuiton.org 23 Aug '09
23 Aug '09
Author: tchemit
Date: 2009-08-23 19:04:57 +0200 (Sun, 23 Aug 2009)
New Revision: 608
Added:
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java
Modified:
trunk/eugene/pom.xml
trunk/eugene/src/site/site.xml
trunk/maven-eugene-plugin/pom.xml
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.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/Xmi2Model.java
trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Zargo2Xmi.java
trunk/maven-eugene-plugin/src/site/site.xml
trunk/pom.xml
trunk/src/site/site.xml
Log:
bump versions + clean sites, prepare refactor of plugins parameters
Modified: trunk/eugene/pom.xml
===================================================================
--- trunk/eugene/pom.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/eugene/pom.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -138,7 +138,7 @@
<developer>
<name>Arnaud Thimel</name>
- <id>thimel</id>
+ <id>athimel</id>
<email>thimel(a)codelutin.com</email>
<organization>CodeLutin</organization>
<timezone>+2</timezone>
@@ -149,7 +149,7 @@
<developer>
<name>Julien Ruchaud</name>
- <id>ruchaud</id>
+ <id>jruchaud</id>
<email>ruchaud(a)codelutin.com</email>
<organization>CodeLutin</organization>
<timezone>+2</timezone>
@@ -160,7 +160,7 @@
<developer>
<name>Eric Chatellier</name>
- <id>chatellier</id>
+ <id>echatellier</id>
<email>chatellier(a)codelutin.com</email>
<organization>CodeLutin</organization>
<timezone>+2</timezone>
@@ -179,6 +179,17 @@
<role>Développeur</role>
</roles>
</developer>
+
+ <developer>
+ <name>Tony Chemit</name>
+ <id>tchemit</id>
+ <email>chemit(a)codelutin.com</email>
+ <organization>CodeLutin</organization>
+ <timezone>+2</timezone>
+ <roles>
+ <role>Développeur</role>
+ </roles>
+ </developer>
</developers>
<profiles>
Modified: trunk/eugene/src/site/site.xml
===================================================================
--- trunk/eugene/src/site/site.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/eugene/src/site/site.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -1,22 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="${project.name}">
- <publishDate format="dd/MM/yyyy"/>
-
- <skin>
- <groupId>org.nuiton</groupId>
- <artifactId>maven-nuiton-skin</artifactId>
- <version>1.0.0</version>
- </skin>
-
<bannerLeft>
<name>${project.name}</name>
</bannerLeft>
-
- <bannerRight>
- <src>http://www.codelutin.com/images/lutinorange-codelutin.png</src>
- <href>${project.organization.url}</href>
- </bannerRight>
<body>
@@ -31,11 +18,11 @@
</menu>
<menu name="Téléchargement">
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
name="Librairie (jar)"/>
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
name="Javadoc (jar)"/>
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
name="Sources (jar)"/>
</menu>
Modified: trunk/maven-eugene-plugin/pom.xml
===================================================================
--- trunk/maven-eugene-plugin/pom.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/pom.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -25,6 +25,8 @@
<scope>compile</scope>
</dependency>
+
+ <!-- TODO TC-20090823 remove ant deps -->
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
@@ -45,6 +47,16 @@
<artifactId>maven-project</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>maven-helper-plugin</artifactId>
+ </dependency>
+
</dependencies>
<!-- ************************************************************* -->
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/CopyVersionFiles.java 2009-08-23 17:04:57 UTC (rev 608)
@@ -16,22 +16,19 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*/
package org.nuiton.eugene.plugin;
+import org.nuiton.util.PluginIOContext;
import java.io.File;
import java.io.FileFilter;
-import org.apache.maven.plugin.AbstractMojo;
+import java.io.IOException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
-import org.apache.tools.ant.BuildLogger;
-import org.apache.tools.ant.NoBannerLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Copy;
-import org.apache.tools.ant.types.FileSet;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
+import org.nuiton.util.PluginHelper;
/**
* Copy a file set to a versionned directory structure.
@@ -44,9 +41,39 @@
*
* @goal copyVersionFiles
*/
-public class CopyVersionFiles extends AbstractMojo implements FileFilter {
+public class CopyVersionFiles extends EugeneAbstractMojo implements FileFilter {
/**
+ * Les entrées sorties du plugin.
+ *
+ * <p/>
+ *
+ * En entrée on demande des répertoires où chercher les fichiers objectmodel a convertir.
+ * <p/>
+ * En sortie on demande le répertoire ou generer les classes java.
+ * <p/>
+ * Par défaut on a les valeurs suivantes :
+ * </p>
+ * <code>
+ * in : target/generated-sources/models
+ * </p>
+ * out : target/generated-sources/java
+ * </code>
+ * </p>
+ *
+ * Note: si {@link #testPhase} est activée, les valeurs par défaut sont :
+ * </p>
+ * <code>
+ * in : target/generated-sources/test-models
+ * </p>
+ * out : target/generated-sources/test-java
+ * </code>
+ *
+ * @parameter
+ * @since 1.0.0-rc-8
+ */
+ protected PluginIOContext copyVersionResources;
+ /**
* Fichiers objectModel a lire pour determiner la version.
*
* @parameter expression="${generator.includes}" default-value="*.*model"
@@ -54,20 +81,6 @@
*/
protected String includes;
/**
- * Répertoire source où sont situer les modeles.
- *
- * @parameter expression="${generator.srcGenDest}" alias="srcGenDest" default-value="target/generated-sources/models"
- * @since 0.51
- */
- protected File srcDirGen;
- /**
- * Répertoire sources des fichiers générés à copier.
- *
- * @parameter expression="${generator.destDirGen}" default-value="target/generated-sources/java"
- * @since 0.51
- */
- protected File destDirGen;
- /**
* Le dossier de destination des fichiers copiés.
*
* Doit contenir un nom de modele : <tt>%MODELNAME%</tt>
@@ -86,13 +99,6 @@
*/
protected String copyVersionFiles;
/**
- * Ecrase les fichiers deja presents ?
- *
- * @parameter expression="${generator.copyOverwrite}" default-value="false"
- * @since 0.51
- */
- protected boolean copyOverwrite = false;
- /**
* Version trouvee dans les fichiers objectModel.
*
* Type string, parce que elle peut avoir la forme "1.3.2" par exemple
@@ -117,6 +123,8 @@
// get log
logger = getLog();
+ super.execute();
+
// find version and model name
findVersionAndModelName();
@@ -129,15 +137,32 @@
String destDir = copyVersionDir.replace("%MODELNAME%", modelNameFound) + File.separator + versionFound;
fVersionDir = new File(destDir);
+ if (overwrite || !checkExistence()) {
+ try {
+ PluginHelper.copyFiles(copyVersionResources.getOutput(), fVersionDir, new String[]{copyVersionFiles}, null, true);
+ } catch (IOException ex) {
+ throw new MojoExecutionException("could not copy some files for reason " + ex.getMessage(), ex);
+ }
+ }
+ }
- boolean doCopy = true;
+ @Override
+ protected PluginIOContext getResources() {
+ return copyVersionResources;
+ }
- if (!copyOverwrite) {
- doCopy = !checkExistence();
- }
- if (doCopy) {
- copyAction();
- }
+ @Override
+ protected PluginIOContext initResources() {
+
+ File defaultIn = getFile("target", "generated-sources", "models");
+ File defaultOut = getFile("target", "generated-sources", "java");
+
+ File defaultTestIn = getFile("target", "generated-sources", "test-models");
+ File defaultTestOut = getFile("target", "generated-sources", "test-java");
+
+ copyVersionResources = initResources(defaultIn, defaultOut, defaultTestIn, defaultTestOut);
+
+ return copyVersionResources;
}
/**
@@ -158,46 +183,48 @@
return exist;
}
+// /**
+// * Copy hibernate files.
+// *
+// * Using ant task
+// * @throws IOException
+// */
+// protected void copyAction() throws IOException {
+ // creation du repertoire
+// fVersionDir.mkdirs();
+// destDirGen.mkdirs();
+//
+// /* Création d'un projet ant */
+// Project p = createProject();
+//
+// /* Création de la tâche ant Copy */
+// Copy copy = createCopyTask(p);
+//
+// /* Configuration */
+// copy.setTodir(fVersionDir);
+// copy.setOverwrite(true);
+//
+// FileSet fileSet = new FileSet();
+//// fileSet.setDir(destDirGen);
+// fileSet.setDir(copyVersionResources.getOutput());
+// fileSet.setIncludes(copyVersionFiles);
+// copy.addFileset(fileSet);
+//
+// /* Execution */
+// copy.execute();
+// }
/**
- * Copy hibernate files.
- *
- * Using ant task
- */
- protected void copyAction() {
- // creation du repertoire
- fVersionDir.mkdirs();
- destDirGen.mkdirs();
-
- /* Création d'un projet ant */
- Project project = createProject();
-
- /* Création de la tâche ant Copy */
- Copy copy = new Copy();
- copy.setProject(project);
- copy.setTaskName("Copy ressources");
-
- /* Configuration */
- copy.setTodir(fVersionDir);
- copy.setOverwrite(true);
-
- FileSet fileSet = new FileSet();
- fileSet.setDir(destDirGen);
- fileSet.setIncludes(copyVersionFiles);
- copy.addFileset(fileSet);
-
- /* Execution */
- copy.execute();
- }
-
- /**
* Find version and name in object model files
*/
protected void findVersionAndModelName() {
- File srcModelDir = srcDirGen;
+ //TODO TC-20090820 : iterate on all inputs
+ File srcModelDir = copyVersionResources.getInputs()[0];
File[] modelFiles = srcModelDir.listFiles(this);
+ //FIXME TC-20090820 this is a bit funny iterate and keep the last model values ?
+ // should iterate and do the treatment for each model
for (File modelFile : modelFiles) {
SAXReader saxR = new SAXReader();
Document document;
@@ -218,21 +245,6 @@
}
}
- protected Project createProject() {
- /* Création d'un projet ant */
- Project project = new Project();
-
- BuildLogger log = new NoBannerLogger();
- log.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO);
- log.setOutputPrintStream(System.out);
- log.setErrorPrintStream(System.err);
-
- project.init();
- project.getBaseDir();
- project.addBuildListener(log);
- return project;
- }
-
@Override
public boolean accept(File arg0) {
String fullPath = arg0.getAbsolutePath();
Added: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java (rev 0)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java 2009-08-23 17:04:57 UTC (rev 608)
@@ -0,0 +1,173 @@
+package org.nuiton.eugene.plugin;
+
+import org.nuiton.util.PluginIOContext;
+import java.io.File;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+
+/**
+ * La classe de base pour definir des mojos dans eugene.
+ *
+ * @author chemit
+ * @since 1.0.0-rc-8
+ */
+public abstract class EugeneAbstractMojo extends AbstractMojo {
+
+ /**
+ * Maven project.
+ *
+ * @description Dépendance du projet.
+ * @parameter default-value="${project}"
+ * @readonly
+ * @since 1.0.0-rc-8
+ */
+ protected MavenProject project;
+ /**
+ * @description le settings (pour obtenir le mode offline)
+ * @parameter default-value="${settings}"
+ * @readonly
+ * @since 1.0.0-rc-4
+ */
+ protected Settings settings;
+ /**
+ * Ecrase les fichiers générés.
+ *
+ * @parameter expression="${generator.overwrite}" default-value="false"
+ * @since 0.50
+ */
+ protected boolean overwrite;
+ /**
+ * Pour activer le mode verbeux.
+ *
+ * @parameter expression="${generator.verbose}" default-value="${maven.verbose}"
+ * @since 1.0.0-rc-8
+ */
+ protected boolean verbose;
+ /**
+ * Encoding to be used for generation of files.
+ *
+ * @parameter expression="${eugene.encoding}" default-value="${project.build.sourceEncoding}"
+ * @since 0.60
+ */
+ 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.
+ *
+ * @parameter expression="${eugene.testPhase}" default-value="false"
+ * @since 0.64
+ */
+ protected boolean testPhase;
+
+ /**
+ *
+ * Note : l'objet peut etre {@null} si la configuration ne definit
+ * pas la propriété associées dans l'implentation.
+ * <p/>
+ *
+ * Dans tous les cas, une fois la methode {@link #initResources()} appele,
+ * l'objet devrait ne plus être null!
+ *
+ * @return l'io du plugin ou {@code null} si non initialisé
+ *
+ */
+ protected abstract PluginIOContext getResources();
+
+ /**
+ * Initialiser les io du plugins.
+ *
+ * @return l'io intialisé (avec les valeurs par défaut, là où rien n'a
+ * été renseigné).
+ */
+ protected abstract PluginIOContext initResources();
+
+ @Override
+ public void execute() throws MojoExecutionException, MojoFailureException {
+
+ PluginIOContext p = initResources();
+
+ if ((p.getInputs() == null || p.getInputs().length == 0)) {
+ throw new MojoExecutionException("no input defined");
+ }
+ if (p.getOutput() == null) {
+ throw new MojoExecutionException("no output defined");
+ }
+
+ p.getOutput().mkdirs();
+ }
+
+ protected PluginIOContext initResources(File defaultIn, File defaultOut, File defaultTestIn, File defaultTestOut) {
+
+ PluginIOContext resources = getResources();
+ if (resources == null) {
+ resources = new PluginIOContext();
+ }
+
+ // adding default inputs only if not consumed
+ if (resources.getInputs() == null) {
+ if (testPhase) {
+ resources.setInput(defaultTestIn);
+ } else {
+ resources.setInput(defaultIn);
+ }
+ getLog().info(" using default in : " + Arrays.asList(resources.getInputs()));
+ } else {
+ getLog().info(" in : " + Arrays.asList(resources.getInputs()));
+ }
+
+ if (resources.getOutput() == null) {
+ if (testPhase) {
+ resources.setOutput(defaultTestOut);
+ } else {
+ resources.setOutput(defaultOut);
+ }
+ getLog().info(" using default out : " + resources.getOutput());
+ } else {
+ getLog().info(" out : " + resources.getOutput());
+ }
+
+ return resources;
+ }
+
+ /**
+ * Recupere le fichier donnée à partir de son chemin relatif sur le basedir
+ * du projet maven.
+ *
+ * @param paths les paths pour atteindre le fichier ou le répertoire
+ *
+ * @return le fichier de la destination
+ */
+ protected File getFile(String... paths) {
+ File result = project.getBasedir();
+ for (String path : paths) {
+ result = new File(result, path);
+ }
+ return result;
+ }
+
+ /**
+ * Ajout dans la liste des urls et l'ensemble des urls sous forme de string, l'url
+ * donné.
+ *
+ * Note : l'utilisation de l'ensemble des urls sous forme de String est utile
+ * sinon la comparaison entre url requiere des appels reseaux et cela n'est
+ * pas acceptable dans notre cas (mode offline ne marcherait plus...).
+ *
+ * @param url l'url a rajouter dans la liste
+ * @param urls la liste des urls
+ * @param urlsAsString l'ensemble des urls sous forme de String
+ */
+ protected void addUrl(URL url, List<URL> urls, Set<String> urlsAsString) {
+ String toString = url.toString();
+ if (!urlsAsString.contains(toString)) {
+ urlsAsString.add(toString);
+ urls.add(url);
+ }
+ }
+}
Property changes on: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL
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 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugenePlugin.java 2009-08-23 17:04:57 UTC (rev 608)
@@ -16,19 +16,21 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*/
package org.nuiton.eugene.plugin;
+import org.nuiton.util.PluginIOContext;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Map.Entry;
+import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
@@ -48,31 +50,38 @@
* @goal generate
* @projectRequired true
*/
-public class EugenePlugin extends AbstractMojo {
+public class EugenePlugin extends EugeneAbstractMojo {
/**
- * Maven project.
- *
- * @description Dépendance du projet.
- * @parameter default-value="${project}"
- * @readonly
- * @since 0.50
- */
- protected MavenProject project;
- /**
- * Répertoire source.
+ * Les entrées sorties du plugin.
*
- * @parameter expression="${eugene.srcGenDest}" alias="srcGenDest" default-value="target/generated-sources/models"
- * @since 0.50
- */
- protected File srcDirGen;
- /**
- * Répertoire cible
+ * <p/>
*
- * @parameter expression="${eugene.destDirGen}" default-value="target/generated-sources/java"
- * @since 0.50
+ * En entrée on demande des répertoires où chercher les fichiers objectmodel a convertir.
+ * <p/>
+ * En sortie on demande le répertoire ou generer les classes java.
+ * <p/>
+ * Par défaut on a les valeurs suivantes :
+ * </p>
+ * <code>
+ * in : target/generated-sources/models
+ * </p>
+ * out : target/generated-sources/java
+ * </code>
+ * </p>
+ *
+ * Note: si {@link #testPhase} est activée, les valeurs par défaut sont :
+ * </p>
+ * <code>
+ * in : target/generated-sources/test-models
+ * </p>
+ * out : target/generated-sources/test-java
+ * </code>
+ *
+ * @parameter
+ * @since 1.0.0-rc-8
*/
- protected File destDirGen;
+ protected PluginIOContext generateResources;
/**
* Templates à utiliser, séparés par des virgules.
*
@@ -103,13 +112,6 @@
*/
protected String defaultPackage;
/**
- * Ecrase les fichiers générés
- *
- * @parameter expression="${eugene.overwrite}" default-value="false"
- * @since 0.50
- */
- private boolean overwrite = false;
- /**
* An extra directory to be added to the classpath.
*
* @parameter expression="${eugene.extraClassPathDirectory}"
@@ -117,27 +119,6 @@
*/
protected File extraClassPathDirectory;
/**
- * Encoding to be used for generation of files.
- *
- * @parameter expression="${eugene.encoding}" default-value="${project.build.sourceEncoding}"
- * @since 0.60
- */
- 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.
- *
- * @parameter expression="${eugene.testPhase}" default-value="false"
- * @since 0.64
- */
- protected boolean testPhase;
- /**
- * Drapeau pour augmenter la verbosité des logs.
- *
- * @parameter expression="${eugene.verbose}" default-value="${maven.verbose}"
- * @since 1.0.0-rc-4
- */
- protected boolean verbose;
- /**
* List of packages to generate (comma separated).
*
* If the parameter is not filled, will generate all packages.
@@ -150,45 +131,123 @@
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- getLog().info("Generating model using : ");
- getLog().info(" using template : " + templates);
+ getLog().info("Generating java sources from models");
+ getLog().info(" includes : " + includes);
+ getLog().info(" using template : " + templates);
getLog().info(" using defaultPackage : " + defaultPackage);
- getLog().info(" generating from : " + srcDirGen + File.separator + includes);
- getLog().info(" generating to : " + destDirGen);
+ super.execute();
- List<String> generatedPackagesAsList = new ArrayList<String>();
+ File[] modelFiles = getModelFiles();
+ if (modelFiles.length == 0) {
+ // can skip
+ getLog().warn("no model to treate");
+ return;
+ }
+
+ List<String> packages = getPackagesToGenerate();
+
+ if (packages == null) {
+ getLog().info(" generating all packages");
+ } else {
+ getLog().info(" generating only for packages " + packages);
+ }
+
+ List<Generator> generators = getGenerators(packages);
+
+ for (Generator generator : generators) {
+ getLog().info("Apply " + generator.getClass().getSimpleName() + " generator");
+
+ //TC-20090829 fix when loading more than one model together...
+ generator.generate(modelFiles, generateResources.getOutput());
+// for (File modelFile : modelFiles) {
+// getLog().debug(" on " + modelFile.getAbsolutePath());
+//
+// // generation
+// generator.generate(modelFile, destDirGen);
+// }
+ }
+
+ fixCompileSourceRoots();
+ }
+
+ @Override
+ protected PluginIOContext getResources() {
+ return generateResources;
+ }
+
+ @Override
+ protected PluginIOContext initResources() {
+
+ File defaultIn = getFile("target", "generated-sources", "models");
+ File defaultOut = getFile("target", "generated-sources", "java");
+
+ File defaultTestIn = getFile("target", "generated-sources", "test-models");
+ File defaultTestOut = getFile("target", "generated-sources", "test-java");
+
+ generateResources = initResources(defaultIn, defaultOut, defaultTestIn, defaultTestOut);
+
+ return generateResources;
+ }
+
+ protected List<String> getPackagesToGenerate() {
+ List<String> generatedPackagesAsList = null;
if (generatedPackages != null && !generatedPackages.isEmpty()) {
+ generatedPackagesAsList = new ArrayList<String>();
for (String s : generatedPackages.split(",")) {
generatedPackagesAsList.add(s);
}
- getLog().info(" generating packages : " + generatedPackagesAsList);
- } else {
- getLog().info(" generating packages : all packages");
}
+ return generatedPackagesAsList;
+ }
+ protected File[] getModelFiles() {
+ // get file to generate
+ // TODO improve this loop
+ // TODO too strange code
+ //TODO TC-20090820 use a DirectoryScanner which understand ant-like regex patterns :)
+ List<File> modelFiles = new ArrayList<File>();
+ String[] includePatterns = includes.split(",");
+ for (File srcDirGen : generateResources.getInputs()) {
+ for (String includePattern : includePatterns) {
+ includePattern = includePattern.trim();
+ boolean recursive = false;
+ if (includePattern.startsWith("**/")) {
+ recursive = true;
+ includePattern = includePattern.substring(3);
+ }
+ // transform pattern in java regex
+ includePattern = includePattern.replaceAll("\\.", "\\\\.");
+ includePattern = includePattern.replaceAll("\\*", ".*");
+ // log java regex
+ if (verbose) {
+ getLog().info("Search for " + includePattern + " in " + srcDirGen.getAbsolutePath());
+ }
+ List<File> currentFiles = FileUtil.find(srcDirGen, includePattern, recursive);
+ modelFiles.addAll(currentFiles);
+ }
+ }
+ return modelFiles.toArray(new File[modelFiles.size()]);
+ }
+
+ protected List<Generator> getGenerators(List<String> generatedPackagesAsList) throws MojoFailureException, MojoExecutionException {
// init generators
Properties generatorProperties = new Properties();
generatorProperties.setProperty("defaultPackage", defaultPackage);
-
List<Generator> generators = new ArrayList<Generator>();
String[] templatesNames = templates.split(",");
ClassLoader fixedClassLoader = fixClassLoader();
for (String templateName : templatesNames) {
-
// remove trailing spaces
templateName = templateName.trim();
-
try {
Generator generator = (Generator) Class.forName(templateName,
true, fixedClassLoader).newInstance();
-
// configuration
generator.setExcludeTemplates(Arrays.asList(excludeTemplates));
generator.setProperties(generatorProperties);
generator.setOverwrite(overwrite);
generator.setEncoding(encoding);
generator.setGeneratedPackages(generatedPackagesAsList);
-
generators.add(generator);
} catch (InstantiationException e) {
throw new MojoFailureException("Can't instantiate generator : " + templateName, e);
@@ -198,73 +257,10 @@
throw new MojoFailureException("Can't found generator : " + templateName, e);
}
}
-
- generate(generators);
-
- fixCompileSourceRoots();
+ return generators;
}
/**
- * Execute generators on source directory.
- *
- * @param generators generators
- */
- protected void generate(List<Generator> generators) {
-
- // get file to generate
- // TODO improve this loop
- // TODO too strange code
- List<File> modelFiles = new ArrayList<File>();
- String[] includePatterns = includes.split(",");
- for (String includePattern : includePatterns) {
- includePattern = includePattern.trim();
- boolean recursive = false;
- if (includePattern.startsWith("**/")) {
- recursive = true;
- includePattern = includePattern.substring(3);
- }
-
- // transform pattern in java regex
- includePattern = includePattern.replaceAll("\\.", "\\\\.");
- includePattern = includePattern.replaceAll("\\*", ".*");
-
- // log java regex
- getLog().debug("Search for " + includePattern + " in " + srcDirGen.getAbsolutePath());
-
- List<File> currentFiles = FileUtil.find(srcDirGen, includePattern,
- recursive);
- modelFiles.addAll(currentFiles);
- }
-
- generateModels(generators, modelFiles);
- }
-
- /**
- * Apply generators on models files.
- *
- * @param generators generators
- * @param modelFiles
- */
- protected void generateModels(List<Generator> generators,
- List<File> modelFiles) {
-
- for (Generator generator : generators) {
- getLog().info("Apply " + generator.getClass().getSimpleName() + " generator");
-
- //TC-20090829 fix when loading more than one model together...
- generator.generate(modelFiles.toArray(new File[modelFiles.size()]), destDirGen);
-
-// for (File modelFile : modelFiles) {
-// getLog().debug(" on " + modelFile.getAbsolutePath());
-//
-// // generation
-// generator.generate(modelFile, destDirGen);
-// }
- }
-
- }
-
- /**
* permet d'ajout le répertoire de génération des fichiers java dans les répertoires
* de compilation du projet Maven.
*/
@@ -276,6 +272,8 @@
return;
}
+ File destDirGen = generateResources.getOutput();
+
if (testPhase) {
if (!project.getTestCompileSourceRoots().contains(
destDirGen.getPath())) {
@@ -311,8 +309,9 @@
* @throws MojoExecutionException if any pb
*/
protected ClassLoader fixClassLoader() throws MojoExecutionException {
+ List<URL> urls = new ArrayList<URL>();
+ Set<String> urlsAsString = new HashSet<String>();
try {
- List<URL> urls = new ArrayList<URL>();
ClassLoader loader = null;
if (extraClassPathDirectory != null) {
if (verbose) {
@@ -329,7 +328,7 @@
getLog().info("Add project reference in generator's classLoader : '" + relatedProject.getArtifact() + "'");
}
//TODO il faudrait peut-etre aussi ajouter les dependances ?
- urls.add(relatedProject.getArtifact().getFile().toURI().toURL());
+ addUrl(relatedProject.getArtifact().getFile().toURI().toURL(), urls, urlsAsString);
}
}
if (!project.getArtifacts().isEmpty()) {
@@ -340,23 +339,22 @@
for (Object o : project.getArtifacts()) {
Artifact a = (Artifact) o;
if (!a.getScope().equals("provided")) {
- urls.add(a.getFile().toURI().toURL());
+ addUrl(a.getFile().toURI().toURL(), urls, urlsAsString);
}
}
- // using the strict class loader with only resolved artifacts
- //loader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
}
- //if (loader == null) {
// we ask to add the directory in classloader
loader = getClass().getClassLoader();
if (!urls.isEmpty()) {
loader = new URLClassLoader(urls.toArray(new URL[urls.size()]),
loader);
}
- //}
return loader;
} catch (MalformedURLException e) {
throw new MojoExecutionException(e.getMessage());
+ } finally {
+ urls.clear();
+ urlsAsString.clear();
}
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-08-23 17:04:57 UTC (rev 608)
@@ -16,9 +16,10 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*/
package org.nuiton.eugene.plugin;
+import org.nuiton.util.PluginIOContext;
import java.io.File;
-import java.io.FileFilter;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.lang.reflect.Constructor;
import java.net.MalformedURLException;
import java.net.URL;
@@ -36,18 +37,12 @@
import javax.xml.transform.stream.StreamSource;
import org.apache.maven.artifact.Artifact;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-import org.apache.tools.ant.BuildLogger;
-import org.apache.tools.ant.NoBannerLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Copy;
-import org.apache.tools.ant.types.FileSet;
import org.nuiton.util.FasterCachedResourceResolver;
import org.nuiton.util.FileUtil;
+import org.nuiton.util.PluginHelper;
import org.nuiton.util.Resource;
import org.nuiton.util.ResourceResolver;
import org.nuiton.util.StringUtil;
@@ -64,30 +59,41 @@
* Last update: $Date$
* by : $Author$
*/
-public abstract class Xmi2Model extends AbstractMojo {
+public abstract class Xmi2Model extends EugeneAbstractMojo {
/**
- * Répertoire source des fichiers XMI
+ * Les entrées sorties du plugin.
+ *
+ * <p/>
+ *
+ * En entrée on demande des répertoires où chercher les fichiers xmi a convertir.
+ * <p/>
+ * En sortie on demande le répertoire ou extraire les xmi et copier les resources.
+ * <p/>
+ * Par défaut on a les valeurs suivantes :
+ * </p>
+ * <code>
+ * in : target/generated-sources/xmi
+ * </p>
+ * out : target/generated-sources/models
+ * </code>
+ *
+ * </p>
*
- * @parameter alias="srcXmiDest" expression="${generator.srcDirXmi}" default-value="target/generated-sources/xmi"
- * @since 0.50
- */
- protected File srcDirXmi;
- /**
- * Des noms de fichiers xmi qu'on veut pas traiter...
- *
- * @parameter expression="${generator.excludeXmis}"
+ * Note: si {@link #testPhase} est activée, les valeurs par défaut sont :
+ * </p>
+ * <code>
+ * in : target/generated-sources/xmi
+ * </p>
+ * out : target/generated-sources/test-models
+ * </p>
+ * </code>
+ *
+ * @parameter
* @since 1.0.0-rc-8
*/
- protected String excludeXmis;
+ protected PluginIOContext xmiResources;
/**
- * Répertoire cible des fichiers générés
- *
- * @parameter alias="srcGenDest" expression="${generator.srcGenDest}" default-value="target/generated-sources/models"
- * @since 0.50
- */
- protected File destDirModel;
- /**
* Nom du paquetage pour les fichiers générés
*
* @parameter expression="${generator.fullPackagePath}" default-value="${project.groupId}.${project.artifactId}"
@@ -102,15 +108,8 @@
*/
protected String extractedPackages;
/**
- * Ecrase les fichiers générés
+ * Liste des types de modeles acceptés séparés par des vigules.
*
- * @parameter expression="${generator.overwrite}" default-value="false"
- * @since 0.50
- */
- private boolean overwrite = false;
- /**
- * Liste des types de model acceptés séparés par des vigules.
- *
* @parameter expression="${generator.acceptedXmiTypes}" default-value="xmi,uml"
* @since 1.0.0-rc-4
*/
@@ -123,95 +122,100 @@
*/
protected String resolver;
/**
- * Maven project.
- *
- * @description Dépendance du projet.
- * @parameter default-value="${project}"
- * @readonly
- * @since 1.0.0-rc-4
- */
- protected MavenProject project;
- /**
* An extra directory to be added to the classpath.
*
* @parameter expression="${eugene.extraClassPathDirectory}"
* @since 1.0.0-rc-4
*/
protected File extraClassPathDirectory;
+
/**
- * Drapeau pour augmenter la verbosité des logs.
+ * Get extension.
*
- * @parameter expression="${eugene.verbose}" default-value="${maven.verbose}"
- * @since 1.0.0-rc-4
+ * @return the extension
*/
- private boolean verbose;
+ protected abstract String getExtension();
+
/**
- * @description le settings (pour obtenir le mode offline)
- * @parameter default-value="${settings}"
- * @readonly
- * @since 1.0.0-rc-4
+ * Get style sheet.
+ *
+ * @param model the model file used to determine the stylesheet to use
+ * @return the stylesheet name
*/
- private Settings settings;
+ protected abstract String getStyleSheet(File model);
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
long t0 = System.nanoTime();
+ super.execute();
try {
- actionXsl();
+
+ getLog().info("Processing XSL tranformation");
+ getLog().info(" with fullPackagePath : " + fullPackagePath);
+ getLog().info(" with extractedPackages : " + extractedPackages);
+ getLog().info(" with acceptedXmiTypes : " + acceptedXmiTypes);
+ getLog().info(" with resolver : " + resolver);
+
+ TransformerFactory factory = TransformerFactory.newInstance();
+
+ ClassLoader fixedClassLoader = fixClassLoader();
+ String[] includes = getSuffixPattern("*");
+
+ String[] acceptedTypesAsArray = getAcceptedTypesAsArray();
+
+ for (File dir : xmiResources.getInputs()) {
+ // recuperation des fichiers a traiter
+ List<File> files = PluginHelper.getIncludedFiles(dir, includes, null);
+
+ // lancement des traitements xsl sur les fichiers trouvés
+ // dans le repertoire
+ actionXsl(dir, files, factory, fixedClassLoader, acceptedTypesAsArray);
+ }
} finally {
getLog().info("xsl done in " + StringUtil.convertTime(System.nanoTime() - t0));
}
- actionCopy();
- }
- protected void actionXsl() throws MojoExecutionException {
+ getLog().info("Copy resources files");
- getLog().info("Processing XSL tranformation");
- getLog().info(" processing from " + srcDirXmi);
- getLog().info(" processing to " + destDirModel);
- getLog().info(" with fullPackagePath = " + fullPackagePath);
- getLog().info(" with extractedPackages = " + extractedPackages);
- getLog().info(" with acceptedXmiTypes = " + acceptedXmiTypes);
- getLog().info(" with resolver = " + resolver);
+ try {
+ String[] excludes = getSuffixPattern("**/*");
+ PluginHelper.copyFiles(xmiResources, null, excludes, overwrite);
+ } catch (IOException ex) {
+ throw new MojoExecutionException("could not copy some files for reason " + ex.getMessage(), ex);
+ }
+ }
- final String[] acceptedSuffixes = getAcceptedTypesAsArray();
- List<File> files = FileUtil.getFilteredElements(srcDirXmi,
- new FileFilter() {
+ @Override
+ protected PluginIOContext getResources() {
+ return xmiResources;
+ }
- @Override
- public boolean accept(File pathname) {
- if (pathname == null) {
- return false;
- }
- for (String suffix : acceptedSuffixes) {
- if (pathname.getName().endsWith(suffix)) {
- return true;
- }
- }
- return false;
- }
- //TC-20090820 : using recursive for xmi
-// }, false);
- }, true);
+ @Override
+ protected PluginIOContext initResources() {
- destDirModel.mkdirs();
+ File defaultIn = getFile("target", "generated-sources", "xmi");
+ File defaultOut = getFile("target", "generated-sources", "models");
+ File defaultTestIn = getFile("target", "generated-sources", "test-xmi");
+ File defaultTestOut = getFile("target", "generated-sources", "test-models");
- TransformerFactory factory = TransformerFactory.newInstance();
+ xmiResources = initResources(defaultIn, defaultOut, defaultTestIn, defaultTestOut);
- ClassLoader fixedClassLoader = fixClassLoader();
+ return xmiResources;
+ }
- List<String> excludeXmisAsList = new ArrayList<String>();
- if (excludeXmis != null && !excludeXmis.isEmpty()) {
- for (String s : excludeXmis.split(",")) {
- excludeXmisAsList.add(s);
- }
+ protected String[] getSuffixPattern(String prefix) {
+ String[] acceptedSuffixes = getAcceptedTypesAsArray();
+ int max = acceptedSuffixes.length;
+ final String[] patterns = new String[max];
+ for (int i = 0; i < max; i++) {
+ patterns[i] = prefix + acceptedSuffixes[i];
}
+ return patterns;
+ }
+
+ protected void actionXsl(File dir, List<File> files, TransformerFactory factory, ClassLoader fixedClassLoader, String[] acceptedSuffixes) throws MojoExecutionException {
for (File file : files) {
try {
- if (excludeXmisAsList.contains(file.getName())) {
- getLog().info("skip excluded xmi : "+file);
- continue;
- }
if (getLog().isDebugEnabled()) {
getLog().debug("treate file : " + file);
}
@@ -220,15 +224,14 @@
String styleSheet = getStyleSheet(file);
URL xsl = Resource.getURL(styleSheet);
- // Prepare output file
//TC-20090820 : using recursive for xmi
// File result = new File(destDirModel, FileUtil.basename(file,
// acceptedSuffixes).concat(".").concat(getExtension()));
String filename = FileUtil.basename(file, acceptedSuffixes).concat(".").concat(getExtension());
- String relatifPath = file.getParentFile().getAbsolutePath().substring(srcDirXmi.getAbsolutePath().length());
- File dstDir = destDirModel;
+ String relatifPath = file.getParentFile().getAbsolutePath().substring(dir.getAbsolutePath().length());
+ File dstDir = xmiResources.getOutput();
if (!relatifPath.isEmpty()) {
- dstDir = new File(destDirModel, relatifPath);
+ dstDir = new File(dstDir, relatifPath);
dstDir.mkdirs();
}
File result = new File(dstDir, filename);
@@ -277,66 +280,6 @@
return result;
}
- protected void actionCopy() {
- /* Création d'un projet ant */
- Project p = createProject();
-
- /* Création de la tâche ant Copy */
- Copy copy = new Copy();
- copy.setProject(p);
- copy.setTaskName("Copy ressources");
-
- /* Configuration */
- copy.setTodir(destDirModel);
- copy.setOverwrite(overwrite);
-
- FileSet fileSet = new FileSet();
- fileSet.setProject(p);
- fileSet.setDir(srcDirXmi);
- String excludedTypes = "";
- for (String type : getAcceptedTypesAsArray()) {
- if (!excludedTypes.isEmpty()) {
- excludedTypes += ",";
- }
- excludedTypes += "**/*" + type;
- }
- fileSet.setExcludes(excludedTypes);
- copy.addFileset(fileSet);
-
- /* Execution */
- copy.execute();
- }
-
- protected Project createProject() {
- /* Création d'un projet ant */
- Project p = new Project();
-
- BuildLogger logger = new NoBannerLogger();
- logger.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO);
- logger.setOutputPrintStream(System.out);
- logger.setErrorPrintStream(System.err);
-
- p.init();
- p.getBaseDir();
- p.addBuildListener(logger);
- return p;
- }
-
- /**
- * Get extension.
- *
- * @return the extension
- */
- protected abstract String getExtension();
-
- /**
- * Get style sheet.
- *
- * @param model the model file used to determine the stylesheet to use
- * @return the stylesheet name
- */
- protected abstract String getStyleSheet(File model);
-
protected URIResolver getUriResolver(File model, ClassLoader cl) {
URIResolver result = null;
@@ -390,9 +333,9 @@
* @throws MojoExecutionException if any pb
*/
protected ClassLoader fixClassLoader() throws MojoExecutionException {
+ Set<String> urlsAsString = new HashSet<String>();
+ List<URL> urls = new ArrayList<URL>();
try {
- List<URL> urls = new ArrayList<URL>();
- Set<String> urlsAsString = new HashSet<String>();
ClassLoader loader = null;
if (extraClassPathDirectory != null) {
if (verbose) {
@@ -423,10 +366,7 @@
addUrl(a.getFile().toURI().toURL(), urls, urlsAsString);
}
}
- // using the strict class loader with only resolved artifacts
- //loader = new URLClassLoader(urls.toArray(new URL[urls.size()]));
}
- //if (loader == null) {
// we ask to add the directory in classloader
loader = getClass().getClassLoader();
if (getLog().isDebugEnabled()) {
@@ -438,7 +378,7 @@
for (URL u : ((URLClassLoader) loader).getURLs()) {
addUrl(u, urls, urlsAsString);
if (getLog().isDebugEnabled()) {
- getLog().info("original cp entry: " + u);
+ getLog().debug("original cp entry: " + u);
}
}
// et on force l'utilisation du classloader parent
@@ -456,31 +396,13 @@
getLog().info("cp entry: " + u);
}
}
- //}
return loader;
} catch (MalformedURLException e) {
throw new MojoExecutionException(e.getMessage());
+ } finally {
+ urls.clear();
+ urlsAsString.clear();
}
}
-
- /**
- * Ajout dans la liste des urls et l'ensemble des urls sous forme de string, l'url
- * donné.
- *
- * Note : l'utilisation de l'ensemble des urls sous forme de String est utile
- * sinon la comparaison entre url requiere des appels reseaux et cela n'est
- * pas acceptable dans notre cas (mode offline ne marcherait plus...).
- *
- * @param url l'url a rajouter dans la liste
- * @param urls la liste des urls
- * @param urlsAsString l'ensemble des urls sous forme de String
- */
- protected void addUrl(URL url, List<URL> urls, Set<String> urlsAsString) {
- String toString = url.toString();
- if (!urlsAsString.contains(toString)) {
- urlsAsString.add(toString);
- urls.add(url);
- }
- }
}
Modified: trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Zargo2Xmi.java
===================================================================
--- trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Zargo2Xmi.java 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Zargo2Xmi.java 2009-08-23 17:04:57 UTC (rev 608)
@@ -14,21 +14,15 @@
* 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>. ##%*/
-
package org.nuiton.eugene.plugin;
+import java.io.IOException;
+import org.nuiton.util.PluginIOContext;
import java.io.File;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.apache.tools.ant.BuildLogger;
-import org.apache.tools.ant.NoBannerLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Copy;
-import org.apache.tools.ant.taskdefs.Expand;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
+import org.nuiton.util.PluginHelper;
/**
* Extract zipped XMI files from zargo archive.
@@ -41,114 +35,78 @@
*
* @goal zargo2xmi
*/
-public class Zargo2Xmi extends AbstractMojo {
+public class Zargo2Xmi extends EugeneAbstractMojo {
+ public static final String[] ZARGO_FILE_FILTER = new String[]{"**/*.zargo", "**/*.zuml"};
+ public static final String[] XMI_FILE_FILTER = new String[]{"*.xmi", "**/*.xmi"};
/**
- * Répertoire source des fichier Zargo.
+ * Les entrées-sorties du plugin.
+ *
+ * <p/>
*
- * @parameter expression="${generator.srcDirZuml}" default-value="src/main/xmi" alias="srcDirUml"
- * @since 0.50
+ * En entrée on demande des répertoires où chercher les fichiers zargo a convertir.
+ * <p/>
+ * En sortie on demande le répertoire ou extraire les xmi et copier les resources.
+ * <p/>
+ * Par défaut on a les valeurs suivantes :
+ * </p>
+ * <code>
+ * in : src/main/xmi
+ * </p>
+ * out : target/generated-sources/xmi
+ * </code>
+ * </p>
+ *
+ * Note: si {@link #testPhase} est activée, les valeurs par défaut sont :
+ * </p>
+ * <code>
+ * in : src/test/xmi
+ * </p>
+ * out : target/generated-sources/test-xmi
+ * </code>
+ *
+ * @parameter
+ * @since 1.0.0-rc-8
*/
- protected File srcDirZuml;
+ protected PluginIOContext zargoResources;
- /**
- * Répertoire cible des fichiers extraits.
- *
- * @parameter alias="srcXmiDest" expression="${generator.destDirXmi}" default-value="target/generated-sources/xmi"
- * @since 0.50
- */
- protected File destDirXmi;
-
- /**
- * Ecrase les fichiers générés.
- *
- * @parameter expression="${generator.overwrite}" default-value="false"
- * @since 0.50
- */
- protected boolean overwrite = false;
-
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- getLog().info("Extract zipped XMI files from zargo archive");
- getLog().info(" extracting from " + srcDirZuml + " to " + destDirXmi);
+ getLog().info("Extract zipped XMI files from zargo archive and copy resources");
+ super.execute();
- actionZip();
- actionCopy();
- }
+ getLog().info("Extract zipped XMI files");
+ try {
+ PluginHelper.expandFiles(zargoResources, ZARGO_FILE_FILTER, null, XMI_FILE_FILTER, overwrite);
+ } catch (IOException ex) {
+ throw new MojoExecutionException("could not expand files for reason " + ex.getMessage(), ex);
+ }
- protected void actionZip() {
+ getLog().info("Copy resources");
+ try {
+ PluginHelper.copyFiles(zargoResources, null, ZARGO_FILE_FILTER, overwrite);
+ } catch (IOException ex) {
+ throw new MojoExecutionException("could not copy some files for reason " + ex.getMessage(), ex);
+ }
- getLog().debug("Executing unzip action in **/*.zargo,**/*.zuml");
+ }
- /* Création d'un projet ant */
- Project project = createProject();
-
- /* Création de la tâche */
- Expand zip = new Expand();
- zip.setProject(project);
- zip.setTaskName("Extract");
-
- /* Configuration */
- zip.setOverwrite(overwrite);
-
- /* Source */
- FileSet fileSet = new FileSet();
- fileSet.setProject(project); // resolve NullPointerException
- fileSet.setDir(srcDirZuml);
- fileSet.setIncludes("**/*.zargo,**/*.zuml");
- zip.addFileset(fileSet);
-
- /* Target */
- destDirXmi.mkdirs();
- zip.setDest(destDirXmi);
-
- PatternSet patternSet = new PatternSet();
- patternSet.setIncludes("*.xmi,**/*.xmi");
- zip.addPatternset(patternSet);
-
- /* Execution */
- zip.execute();
+ @Override
+ protected PluginIOContext getResources() {
+ return zargoResources;
}
- protected void actionCopy() {
+ @Override
+ protected PluginIOContext initResources() {
- getLog().debug("Executing copy from " + srcDirZuml + " to " + destDirXmi);
- getLog().debug(" excluded resources : **/*.zargo,**/*.zuml");
+ File defaultIn = getFile("src", "main", "xmi");
+ File defaultOut = getFile("target", "generated-sources", "xmi");
- /* Création d'un projet ant */
- Project project = createProject();
+ File defaultTestIn = getFile("src", "test", "xmi");
+ File defaultTestOut = getFile("target", "generated-sources", "test-xmi");
- /* Création de la tâche ant Copy */
- Copy copy = new Copy();
- copy.setProject(project);
- copy.setTaskName("Copy ressources");
+ zargoResources = initResources(defaultIn, defaultOut, defaultTestIn, defaultTestOut);
- /* Configuration */
- copy.setTodir(destDirXmi);
- copy.setOverwrite(overwrite);
-
- FileSet fileSet = new FileSet();
- fileSet.setDir(srcDirZuml);
- fileSet.setExcludes("**/*.zargo,**/*.zuml");
- copy.addFileset(fileSet);
-
- /* Execution */
- copy.execute();
+ return zargoResources;
}
-
- protected Project createProject() {
- /* Création d'un projet ant */
- Project project = new Project();
-
- BuildLogger logger = new NoBannerLogger();
- logger.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO);
- logger.setOutputPrintStream(System.out);
- logger.setErrorPrintStream(System.err);
-
- project.init();
- project.getBaseDir();
- project.addBuildListener(logger);
- return project;
- }
-
}
Modified: trunk/maven-eugene-plugin/src/site/site.xml
===================================================================
--- trunk/maven-eugene-plugin/src/site/site.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/maven-eugene-plugin/src/site/site.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -1,23 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="${project.name}">
- <publishDate format="dd/MM/yyyy"/>
-
- <skin>
- <groupId>org.nuiton</groupId>
- <artifactId>maven-nuiton-skin</artifactId>
- <version>1.0.0-alpha-1</version>
- </skin>
-
<bannerLeft>
<name>${project.name}</name>
</bannerLeft>
- <bannerRight>
- <src>http://www.codelutin.com/images/lutinorange-codelutin.png</src>
- <href>${project.organization.url}</href>
- </bannerRight>
-
<body>
<links>
<item name="Eugene" href="../eugene"/>
@@ -42,11 +29,11 @@
</menu>
<menu name="Téléchargement">
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
name="Librairie (jar)"/>
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
name="Javadoc (jar)"/>
- <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
+ <item href="${repository.home.url}/org/nuiton/eugene/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
name="Sources (jar)"/>
</menu>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/pom.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
+ <modelVersion>4.0.0</modelVersion>
<!-- ************************************************************* -->
<!-- *** POM Relationships *************************************** -->
@@ -9,7 +9,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom</artifactId>
- <version>1.0.0-rc-5-SNAPSHOT</version>
+ <version>1.0.0</version>
</parent>
<artifactId>eugene</artifactId>
@@ -27,7 +27,7 @@
<dependency>
<groupId>org.nuiton</groupId>
<artifactId>nuiton-utils</artifactId>
- <version>1.1.0-rc-9-SNAPSHOT</version>
+ <version>1.1.0</version>
<scope>compile</scope>
</dependency>
@@ -106,6 +106,13 @@
</dependency>
<dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>maven-helper-plugin</artifactId>
+ <version>${helper.version}</version>
+ </dependency>
+
+ <!-- TODO TC-20090823 remove ant deps -->
+ <dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>${ant.version}</version>
@@ -134,6 +141,12 @@
</dependency>
<dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.5.15</version>
+ </dependency>
+
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
@@ -161,6 +174,7 @@
<!-- pour un muli module on doit fixer le projectId -->
<projectId>eugene</projectId>
+ <!-- TODO TC-20090823 remove ant deps -->
<ant.version>1.7.1</ant.version>
</properties>
@@ -169,6 +183,23 @@
<defaultGoal>install</defaultGoal>
+ <pluginManagement>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.nuiton.jrst</groupId>
+ <artifactId>doxia-module-jrst</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+
+ </plugins>
+ </pluginManagement>
+
</build>
<!-- ************************************************************* -->
Modified: trunk/src/site/site.xml
===================================================================
--- trunk/src/site/site.xml 2009-08-22 15:03:00 UTC (rev 607)
+++ trunk/src/site/site.xml 2009-08-23 17:04:57 UTC (rev 608)
@@ -1,24 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="${project.name}">
- <publishDate format="dd/MM/yyyy"/>
-
- <skin>
- <groupId>org.nuiton</groupId>
- <artifactId>maven-nuiton-skin</artifactId>
- <version>1.0.0</version>
- </skin>
-
<bannerLeft>
<name>${project.name}</name>
<href>/</href>
</bannerLeft>
- <bannerRight>
- <src>http://www.codelutin.com/images/lutinorange-codelutin.png</src>
- <href>${project.organization.url}</href>
- </bannerRight>
-
<poweredBy>
<logo href="http://maven.apache.org" name="Maven" img="${project.url}/images/logos/maven-feather.png"/>
<logo href="http://jrst.labs.libre-entreprise.org" name="JRst" img="${project.url}/images/jrst-logo.png"/>
@@ -26,11 +13,7 @@
</poweredBy>
<body>
- <!--links>
- <item name="[fr" href="${project.url}/index.html"/>
- <item name="en]" href="${project.url}/en/index.html"/>
- </links-->
-
+
<breadcrumbs>
<item name="${project.name}" href="${project.url}" />
</breadcrumbs>
1
0
r607 - in trunk/eugene/src/main/java/org/nuiton/eugene: . models/object/xml
by tchemit@users.nuiton.org 22 Aug '09
by tchemit@users.nuiton.org 22 Aug '09
22 Aug '09
Author: tchemit
Date: 2009-08-22 17:03:00 +0200 (Sat, 22 Aug 2009)
New Revision: 607
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/ChildGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java
trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
trunk/eugene/src/main/java/org/nuiton/eugene/UIModelGenerator.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java
Log:
improve code : javadoc, override annotation, format,...
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ChildGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ChildGenerator.java 2009-08-21 13:23:16 UTC (rev 606)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ChildGenerator.java 2009-08-22 15:03:00 UTC (rev 607)
@@ -53,13 +53,13 @@
@Override
public boolean getOverwrite() {
- boolean overwrite;
+ boolean result;
if (parent == null) {
- overwrite = super.getOverwrite();
+ result = super.getOverwrite();
} else {
- overwrite = parent.getOverwrite();
+ result = parent.getOverwrite();
}
- return overwrite;
+ return result;
}
@Override
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-08-21 13:23:16 UTC (rev 606)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/Generator.java 2009-08-22 15:03:00 UTC (rev 607)
@@ -28,8 +28,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.eugene.models.object.ObjectModelClassifier;
-import org.nuiton.eugene.models.object.ObjectModelElement;
/**
* Generator.
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-08-21 13:23:16 UTC (rev 606)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-08-22 15:03:00 UTC (rev 607)
@@ -17,11 +17,12 @@
*/
public class ImportsManager {
- private static Set<String> primitiveTypes;
- static {
- primitiveTypes = new HashSet<String>();
+ private static Set<String> primitiveTypes;
- primitiveTypes.add("byte");
+ static {
+ primitiveTypes = new HashSet<String>();
+
+ primitiveTypes.add("byte");
primitiveTypes.add("Byte");
primitiveTypes.add("short");
primitiveTypes.add("Short");
@@ -43,115 +44,114 @@
primitiveTypes.add("void");
- }
+ }
+ private Map<String, String> imports = new HashMap<String, String>();
+ private State state = State.FILLING;
- 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 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.
+ /**
+ * 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 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 || "".equals(fqn.trim())||
- (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);
- }
+ // 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);
- }
- }
- }
+ /**
+ * 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;
- }
+ /**
+ * 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;
- }
+ /**
+ * 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
- }
+ private enum State {
+
+ FILLING, READING
+ }
}
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/UIModelGenerator.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/UIModelGenerator.java 2009-08-21 13:23:16 UTC (rev 606)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/UIModelGenerator.java 2009-08-22 15:03:00 UTC (rev 607)
@@ -137,6 +137,7 @@
* Par defaut cette methode retourne le getName du model. Si l'on souhaite
* utiliser la methode generateFromUIModel il vaut mieux surcharger cette
* methode
+ * @param model le modele a utiliser
* @return le getName du model
*/
public String getFilenameForUIModel(UIModel model) {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-08-21 13:23:16 UTC (rev 606)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassImpl.java 2009-08-22 15:03:00 UTC (rev 607)
@@ -80,10 +80,11 @@
this.abstractz = abstractz;
}
+ @Override
public Collection<ObjectModelClass> getSuperclasses() {
if (superclasses == null) {
superclasses = new ArrayList<ObjectModelClass>();
- Iterator i = superclassesRefs.iterator();
+ Iterator<?> i = superclassesRefs.iterator();
while (i.hasNext()) {
ObjectModelImplSuperClassRef ref = (ObjectModelImplSuperClassRef) i
.next();
@@ -103,6 +104,7 @@
* @return the discriminator for the given superclass as a String if it
* exists, null otherwise.
*/
+ @Override
public String getDiscriminator(ObjectModelClass superclass) {
return superclassesDiscriminators.get(superclass);
}
@@ -115,10 +117,11 @@
* @return a Collection containing all known direct specialized
* ObjectModelClass for this class.
*/
+ @Override
public Collection<ObjectModelClass> getSpecialisations() {
if (specialisations == null) {
specialisations = new ArrayList<ObjectModelClass>();
- for (Iterator i = objectModelImpl.getClasses().iterator(); i
+ for (Iterator<?> i = objectModelImpl.getClasses().iterator(); i
.hasNext();) {
ObjectModelClass candidateClass = (ObjectModelClass) i.next();
if (candidateClass.getSuperclasses().contains(this)) {
@@ -138,6 +141,7 @@
* @return a Collection containing all known specialized ObjectModelClass
* for this class for the specified discriminator.
*/
+ @Override
public Collection<ObjectModelClass> getSpecialisations(String discriminator) {
List<ObjectModelClass> discriminatedSpecialisations = new ArrayList<ObjectModelClass>();
for (Iterator<ObjectModelClass> i = getSpecialisations().iterator(); i
@@ -150,6 +154,7 @@
return discriminatedSpecialisations;
}
+ @Override
public Collection<ObjectModelAttribute> getAttributes() {
return orderedAttributes;
}
@@ -161,9 +166,9 @@
* @return the ObjectModelAttribute of the found attribute, or null if the
* class contains no attribute for this name.
*/
+ @Override
public ObjectModelAttribute getAttribute(String attributeName) {
- return (attributeName == null ? null
- : (ObjectModelAttribute) attributes.get(attributeName));
+ return (attributeName == null ? null : attributes.get(attributeName));
}
/**
@@ -171,10 +176,12 @@
*
* @return a boolean indicating whether this class is abstract or not.
*/
+ @Override
public boolean isAbstract() {
return abstractz;
}
+ @Override
public Collection<ObjectModelOperation> getAllOtherOperations(
boolean distinct) {
Collection<ObjectModelOperation> result = getAllInterfaceOperations(distinct);
@@ -182,6 +189,7 @@
return result;
}
+ @Override
public Collection<ObjectModelOperation> getAllSuperclassOperations(
boolean distinct) {
Collection<ObjectModelOperation> result = null;
@@ -196,7 +204,7 @@
protected Collection<ObjectModelOperation> getAllSuperclassOperations(
Collection<ObjectModelOperation> result) {
- for (Iterator i = getSuperclasses().iterator(); i.hasNext();) {
+ for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) {
ObjectModelClassImpl clazz = (ObjectModelClassImpl) i.next();
result.addAll(clazz.getOperations());
clazz.getAllSuperclassOperations(result);
@@ -205,6 +213,7 @@
return result;
}
+ @Override
public Collection<ObjectModelAttribute> getAllOtherAttributes() {
Collection<ObjectModelAttribute> result = new LinkedList<ObjectModelAttribute>();
getAllOtherAttributes(result);
@@ -213,7 +222,7 @@
protected Collection<ObjectModelAttribute> getAllOtherAttributes(
Collection<ObjectModelAttribute> result) {
- for (Iterator i = getSuperclasses().iterator(); i.hasNext();) {
+ for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) {
ObjectModelClassImpl clazz = (ObjectModelClassImpl) i.next();
result.addAll(clazz.getAttributes());
clazz.getAllOtherAttributes(result);
@@ -221,19 +230,20 @@
return result;
}
+ @Override
public String toString() {
StringBuffer result = new StringBuffer();
result.append("class " + getQualifiedName() + "<<" + getStereotypes()
+ ">> tagvalue: " + getTagValues() + " ");
result.append("extends ");
- for (Iterator i = getSuperclasses().iterator(); i.hasNext();) {
+ for (Iterator<?> i = getSuperclasses().iterator(); i.hasNext();) {
result.append(((ObjectModelClassifier) i.next()).getName());
if (i.hasNext()) {
result.append(", ");
}
}
result.append("implements ");
- for (Iterator i = getInterfaces().iterator(); i.hasNext();) {
+ for (Iterator<?> i = getInterfaces().iterator(); i.hasNext();) {
result.append(((ObjectModelClassifier) i.next()).getName());
if (i.hasNext()) {
result.append(", ");
@@ -249,6 +259,7 @@
*
* @return a boolean indicating whether this classifier is a class or not.
*/
+ @Override
public boolean isClass() {
return true;
}
@@ -261,6 +272,7 @@
* @return a boolean indicating whether this classifier is an interface or
* not.
*/
+ @Override
public boolean isInterface() {
return false;
}
1
0
r606 - in trunk/eugene/src: main/java/org/nuiton/eugene main/java/org/nuiton/eugene/models/object/xml site/rst
by bpoussin@users.nuiton.org 21 Aug '09
by bpoussin@users.nuiton.org 21 Aug '09
21 Aug '09
Author: bpoussin
Date: 2009-08-21 15:23:16 +0200 (Fri, 21 Aug 2009)
New Revision: 606
Modified:
trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java
trunk/eugene/src/site/rst/DiscussionSurTypeDeGeneration.rst
trunk/eugene/src/site/rst/ObjectModel.rst
trunk/eugene/src/site/rst/Todo.rst
Log:
- if fqn have no package, don't use it in import
- small correction in documentation
- add task in todo (generation by model creation)
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-08-21 07:43:54 UTC (rev 605)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/ImportsManager.java 2009-08-21 13:23:16 UTC (rev 606)
@@ -67,6 +67,11 @@
* @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 || "".equals(fqn.trim())||
(fqn.startsWith("java.lang.") && fqn.lastIndexOf(".") == 9)) {
Modified: trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java
===================================================================
--- trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-08-21 07:43:54 UTC (rev 605)
+++ trunk/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelImpl.java 2009-08-21 13:23:16 UTC (rev 606)
@@ -191,14 +191,19 @@
if (qualifiedClassName == null) {
return null;
}
- if (!hasClass(qualifiedClassName) && log.isWarnEnabled()) {
- log.warn("Class " + qualifiedClassName + " not found in model");
- log.warn("You may forgot to declare for good an external class ?");
+ if (!hasClass(qualifiedClassName)) {
//FIXME Decide if this is a good idea
- log.warn("Generating fake class");
+ if (log.isWarnEnabled()) {
+ log.warn("Class " + qualifiedClassName + " not found in model");
+ log.warn("You may forgot to declare for good an external class ?");
+
+ log.warn("Generating fake class");
+ }
ObjectModelClassImpl result = new ObjectModelClassImpl();
int index = qualifiedClassName.lastIndexOf(".");
- result.setPackage(qualifiedClassName.substring(0, index));
+ if (index != -1) {
+ result.setPackage(qualifiedClassName.substring(0, index));
+ }
result.setName(qualifiedClassName.substring(index + 1));
result.postInit();
return result;
Modified: trunk/eugene/src/site/rst/DiscussionSurTypeDeGeneration.rst
===================================================================
--- trunk/eugene/src/site/rst/DiscussionSurTypeDeGeneration.rst 2009-08-21 07:43:54 UTC (rev 605)
+++ trunk/eugene/src/site/rst/DiscussionSurTypeDeGeneration.rst 2009-08-21 13:23:16 UTC (rev 606)
@@ -19,14 +19,14 @@
l'inverse n'est pas vrai. Car la seconde catégorie demande des générateurs
beaucoup plus simple, ce qui est d'ailleur un avantage pour la maintenance.
-Code Lutin utilise un générateur du deuxième type: LutinGénérator
+Code Lutin utilise un générateur du deuxième type: Eugene
Quelques générateurs de la première catégorie:
- Acceleo (Obeo)
- Pragmatic (Argia)
Les principes de Eugene
-===============================
+=======================
- le générateur ne doit jamais modifier les fichiers de l'utilisateur.
- l'utilisateur ne doit jamais modifier le code généré
- le modèle est toujours la source (pas de reverse, pas de modification du
Modified: trunk/eugene/src/site/rst/ObjectModel.rst
===================================================================
--- trunk/eugene/src/site/rst/ObjectModel.rst 2009-08-21 07:43:54 UTC (rev 605)
+++ trunk/eugene/src/site/rst/ObjectModel.rst 2009-08-21 13:23:16 UTC (rev 606)
@@ -62,7 +62,7 @@
Une fois le XMI ramené à un XML compréhensible, le modèle est chargé en
mémoire afin de subir la génération.
-Ainsi, le modèle instancé est basé sur le diagramme de classes suivant :
+Ainsi, le modèle instancié est basé sur le diagramme de classes suivant :
.. image:: images/ObjectModel.png
Modified: trunk/eugene/src/site/rst/Todo.rst
===================================================================
--- trunk/eugene/src/site/rst/Todo.rst 2009-08-21 07:43:54 UTC (rev 605)
+++ trunk/eugene/src/site/rst/Todo.rst 2009-08-21 13:23:16 UTC (rev 606)
@@ -15,3 +15,90 @@
- peut-etre faire des tests unitaires avec http://juxy.tigris.org/ pour le xls
+- Permettre de faire du 'model to model' avant la generation
+
+Model to Model
+==============
+
+Pour tout ce qui est génération de classe Java, le principe de base d'Eugene
+est de dire que le développeur écrit directement ce qu'il souhaite voir dans
+le fichier final.
+
+Cela pose quelques difficultés:
+
+- difficulté de prévoir les imports
+- difficulté d'éviter la génération de deux méthodes ayant le même nom
+
+L'idée serait alors de constuire la classe Java souhaitée au final en appelant
+des méthodes (addImport, addMethod, addAttribute, ...). Ceci nous donnerait
+alors un nouveau modèle mémoire dont on demanderait la génération à un
+générateur sans inteligence qui se contenterait d'écrire le code Java modélisé.
+
+L'avantage est que pour chaque méthode à ajouter on peut demander avant si elle
+n'a pas déjà été ajoutée et ainsi potentiellement la renomé avant de l'inclure.
+D'ajouter de façon automatique tous les imports des arguments des méthodes, ...
+
+Pour pouvoir faire cela, nous pourrions nous baser sur ObjectModel, mais des
+ajouter doivent être fait:
+
+- pouvoir indiquer sur une Class une série d'import.
+- pouvoir ajouter un message de licence
+- pouvoir ajouter sur une méthode sont code source
+
+Ce dernier élément est le plus problèmatique, car il deviendrait pénible de
+devoir instancier tout le code de la méthode en objet et on perdrait l'idée
+de départ d'Eugene.
+
+Dans eugène il est déjà possible de modifier la transformation des tags de
+génération '/\*{' et '}\*/' qui par défaut génère un 'ouput.write("...");'
+Dans notre cas, il faudrait quelque chose comme 'method.addCode("...");' ou
+encore plus simplement '"..." +' ce qui pourrait donner::
+
+ addImport(MonObject.class);
+ method.addCode(
+ /*{ int i = 0;
+ i = 1+2;
+ MonObject result = new MonObject(result);
+ return result;
+ }*/
+ );
+
+qui deviendrait::
+
+ addImport(MonObject.class);
+ method.addCode(
+ "int i = 0;\n" +
+ "i = 1+2;\n" +
+ "MonObject result = new MonObject(result);\n" +
+ "return result;\n"
+ );
+
+On garde la facilte d'écriture du code à générer et on permet d'ajouter
+facilement des imports dont on aurait besoin dans le coprs de la méthode. Aucun
+traitement complexe du code de la méthode n'est donc nécessaire.
+
+Ce nouveau mode de génération ne serait qu'une moyen complémentaire de la
+génération actuelle.
+
+Travail a faire:
+
+- ajout d'objet dans ObjectModel
+- ajout de méthode de modification dans ObjectModel
+- création d'un template de génération d'un POJO (génération direct d'un modèle)
+
+Il serait toute fois dommage d'ajouter tout un ensemnble de setter sur les
+interfaces d'ObjectModel qui le rendrait moins clair pour les générateurs.
+Il faut donc trouver une solution pour permettre l'instanciation et la
+modification de classe implantant l'ObjectModel sans pour autant les ajouter
+au interface.
+
+Une idée pourrait-être l'utilisation de Helper qui permette de créer et modifier
+le modèle::
+
+ ObjectModelClass clazz = ObjectModelHelper.createClass();
+ ObjectModelOperation method = ObjectModelHelper.addMethod(
+ clazz, "name", "typeRetour", "paramName", "typeParam");
+ ObjectModelHelper.addImport("java.util.List");
+ ObjectModelHelper.addCode(method,
+ /*{ blablabla
+ }*/
1
0