[Lutingenerator-commits] r385 - in maven-generator-plugin/trunk: . src/main/java/org/codelutin/generator/plugin src/main/java/org/codelutin/generator/plugin/helper
Author: schorlet Date: 2008-12-08 10:22:41 +0000 (Mon, 08 Dec 2008) New Revision: 385 Added: maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/helper/ maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/helper/ResourceResolver.java Modified: maven-generator-plugin/trunk/changelog maven-generator-plugin/trunk/pom.xml maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/Xmi2Model.java Log: #1737: Prise en compte du MetaModel UML dans les fichiers XMI - ajout du support des fichiers default-java.xml et default-uml14.xmi Modified: maven-generator-plugin/trunk/changelog =================================================================== --- maven-generator-plugin/trunk/changelog 2008-12-08 10:19:24 UTC (rev 384) +++ maven-generator-plugin/trunk/changelog 2008-12-08 10:22:41 UTC (rev 385) @@ -1,3 +1,7 @@ +0.62-SNAPSHOT + * 20081208 [chorlet] correction bug #1737: Prise en compte du MetaModel UML dans les fichiers XMI + - ajout du support des fichiers default-java.xml et default-uml14.xmi + 0.62 chemit 200811?? * 20081203 [chemit] add a encoding goal property to be dispatched in all generator to control file generation encoding * 20081118 [chemit] use lutinproject 3.1 @@ -33,4 +37,4 @@ 0.50 ??? ??? * 20070420 [chatellier] add goal to copy a set of generated files - * 20070420 [chatellier] update lutingenerator depencency to 0.50 \ No newline at end of file + * 20070420 [chatellier] update lutingenerator depencency to 0.50 Modified: maven-generator-plugin/trunk/pom.xml =================================================================== --- maven-generator-plugin/trunk/pom.xml 2008-12-08 10:19:24 UTC (rev 384) +++ maven-generator-plugin/trunk/pom.xml 2008-12-08 10:22:41 UTC (rev 385) @@ -25,13 +25,6 @@ </dependency> <dependency> - <groupId>org.codelutin</groupId> - <artifactId>lutinpluginutil</artifactId> - <version>0.2</version> - <scope>compile</scope> - </dependency> - - <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.7.1</version> Modified: maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/Xmi2Model.java =================================================================== --- maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/Xmi2Model.java 2008-12-08 10:19:24 UTC (rev 384) +++ maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/Xmi2Model.java 2008-12-08 10:22:41 UTC (rev 385) @@ -30,7 +30,17 @@ package org.codelutin.generator.plugin; import java.io.File; +import java.io.FileFilter; +import java.io.FileOutputStream; +import java.net.URL; +import java.util.List; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -38,135 +48,146 @@ 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.XSLTProcess; import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.resources.URLResource; +import org.codelutin.generator.plugin.helper.ResourceResolver; +import org.codelutin.util.FileUtil; import org.codelutin.util.Resource; /** - * Converti les fichiers XMI en fichier Model via une transformation XSLT - * a définir. + * Converti les fichiers XMI en fichier Model via une transformation XSLT a + * définir. * * Class abstraite sans feuille de style. */ public abstract class Xmi2Model extends AbstractMojo { - - /** - * Répertoire source des fichiers XMI - * - * @parameter alias="srcXmiDest" - * @required - */ - protected File srcDirXmi; - /** - * Répertoire cible des fichiers générés - * - * @parameter alias="srcGenDest" - * @required - */ - protected File destDirObjectModel; + /** + * Répertoire source des fichiers XMI + * + * @parameter alias="srcXmiDest" + * @required + */ + protected File srcDirXmi; - /** - * Nom du paquetage pour les fichiers générés - * - * @parameter expression="org.codelutin.${project.artifactId}" - */ - protected String fullPackagePath; + /** + * Répertoire cible des fichiers générés + * + * @parameter alias="srcGenDest" + * @required + */ + protected File destDirObjectModel; - /** - * Nom du paquetage à généré - * - * @parameter - */ - protected String extractedPackages = ""; + /** + * Nom du paquetage pour les fichiers générés + * + * @parameter expression="org.codelutin.${project.artifactId}" + */ + protected String fullPackagePath; - /** - * Ecrase les fichiers générés - * - * @parameter default-value="false" - */ - private boolean overwrite = false; + /** + * Nom du paquetage à généré + * + * @parameter + */ + protected String extractedPackages = ""; - public void execute() throws MojoExecutionException, MojoFailureException { - actionXsl(); - actionCopy(); - } + /** + * Ecrase les fichiers générés + * + * @parameter default-value="false" + */ + private boolean overwrite = false; - private void actionXsl() { - /* Création d'un projet ant */ - Project project = createProject(); - - XSLTProcess xslt = new XSLTProcess(); - xslt.setProject(project); - xslt.setTaskName("XSL"); - xslt.setBasedir(srcDirXmi); - xslt.setIncludes("**/*.xmi"); - - destDirObjectModel.mkdirs(); - xslt.setDestdir(destDirObjectModel); + public void execute() throws MojoExecutionException, MojoFailureException { + actionXsl(); + actionCopy(); + } - xslt.setExtension("." + getExtension()); - xslt.setXslResource(new URLResource(Resource.getURL(getStyleSheet()))); + private void actionXsl() throws MojoExecutionException { + List<File> files = FileUtil.getFilteredElements(srcDirXmi, new FileFilter() { + public boolean accept(File pathname) { + if (pathname != null && pathname.getName().endsWith(".xmi")) { + return true; + } + return false; + } + }, false); -// Param createParam = xsl.createParam(); -// createParam.setName("fullPackagePath"); -// createParam.setExpression(fullPackagePath); -// createParam = xsl.createParam(); -// createParam.setName("extraPackages"); -// createParam.setExpression(extractedPackages);*/ - - /* Execution */ - xslt.execute(); - } - - private void actionCopy(){ - /* Création d'un projet ant */ - Project project = createProject(); + destDirObjectModel.mkdirs(); - /* Création de la tâche ant Copy */ - Copy copy = new Copy(); - copy.setProject(project); - copy.setTaskName("Copy ressources"); + TransformerFactory factory = TransformerFactory.newInstance(); + URIResolver resolver = new ResourceResolver(); + for (File file : files) { + try { + URL xsl = Resource.getURL(getStyleSheet()); + File result = new File(destDirObjectModel, FileUtil.basename(file, ".xmi").concat( + ".").concat(getExtension())); - /* Configuration */ - copy.setTodir(destDirObjectModel); - copy.setOverwrite(overwrite); - - FileSet fileSet = new FileSet(); - fileSet.setProject(project); - fileSet.setDir(srcDirXmi); - fileSet.setExcludes("**/*.xmi"); - copy.addFileset(fileSet); - - /* Execution */ - copy.execute(); - } + Transformer transformer = factory + .newTransformer(new StreamSource(xsl.openStream())); + transformer.setURIResolver(resolver); + transformer.transform(new StreamSource(file), new StreamResult( + new FileOutputStream(result))); + transformer = null; - private 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; - } + } catch (Exception e) { + e.printStackTrace(); + throw new MojoExecutionException(e.getMessage()); + } + } + factory = null; + resolver = null; + } - /** - * Set extention - * @return the extention - */ - protected abstract String getExtension(); - - /** - * Set style sheet - * @return the stylesheet - */ - protected abstract String getStyleSheet(); + private void actionCopy() { + /* 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(destDirObjectModel); + copy.setOverwrite(overwrite); + + FileSet fileSet = new FileSet(); + fileSet.setProject(project); + fileSet.setDir(srcDirXmi); + fileSet.setExcludes("**/*.xmi"); + copy.addFileset(fileSet); + + /* Execution */ + copy.execute(); + } + + private 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; + } + + /** + * Set extention + * + * @return the extention + */ + protected abstract String getExtension(); + + /** + * Set style sheet + * + * @return the stylesheet + */ + protected abstract String getStyleSheet(); } Added: maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/helper/ResourceResolver.java =================================================================== --- maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/helper/ResourceResolver.java (rev 0) +++ maven-generator-plugin/trunk/src/main/java/org/codelutin/generator/plugin/helper/ResourceResolver.java 2008-12-08 10:22:41 UTC (rev 385) @@ -0,0 +1,78 @@ +package org.codelutin.generator.plugin.helper; + +import java.net.MalformedURLException; +import java.net.URL; + +import javax.xml.transform.Source; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamSource; + +import org.codelutin.util.Resource; + +/** + * ResourceResolver is a URIResolver for XSL transformation. <br/> + * Its purpose is to catch the XSL document(...) function call and return a + * valid data source only if the wanted resource is present in the project + * resources. <br/> + * The main goal of ResourceResolver is to retrieve datasources locally, if the + * wanted resource is not present in project resource then null will be + * returned.<br/> + * <p> + * The resolve function search for the file part of href parameter: <br/> + * href: http://argouml.org/profiles/uml14/default-uml14.xmi <br/> + * file part: default-uml14.xmi. <br/> + * The resource is searched this way: <br/> + * eg: <code>[file part extension]/[file part]</code> <br/> + * eg: <code>xmi/default-uml14.xmi</code> + * <p> + * You should assign this ResourceResolver on + * {@link javax.xml.transform.Transformer} but not on + * {@link javax.xml.transform.TransformerFactory}. <br/> + * + * @author chorlet + * + */ +public class ResourceResolver implements URIResolver { + + /** + * resolve href on local resource. + * + * @return null if local resource not found + */ + public Source resolve(String href, String base) { + // System.out.println("[ResourceResolver] " + href); + String filename = null; + try { + filename = new URL(href).getPath(); + int beginIndex = filename.lastIndexOf('/'); + if (beginIndex > 0) { + filename = filename.substring(beginIndex + 1); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + return null; + } + if (filename == null || filename.length() == 0) { + return null; + } + return findSource(filename); + } + + Source findSource(String filename) { + // System.out.println("[ResourceResolver] " + filename); + + String extension = null; + int beginIndex = filename.lastIndexOf('.'); + if (beginIndex > 0) { + extension = filename.substring(beginIndex + 1); + } + + URL url = Resource.getURLOrNull(extension + "/" + filename); + if (url == null) { + return null; + } + System.out.println("[ResourceResolver] " + url.toString()); + + return new StreamSource(url.toString()); + } +}
participants (1)
-
schorlet@users.labs.libre-entreprise.org