From 04f7ef2d9aadcf35c4ab24addd236644be8b3d82 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sun, 23 Oct 2022 22:01:12 +0200 Subject: [PATCH 01/11] Add a velocity template based plugin --- modello-maven-plugin/pom.xml | 4 + .../modello/maven/ModelloVelocityMojo.java | 86 +++++++++ .../modello-plugin-velocity/pom.xml | 31 ++++ .../modello/plugin/velocity/Helper.java | 154 ++++++++++++++++ .../plugin/velocity/VelocityGenerator.java | 166 ++++++++++++++++++ .../resources/META-INF/plexus/components.xml | 31 ++++ .../src/main/site/site.xml | 22 +++ .../src/main/site/xdoc/index.xml | 20 +++ modello-plugins/pom.xml | 1 + pom.xml | 7 +- 10 files changed, 521 insertions(+), 1 deletion(-) create mode 100644 modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java create mode 100644 modello-plugins/modello-plugin-velocity/pom.xml create mode 100644 modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java create mode 100644 modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java create mode 100644 modello-plugins/modello-plugin-velocity/src/main/resources/META-INF/plexus/components.xml create mode 100644 modello-plugins/modello-plugin-velocity/src/main/site/site.xml create mode 100644 modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml diff --git a/modello-maven-plugin/pom.xml b/modello-maven-plugin/pom.xml index 0e3cf8bac..a3dd8b0dc 100644 --- a/modello-maven-plugin/pom.xml +++ b/modello-maven-plugin/pom.xml @@ -119,6 +119,10 @@ modello-plugin-xsd runtime + + org.codehaus.modello + modello-plugin-velocity + org.sonatype.plexus plexus-build-api diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java new file mode 100644 index 000000000..e472b0710 --- /dev/null +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -0,0 +1,86 @@ +package org.codehaus.modello.maven; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Properties; +import java.util.stream.Collectors; + +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.codehaus.modello.plugin.velocity.VelocityGenerator; + +/** + * Creates files from the model using Velocity templates. + * + * @author Brett Porter + */ +@Mojo( name = "velocity", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true ) +public class ModelloVelocityMojo + extends AbstractModelloGeneratorMojo +{ + /** + * The output directory of the generated XML Schema. + */ + @Parameter( defaultValue = "${project.build.directory}/generated-sources/modello", required = true ) + private File outputDirectory; + + @Parameter + private List templates; + + @Parameter + private List params; + + protected String getGeneratorType() + { + return "velocity"; + } + + protected void customizeParameters( Properties parameters ) + { + super.customizeParameters( parameters ); + Map params = this.params != null ? this.params.stream().collect( Collectors.toMap( + s -> s.substring( 0, s.indexOf( '=' ) ), s -> s.substring( s.indexOf( '=' ) + 1 ) + ) ) : Collections.emptyMap(); + parameters.put( "basedir", Objects.requireNonNull( getBasedir(), "basedir is null" ) ); + parameters.put( VelocityGenerator.VELOCITY_TEMPLATES, String.join( ",", templates ) ); + parameters.put( VelocityGenerator.VELOCITY_PARAMETERS, params ); + } + + protected boolean producesCompilableResult() + { + return true; + } + + public File getOutputDirectory() + { + return outputDirectory; + } + + public void setOutputDirectory( File outputDirectory ) + { + this.outputDirectory = outputDirectory; + } +} diff --git a/modello-plugins/modello-plugin-velocity/pom.xml b/modello-plugins/modello-plugin-velocity/pom.xml new file mode 100644 index 000000000..31e6d1771 --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/pom.xml @@ -0,0 +1,31 @@ + + + + modello-plugins + org.codehaus.modello + 2.1.0-SNAPSHOT + + + 4.0.0 + modello-plugin-velocity + Modello Velocity Plugin + + Modello Velocity Plugin generates files from the Modello model using Velocity templates. + + + + + org.codehaus.modello + modello-plugin-xml + + + org.codehaus.plexus + plexus-utils + + + org.apache.velocity + velocity-engine-core + 2.3 + + + diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java new file mode 100644 index 000000000..0e9f285fd --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java @@ -0,0 +1,154 @@ +package org.codehaus.modello.plugin.velocity; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.codehaus.modello.ModelloRuntimeException; +import org.codehaus.modello.model.ModelAssociation; +import org.codehaus.modello.model.ModelClass; +import org.codehaus.modello.model.ModelField; +import org.codehaus.modello.model.Version; +import org.codehaus.modello.plugin.AbstractModelloGenerator; +import org.codehaus.modello.plugins.xml.metadata.XmlAssociationMetadata; +import org.codehaus.modello.plugins.xml.metadata.XmlClassMetadata; +import org.codehaus.modello.plugins.xml.metadata.XmlFieldMetadata; +import org.codehaus.plexus.util.StringUtils; + +@SuppressWarnings( "unused" ) +public class Helper +{ + private final Version version; + + public Helper( Version version ) + { + this.version = version; + } + + public String capitalise( String str ) + { + return StringUtils.isEmpty( str ) ? str : Character.toTitleCase( str.charAt( 0 ) ) + str.substring( 1 ); + } + + public String uncapitalise( String str ) + { + return StringUtils.isEmpty( str ) ? str : Character.toLowerCase( str.charAt( 0 ) ) + str.substring( 1 ); + } + + public String singular( String str ) + { + return AbstractModelloGenerator.singular( str ); + } + + public List ancestors( ModelClass clazz ) + { + List ancestors = new ArrayList<>(); + for ( ModelClass cl = clazz; cl != null; cl = cl.getSuperClass() != null + ? cl.getModel().getClass( cl.getSuperClass(), version ) : null ) + { + ancestors.add( 0, cl ); + } + return ancestors; + } + + public XmlClassMetadata xmlClassMetadata( ModelClass clazz ) + { + return (XmlClassMetadata) clazz.getMetadata( XmlClassMetadata.ID ); + } + + public XmlFieldMetadata xmlFieldMetadata( ModelField field ) + { + return (XmlFieldMetadata) field.getMetadata( XmlFieldMetadata.ID ); + } + + public XmlAssociationMetadata xmAssociationMetadata( ModelField field ) + { + return (XmlAssociationMetadata) ( (ModelAssociation) field ) + .getAssociationMetadata( XmlAssociationMetadata.ID ); + } + + public boolean isFlatItems( ModelField field ) + { + return field instanceof ModelAssociation && xmAssociationMetadata( field ).isFlatItems(); + } + + public List xmlFields( ModelClass modelClass ) + { + List classes = new ArrayList<>(); + // get the full inheritance + while ( modelClass != null ) + { + classes.add( modelClass ); + String superClass = modelClass.getSuperClass(); + if ( superClass != null ) + { + // superClass can be located outside (not generated by modello) + modelClass = modelClass.getModel().getClass( superClass, version, true ); + } + else + { + modelClass = null; + } + } + List fields = new ArrayList<>(); + for ( int i = classes.size() - 1; i >= 0; i-- ) + { + modelClass = classes.get( i ); + Iterator parentIter = fields.iterator(); + fields = new ArrayList<>(); + for ( ModelField field : modelClass.getFields( version ) ) + { + XmlFieldMetadata xmlFieldMetadata = (XmlFieldMetadata) field.getMetadata( XmlFieldMetadata.ID ); + if ( xmlFieldMetadata.isTransient() ) + { + // just ignore xml.transient fields + continue; + } + if ( xmlFieldMetadata.getInsertParentFieldsUpTo() != null ) + { + // insert fields from parent up to the specified field + boolean found = false; + while ( !found && parentIter.hasNext() ) + { + ModelField parentField = parentIter.next(); + fields.add( parentField ); + found = parentField.getName().equals( xmlFieldMetadata.getInsertParentFieldsUpTo() ); + } + if ( !found ) + { + // interParentFieldsUpTo not found + throw new ModelloRuntimeException( "parent field not found: class " + + modelClass.getName() + " xml.insertParentFieldUpTo='" + + xmlFieldMetadata.getInsertParentFieldsUpTo() + "'" ); + } + } + fields.add( field ); + } + // add every remaining fields from parent class + while ( parentIter.hasNext() ) + { + fields.add( parentIter.next() ); + } + } + return fields; + } +} diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java new file mode 100644 index 000000000..6f8263169 --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java @@ -0,0 +1,166 @@ +package org.codehaus.modello.plugin.velocity; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; +import java.util.Objects; +import java.util.Properties; + +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.runtime.RuntimeInstance; +import org.codehaus.modello.ModelloException; +import org.codehaus.modello.ModelloParameterConstants; +import org.codehaus.modello.model.Model; +import org.codehaus.modello.model.Version; +import org.codehaus.modello.plugin.AbstractModelloGenerator; +import org.codehaus.plexus.util.io.CachingWriter; + +public class VelocityGenerator + extends AbstractModelloGenerator +{ + public static final String VELOCITY_TEMPLATES = "modello.velocity.template"; + + public static final String VELOCITY_PARAMETERS = "modello.velocity.parameters"; + + @Override + public void generate( Model model, Properties parameters ) throws ModelloException + { + try + { + Map params = ( Map ) Objects.requireNonNull( parameters.get( VELOCITY_PARAMETERS ) ); + String templates = getParameter( parameters, VELOCITY_TEMPLATES ); + String output = getParameter( parameters, ModelloParameterConstants.OUTPUT_DIRECTORY ); + + Properties props = new Properties(); + props.put( "resource.loader.file.path", getParameter( parameters, "basedir" ) ); + RuntimeInstance velocity = new RuntimeInstance(); + velocity.init( props ); + + VelocityContext context = new VelocityContext(); + for ( Map.Entry prop : parameters.entrySet() ) + { + context.put( prop.getKey().toString(), prop.getValue() ); + } + for ( Map.Entry prop : params.entrySet() ) + { + context.put( prop.getKey(), prop.getValue() ); + } + Version version = new Version( getParameter( parameters, ModelloParameterConstants.VERSION ) ); + context.put( "version", version ); + context.put( "model", model ); + context.put( "Helper", new Helper( version ) ); + + for ( String templatePath : templates.split( "," ) ) + { + Template template = velocity.getTemplate( templatePath ); + + try ( Writer w = new RedirectingWriter( Paths.get( output ) ) ) + { + template.merge( context, w ); + } + } + } + catch ( Exception e ) + { + throw new ModelloException( "Unable to run velocity template", e ); + } + + } + + static class RedirectingWriter extends Writer + { + Path dir; + StringBuilder sb = new StringBuilder(); + Writer current; + + RedirectingWriter( Path dir ) + { + this.dir = dir; + } + + @Override + public void write( char[] cbuf, int off, int len ) throws IOException + { + for ( int i = 0; i < len; i++ ) + { + if ( cbuf[ off + i ] == '\n' ) + { + if ( sb.length() > 0 && sb.charAt( sb.length() - 1 ) == '\r' ) + { + sb.setLength( sb.length() - 1 ); + } + writeLine( sb.toString() ); + sb.setLength( 0 ); + } + else + { + sb.append( cbuf[ off + i ] ); + } + } + } + + protected void writeLine( String line ) throws IOException + { + if ( line.startsWith( "#MODELLO-VELOCITY#REDIRECT " ) ) + { + String file = line.substring( "#MODELLO-VELOCITY#REDIRECT ".length() ); + if ( current != null ) + { + current.close(); + } + Path out = dir.resolve( file ); + Files.createDirectories( out.getParent() ); + current = new CachingWriter( out, StandardCharsets.UTF_8 ); + } + else if ( current != null ) + { + current.write( line ); + current.write( "\n" ); + } + } + + @Override + public void flush() throws IOException + { + if ( current != null ) + { + current.flush(); + } + } + + @Override + public void close() throws IOException + { + if ( current != null ) + { + current.close(); + current = null; + } + } + } + +} diff --git a/modello-plugins/modello-plugin-velocity/src/main/resources/META-INF/plexus/components.xml b/modello-plugins/modello-plugin-velocity/src/main/resources/META-INF/plexus/components.xml new file mode 100644 index 000000000..ed745b2fc --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/main/resources/META-INF/plexus/components.xml @@ -0,0 +1,31 @@ + + + + + + + + org.codehaus.modello.plugin.ModelloGenerator + velocity + org.codehaus.modello.plugin.velocity.VelocityGenerator + per-lookup + + + diff --git a/modello-plugins/modello-plugin-velocity/src/main/site/site.xml b/modello-plugins/modello-plugin-velocity/src/main/site/site.xml new file mode 100644 index 000000000..f5f579108 --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/main/site/site.xml @@ -0,0 +1,22 @@ + + + + + Modello + + + + + + + + + + + + + + + diff --git a/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml new file mode 100644 index 000000000..1d9a1bb8e --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml @@ -0,0 +1,20 @@ + + + + + + Modello Velocity Plugin + Guillaume Nodet + + + + +
+ +

Modello Velocity Plugin generates files using the Velocity templating engine.

+ +
+ + + +
diff --git a/modello-plugins/pom.xml b/modello-plugins/pom.xml index 07bc0ff9e..9c61cfe8f 100644 --- a/modello-plugins/pom.xml +++ b/modello-plugins/pom.xml @@ -29,6 +29,7 @@ modello-plugin-jackson modello-plugin-snakeyaml modello-plugin-sax + modello-plugin-velocity diff --git a/pom.xml b/pom.xml index fcba6369c..c6f005201 100644 --- a/pom.xml +++ b/pom.xml @@ -313,6 +313,11 @@ modello-plugin-jsonschema ${project.version} + + org.codehaus.modello + modello-plugin-velocity + ${project.version} + org.eclipse.sisu org.eclipse.sisu.plexus @@ -327,7 +332,7 @@ org.codehaus.plexus plexus-utils - 3.4.1 + 3.4.2 org.codehaus.plexus From 40e30c867e48903883c094a7618082a737d75d51 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 26 Oct 2022 13:34:28 +0200 Subject: [PATCH 02/11] Add some doc --- .../modello/maven/ModelloVelocityMojo.java | 34 ++++++++++++++-- .../modello/plugin/velocity/Helper.java | 39 +++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index e472b0710..f524fbb83 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -34,22 +34,50 @@ /** * Creates files from the model using Velocity templates. - * - * @author Brett Porter + *

+ * This mojo can be given a list of templates and a list of parameters. + * Each template fomr the {@link #templates} property will be run with the following context: + *

    + *
  • {@code version}: the version of the model to generate
  • + *
  • {@code model}: the modello model
  • + *
  • {@code Helper}: a {@link org.codehaus.modello.plugin.velocity.Helper} object instance
  • + *
  • any additional parameters specified using the {@link #params} property
  • + *
+ * The output file is controlled from within the template using the {@code #MODELLO-VELOCITY#REDIRECT} + * directive. This allows a single template to generate multiple files. For example, the following + * directive will redirect further output from the template to a file named + * {@code org/apache/maven/api/model/Plugin.java} if the variable {@code package} is set to + * {@code org.apache.maven.api.model} and the variable {@code className} is set to {@code Plugin}. + *

+ *

+ * {@code #MODELLO-VELOCITY#REDIRECT ${package.replace('.','/')}/${className}.java} + *

*/ @Mojo( name = "velocity", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true ) public class ModelloVelocityMojo extends AbstractModelloGeneratorMojo { /** - * The output directory of the generated XML Schema. + * The output directory of the generated files. */ @Parameter( defaultValue = "${project.build.directory}/generated-sources/modello", required = true ) private File outputDirectory; + /** + * A list of template files to be run against the loaded modello model. + * Those are {@code .vm} files as described in the + * Velocity Users Guide. + * Those files are resolved relative to the project's {@code ${basedir}} when given to + * + * {@code RuntimeInstance.getTemplate(String)} method. + */ @Parameter private List templates; + /** + * A list of parameters using the syntax {@code key=value}. + * Those parameters will be made accessible to the templates. + */ @Parameter private List params; diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java index 0e9f285fd..6267c5478 100644 --- a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/Helper.java @@ -34,6 +34,16 @@ import org.codehaus.modello.plugins.xml.metadata.XmlFieldMetadata; import org.codehaus.plexus.util.StringUtils; +/** + * Helper class to use inside velocity templates. + *

+ * This will be made available using {@code ${Helper}} inside the template. + * For example, the following line will return the list of ancestors for a given modello class: + *

+ *

+ * {@code #set ( $ancestors = $Helper.ancestors( $class ) )} + *

+ */ @SuppressWarnings( "unused" ) public class Helper { @@ -44,21 +54,33 @@ public Helper( Version version ) this.version = version; } + /** + * Returns the capitalised version of the given string. + */ public String capitalise( String str ) { return StringUtils.isEmpty( str ) ? str : Character.toTitleCase( str.charAt( 0 ) ) + str.substring( 1 ); } + /** + * Returns the uncapitalised version of the given string. + */ public String uncapitalise( String str ) { return StringUtils.isEmpty( str ) ? str : Character.toLowerCase( str.charAt( 0 ) ) + str.substring( 1 ); } + /** + * Returns the singular name for the given string. + */ public String singular( String str ) { return AbstractModelloGenerator.singular( str ); } + /** + * Returns the list of ancestors for the given {@code ModelClass}. + */ public List ancestors( ModelClass clazz ) { List ancestors = new ArrayList<>(); @@ -70,27 +92,44 @@ public List ancestors( ModelClass clazz ) return ancestors; } + /** + * Returns the {@code XmlClassMetadata} for the given {@code ModelClass}. + */ public XmlClassMetadata xmlClassMetadata( ModelClass clazz ) { return (XmlClassMetadata) clazz.getMetadata( XmlClassMetadata.ID ); } + /** + * Returns the {@code XmlFieldMetadata} for the given {@code ModelField}. + */ public XmlFieldMetadata xmlFieldMetadata( ModelField field ) { return (XmlFieldMetadata) field.getMetadata( XmlFieldMetadata.ID ); } + /** + * Returns the {@code XmlAssociationMetadata} for the given {@code ModelField}. + */ public XmlAssociationMetadata xmAssociationMetadata( ModelField field ) { return (XmlAssociationMetadata) ( (ModelAssociation) field ) .getAssociationMetadata( XmlAssociationMetadata.ID ); } + /** + * Checks if the given {@code ModelField} is a flat item. + */ public boolean isFlatItems( ModelField field ) { return field instanceof ModelAssociation && xmAssociationMetadata( field ).isFlatItems(); } + /** + * Returns a list of all {@code ModelField} for a given {@code ModelClass}. + * The list will contain all fields defined on the class and on its parents, + * excluding any field flagged as being xml transient. + */ public List xmlFields( ModelClass modelClass ) { List classes = new ArrayList<>(); From f9665214588b4c4b14514a97ab9a47b4b6e0ae0f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 26 Oct 2022 16:41:50 +0200 Subject: [PATCH 03/11] Update modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java Co-authored-by: Konrad Windszus --- .../java/org/codehaus/modello/maven/ModelloVelocityMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index f524fbb83..2b5cc69b3 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -36,7 +36,7 @@ * Creates files from the model using Velocity templates. *

* This mojo can be given a list of templates and a list of parameters. - * Each template fomr the {@link #templates} property will be run with the following context: + * Each template from the {@link #templates} property will be run with the following context: *

    *
  • {@code version}: the version of the model to generate
  • *
  • {@code model}: the modello model
  • From 5ba45a23614e6422b3df9c6ec3136dca76cc78f3 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 26 Oct 2022 17:55:15 +0200 Subject: [PATCH 04/11] Use File objets so that the templates are resolved by maven, and make them relative to the basedir so that Velocity can find them --- .../modello/maven/ModelloVelocityMojo.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index 2b5cc69b3..9a95eaa6e 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -20,6 +20,8 @@ */ import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Collections; import java.util.List; import java.util.Map; @@ -67,12 +69,9 @@ public class ModelloVelocityMojo * A list of template files to be run against the loaded modello model. * Those are {@code .vm} files as described in the * Velocity Users Guide. - * Those files are resolved relative to the project's {@code ${basedir}} when given to - * - * {@code RuntimeInstance.getTemplate(String)} method. */ @Parameter - private List templates; + private List templates; /** * A list of parameters using the syntax {@code key=value}. @@ -93,7 +92,12 @@ protected void customizeParameters( Properties parameters ) s -> s.substring( 0, s.indexOf( '=' ) ), s -> s.substring( s.indexOf( '=' ) + 1 ) ) ) : Collections.emptyMap(); parameters.put( "basedir", Objects.requireNonNull( getBasedir(), "basedir is null" ) ); - parameters.put( VelocityGenerator.VELOCITY_TEMPLATES, String.join( ",", templates ) ); + Path basedir = Paths.get( getBasedir() ); + parameters.put( VelocityGenerator.VELOCITY_TEMPLATES, templates.stream() + .map( File::toPath ) + .map( basedir::relativize ) + .map( Path::toString ) + .collect( Collectors.joining( "," ) ) ); parameters.put( VelocityGenerator.VELOCITY_PARAMETERS, params ); } From f055226c123a268b5b7cdeb41df0d3462fbab7dc Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 26 Oct 2022 18:03:18 +0200 Subject: [PATCH 05/11] We don't use plexus-velocity --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index 8f55f1f15..0e02c1755 100644 --- a/pom.xml +++ b/pom.xml @@ -335,11 +335,6 @@ plexus-utils 3.5.0 - - org.codehaus.plexus - plexus-velocity - 2.0 - org.sonatype.plexus plexus-build-api From 2a8ee3a051b3c3b67e68c0c3b4aea541725e987b Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 26 Oct 2022 18:17:45 +0200 Subject: [PATCH 06/11] Fix javadoc --- .../java/org/codehaus/modello/maven/ModelloVelocityMojo.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index 9a95eaa6e..34d96e207 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -50,10 +50,9 @@ * directive will redirect further output from the template to a file named * {@code org/apache/maven/api/model/Plugin.java} if the variable {@code package} is set to * {@code org.apache.maven.api.model} and the variable {@code className} is set to {@code Plugin}. - *

    - *

    + *

      *     {@code #MODELLO-VELOCITY#REDIRECT ${package.replace('.','/')}/${className}.java}
    - * 

    + *
    Date: Wed, 26 Oct 2022 18:34:17 +0200 Subject: [PATCH 07/11] Another fix --- .../java/org/codehaus/modello/maven/ModelloVelocityMojo.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index 34d96e207..e5615ee74 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -50,9 +50,8 @@ * directive will redirect further output from the template to a file named * {@code org/apache/maven/api/model/Plugin.java} if the variable {@code package} is set to * {@code org.apache.maven.api.model} and the variable {@code className} is set to {@code Plugin}. - *
    + * 

    * {@code #MODELLO-VELOCITY#REDIRECT ${package.replace('.','/')}/${className}.java} - *

    Date: Mon, 31 Oct 2022 08:41:40 +0100 Subject: [PATCH 08/11] improve documenattion --- .../java/org/codehaus/modello/maven/ModelloVelocityMojo.java | 3 ++- modello-maven-plugin/src/site/apt/index.apt | 4 +++- .../codehaus/modello/plugin/velocity/VelocityGenerator.java | 2 +- .../modello-plugin-velocity/src/main/site/xdoc/index.xml | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index e5615ee74..8d8ac54d7 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -46,7 +46,8 @@ *
  • any additional parameters specified using the {@link #params} property
  • *
* The output file is controlled from within the template using the {@code #MODELLO-VELOCITY#REDIRECT} - * directive. This allows a single template to generate multiple files. For example, the following + * VTL directive. + * This allows a single template to generate multiple files. For example, the following * directive will redirect further output from the template to a file named * {@code org/apache/maven/api/model/Plugin.java} if the variable {@code package} is set to * {@code org.apache.maven.api.model} and the variable {@code className} is set to {@code Plugin}. diff --git a/modello-maven-plugin/src/site/apt/index.apt b/modello-maven-plugin/src/site/apt/index.apt index 82d761491..62617a45b 100644 --- a/modello-maven-plugin/src/site/apt/index.apt +++ b/modello-maven-plugin/src/site/apt/index.apt @@ -10,7 +10,7 @@ Modello Maven Plugin - This plugin makes use of the {{{http://codehaus-plexus.github.io/modello/}Modello}} project. + This plugin makes use of the {{{https://codehaus-plexus.github.io/modello/}Modello}} project. * Goals Overview @@ -54,6 +54,8 @@ Modello Maven Plugin * {{{./snakeyaml-extended-reader-mojo.html}modello:snakeyaml-extended-reader}} Generates a YAML reader based on SnakeYaml Streaming APIs from the. Modello model that records line/column number metadata in the parsed model. + * {{{./velocity-mojo.html}modello:velocity}} Creates files from the model using Velocity templates. + * {{{./converters-mojo.html}modello:converters}} Generates classes that can convert between different versions of the model. [] diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java index 6f8263169..9f9c95b8e 100644 --- a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java @@ -42,7 +42,7 @@ public class VelocityGenerator extends AbstractModelloGenerator { - public static final String VELOCITY_TEMPLATES = "modello.velocity.template"; + public static final String VELOCITY_TEMPLATES = "modello.velocity.templates"; public static final String VELOCITY_PARAMETERS = "modello.velocity.parameters"; diff --git a/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml index 1d9a1bb8e..a034380b4 100644 --- a/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml +++ b/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml @@ -11,7 +11,7 @@
-

Modello Velocity Plugin generates files using the Velocity templating engine.

+

Modello Velocity Plugin generates files from the Modello model using Velocity templates.

From f9ce870cc5aebe03dbc174f0556847c3412e0ba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= Date: Fri, 23 Dec 2022 08:51:53 +0100 Subject: [PATCH 09/11] add documentation --- .../src/main/site/xdoc/index.xml | 20 -------- .../src/{main => }/site/site.xml | 0 .../src/site/xdoc/index.xml | 43 ++++++++++++++++++ src/site/resources/modello-deps.png | Bin 44563 -> 49779 bytes src/site/xdoc/index.xml | 8 +++- src/site/xdoc/modello-deps.odg | Bin 22910 -> 19466 bytes 6 files changed, 49 insertions(+), 22 deletions(-) delete mode 100644 modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml rename modello-plugins/modello-plugin-velocity/src/{main => }/site/site.xml (100%) create mode 100644 modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml diff --git a/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml deleted file mode 100644 index a034380b4..000000000 --- a/modello-plugins/modello-plugin-velocity/src/main/site/xdoc/index.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Modello Velocity Plugin - Guillaume Nodet - - - - -
- -

Modello Velocity Plugin generates files from the Modello model using Velocity templates.

- -
- - - -
diff --git a/modello-plugins/modello-plugin-velocity/src/main/site/site.xml b/modello-plugins/modello-plugin-velocity/src/site/site.xml similarity index 100% rename from modello-plugins/modello-plugin-velocity/src/main/site/site.xml rename to modello-plugins/modello-plugin-velocity/src/site/site.xml diff --git a/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml new file mode 100644 index 000000000..7bffb3492 --- /dev/null +++ b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml @@ -0,0 +1,43 @@ + + + + + + Modello Velocity Plugin + Guillaume Nodet + + + + +
+ +

Modello Velocity Plugin generates files from the Modello model using Velocity templates.

+ +
+ +
+ +

The plugin is configured with a list of template files to evaluate.

+

During template evaluation, #MODELLO-VELOCITY#REDIRECT {relative path to file} pseudo macro is available to send the rendered content to a file.

+

The Velocity context contains some variables related to the Modello model context that you can use: + + + + + + + + + + + + + + +
VariableTypeDescription
parameters configured in the pluginStringThe parameters values configured in the plugin as {key}={value}.
versionStringThe version of the model being used.
modelModelThe Modello model.
HelperHelperA helper tool with classical functions useful to generate content from a Modello model API.
+

+
+ + + +
diff --git a/src/site/resources/modello-deps.png b/src/site/resources/modello-deps.png index b9d017176159a251abf81d8a99998e45ba0ad5ae..af9990a8ff5f899354a11567a7afe437435cb372 100644 GIT binary patch literal 49779 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 literal 44563 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 is a framework for code generation from a simple model. Modello generates code from a simple model format: based on a plugin architecture, various types of code and descriptors can be generated from the single model, including Java POJOs, XML/JSON/YAML marshallers/unmarshallers, XSD, JSON Schema - and documentation.

+ and documentation. + Starting with 2.1.0, content can even be generated from Velocity templates for maximum flexibility. +

@@ -33,10 +35,12 @@ + - + +

diff --git a/src/site/xdoc/modello-deps.odg b/src/site/xdoc/modello-deps.odg index 89901ad263fcad6ba37ef5a5d3580d3a689fd6b1..91e756395b0c0a0810abf43d747de9a8ba5ba651 100644 GIT binary patch literal 19466 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

{J*!B6s<$ag@GC1(cg~Ro|LdQJ9V>*AcG_MqV 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 O0R}T*DYDNU!~*~s+{mc_ literal 22910 zcmeFYRZwL?vnIN6cXt|S+@W!&ad&t3jcwfBrIE(1ad&rjx5lAycZcCWC+1-u=H8k6 zd{;!RsI@91BO{|KGb=McMHvW4OaK5D062|wkjQ~x9H0XL0RI_ZzW{btc4jUfKrRRo(W`c%IIL^Y~{@805r2Vbue+YGqZPLv~V&4T3VSnEB-GG4T^1;G}r)u z{|wwOhN_mXcECASn8*+s(a?Sk4L<&o6q6phR>GUw2zJWvS!LZm6RShbp`-}cR-ng6!sxZ;EGZ^^TofKGM`I=8mG zHu%XWCGoivql^4<5{Ih|J~ykkuHU`=woV_tDvWT${d4ttyXL8cgs$WRQT=l(g<*we zmPjE+Rt$TL~?vaLjCM@5O@NY^bNoSgp0qrDfHqS}RCvDYZZ6iwygTS0tLv#rhea!Y66< z9N2^O*vk(OeLt5;aL(lW0^hwH!e)VxeJXO2xS8`&aUM{rU222cgLM(VxB0 zXJF5bzx&`uX5!1fsZ3oHr%1E~s$yMp@PTielYW9{`N*i4!NFe1>r?ff_v$GC{PT{| zgUvK>Y|@g&X68U{BSZ81%A?2kZ1jcY+MU`5S^Bj#`6s#!?FdP4bI(zMYrhmGB|IO2 zh?XG!ENxU>-_X28PqD=`#r(Ay_F&6Dc;QFyM3GrS0L4qvoQ@cIy$&wN6N+(!O<<~? z5Zj@`@XO<0BHczs>U~y3ivlg-8o0WAC(q-X0d5CU>P73afWF%8LY3k(d9O-JkM|D| z#%agQNumc&!q8)@?s*MKV0#S)tl@7;M2;K0E)#doX~(jBbtkQ>=q!CVdk@Ch=JI$g z$cR{!SXOH>CDYhmV(>|3L@LSTzPn>BB3rWddgTCz#eo^>MCnMfZ)15G@7?pM|IM_g z7IT=y%Tl(6o3D%1#2Kz5*D8I|ZhlbL)3MZR+6TFp zGQ~N+tf4V z;S3VIq7v&#R<3lJIy5g`ST53-OM^6(&gfKtsV-9{rJ+nS09s8c#msJd#xbSHI??({ zKS08`kjv$thAn8=x+=Or6!uRgJgdCpgLG{jHvz!U=&hw+L;BBW${r)7|97NX%`;1h z$i-<=`R*}g7F9x=K89m)7t9?6OQ+pHUE1WIv-Ztiotyq!m)D-UjGWWAhCi%$-jsIy zo=^#SS#3q-aYZTwT-ik6Us^Qj85tPBVC>E9M$Ji^T8(I28;nexO`hQ8Y13r;N)yqx zQ}(K;0O5l$B)py~Fn?)|S87el%0`s=n^WkLBlD>PA)PWWKwjVh{`33hnpNNJmY~DC z%p!XN*e7#%?(<3c2#~|fq*!j@P8llM)05q6e#21W$vUsxP$Yu~kKWhXcLBL^x&n)7G})q!XNGWzGTek8=6yco|&Q7$^YSkOJGRj6*mm=pyuY*+*qv3*snyz zqW|76_;xcZ0TOhf;Ba;{qtU5D$SlLRlJ>e?5V2&$L2d;n{%Bl2@ZiOfh3u%fJ2_Q3 zZf&r4*5_;fL;ZJPFu51`@s>&coH$0mt0ie%?UzsO!bGHQs$ByIOM| zvZ3V#a1mvKx(>BocK`7q3h@n_vEpeFi^HNxY^Ru<4tEP5R_ctpJx$pEpf3M&*b74f ze(bdyK~<5phD~Eb4XA~_#IwM7IQMe5DpgSWE&c~X>zdkh@N%bmQ&L7zT@xc5Vk?~! zLyHspL&}wI#-Xv+cd$lUYjTJyub6sduh#=mZ}XA@G%QH77}US~IDF-({Q<`Dd+?Ox z(#enr@pG-w<|)eHtur71Y$cT6VQ;LWedpF=XRA_RlmOt>-waNG#MdC2eYrNU1PO4) zUNEIi_S^~iC14;luX+}u#Oe6D>>B+ed_CXj&mu$PH~)f+@1JYOf35wVx+FgDS1~lQ zrc?L{hCI8P7N5$rN$F1Fs^|W;Byd%tluhcGfZVgl@sX(cD#1uxvPf2LXq#-IV-;I< ziSbX?n;oj}TdLjWcyX5N{bdT3$yiuoDu{7I_$H*r*8YKSGv**Y6=XX&4HudiNY9VNjH5{r){U%A@w|1v|gaIv=z; zR@k%SJ0zVKtvACvMvMPCkT}&@$;GQuALIY%$ulL>Pi4>Op=T)ey}OYLqsp}z8!ETQ z;x`N;@@hz;9_9Ci@n*@WUWMAMJLX&`d@|_&&fIJziYCgzqbI?~wC$aVcjVBbOF&7h zGiso<7?`QOjF^D_dx@V-N6%63px2!}iFWC|c0F#AbHl}4v7Ppv4hR9R`Q21fKx3duzg*u&IuIYIdaFGYzy58Yc zS~ma%^keg|B}g$KUafNxLD8yB$iK0X;RZ4 zytaKv>1FDUJeAdP!GNsw6~~lbQN#u#E$tsD4f3OJMucxh?rjb1oNhZFYddj{$h^80 zRy&G_QL2N+vE0IVKWvF(i&FeP^u`DtFS@qkUB}Q3U*H2-qCK`$gK&qqXfGaLTeBz9 zP}CqYjJM^_@Q6BRQZ8$5f+?$1FA)+mjU>|V6xb3bim}wQpGMq!`q)ban{&uj*|fpe z88xr&=%ko%hwhZn-G~U$1r!gQtL_85*B|Lik-F z)18JD$c!K7|2#cQ;n1XK%ZXx`!br9mKx=cGD&IZv7lMf2=eZHll2=L@LEv#BB!VBM z+t2kNDUz!;N#%#ncD9?>yMWw0b$Tgw-SKLKEzd^#t0Bm~59^|=igCf(c(|%RA^b9# zemD^{nRqro2{ zmc0yXxok0=*Eq*>Z}n_Unrl{NYD&3@RAy97NtrG!SrzoAM>00usap&IHhq$YGrjf| zd8Zd^whQ7KoeQA4u^qPc#zS1jW2qnFP{|9xEH^e`Vz1}@{p;<^FuvN+S@3$uDDQF> zRd`VM(dF2*!%8kjUua%TBbuJYM@1(zL_f$pIDwwo!1=fP^@{uexC|TGS6D;ud7jf9 z1SzNsK3S*Y5J*juyU2QZdUA2Otaetz9?59CMBiu;AGrD^zh_RMx6k!YxeE|C7&OaNn3#ScvC$7d}49q{nCH z%oQ_MHpTraj^60BNrJdj0ySB3&uVhpqWhfItdHP!ANg!Hgmrf6Jgx8EPf3U@ZjyFf z&s^pnnBb{*L5!Ele=FXoYkuNXQ;zcHz>Mxx%B_`Xy&K)6)vENA;0$VBJCrjJ=;sn5 zy~yz0D^}K18_)`UXO~U|!PD z(6$@(SX49x%nAY?RE%$-A@*|Bvib=tC5f2#o;Nt$kqcXB+*tJzAr9{edHZp7xIF9H zT1K;C;>k;~RHYk3lMzI^$;o9RfRLq9oE#pSijC8wGX7Ej{}WJGfOa=-+`Z zK+whwl##U3Pd-3rLdG2ZFC&RIy!Q{pMGCU8l?=qKZE!|>TaC(`2xf9QLZ^}U8Qp@MUt zmg!Shy8Y;>*EjvOzJ`rqe5v=R5jSSZ=}2(Dpr7MYupR5kK2{3IuN zxV_nl45FEf|M7^r;?fJzMR|_W` zI<8DcAy7qBYvv3k+Twz8}oq4cP1NixRzAb>_`mME9l&rmQ zstXdGMPNXkW1&|7wbUYJED`q&E?0Z_N#HmRWad(`FbjmMCGTM&M!{n#PhB5hWVEFl z{n>@nvz}MmYhH8hQ~%=FOS&^Ncu(Uv59sBzOxSAs`gH1Ncl9u8jSNz%AONR4gFGu( zAuf;(@GEidj@E^-rKj~KnEVoN6N)%?{*w+=ESem10fExjiG>BMw-loqELa=lfHiFE z`PM6$<5v_qene1C;jcuo$BeYg^-(EvI9_PXjCubGVc(p(cjZEhm0eE_8Z<5+x6le3 zo=J*K=B}gPzh|dFmt(Qex|l4L(gkg896GgOYAN@aTFEx`#e65k1(Qg;A2-`P7)W76 z_ETJHr6JT<)!mlzH}M#8$9gsUO%{sy!4^BG|2A@8_20e%$`Hfyw)H z3i2X!$g0TEn#IJ^hV1~be!iq}8v6Nt*3gfeA4dN&qpffJ*#nl(e|r$ePh9=WWU-+` zePo(xq9-JJ%Q;7l)$~0+kXpXf4Mb6YOU2#ZA73b~SFu=TG1Y-=N9=pFkv=LzM{PaT z_OnyTK(Bn6DLWUjl75Lb?QUQI@95-c_Az{$iCok^xEOfo+d9`G2+7$8lJ1SKIEw2& z#hq&!snom%UVnHkE!7n&*QzoG43fb%Y~kEJL+HmX@0gZ@q!)9e_iLWEpf_F_5d-3JDSNRi2^g=aYM9Ro`l$r@0oP;UbcB#c4TRsjjb_ z(ve6P$1g2`F1Mo(m{<_VCGDH4H+Na6^^Zn%hKM?F!qKX)FcEvaJdISO+xuVF^>xs- zJC&Inzm2{!Ihy%q4yej;g|g`sLefdp$R56C=ZMS3jnXSKi(L~_wUIV?e6X=`aX$*D zXD_Ju!lhL-5B5kbb$oP(4_sNTMz&%=!RFd=OcAMff0MsUA@NR?)@O>3k1zrRdT86= zDkdKV28XgiMH;Qnq);2YuH##joVN7~J0dH1+A-kA1R8Z}G2=hi(Rrz>@!^c`7)pP? zUbk@&uCMih={E}N&2`41LLuquRv*T&anCl#En~D+VM91hHsd;1*qEe>q zUtO@JidVLDFe2tj;kvxb+e6Cw)w`Y^NeKznlo(^-II&;zDyb*={~Qs7miG&jRjo_a z>AX5W0zQmzTikVf96H`^M&Dl_)yi*9te5b=2`6RATQK8p@N=9vIYvc2KR+KElKy*y zsb8IVzO_PI$Nb5i#dt)E9wDVn6swHMjW2h$=H@^O;EV}Hld7<4ENj%9N#4&S_-t}Z zUgNlSh)J_6A+Sp+GMb(Pu>3eZu|tY`fuckW7hz0=5|EY8PBn`-gaYDv3mA|B zBI7Nzw1-`}R+P(@9V34qKG)V7sS#=Ej89I=O;6~8|8;S_hYlisVt9g^)WzylTW#OJ zZ36ZAW59<{QB60bd|!=Lr!r3_;2LwGZRFtgV8o0RxSJurB3~@C8e$$fHRItiwwTHc zxK$`lB}BI1%Z?tr2oSAt3&?Um3BmC-PQSM(Uxd%(kh~ok!G-NCZH<{PrqcI&HzNfp zCD1PHKq{VQJ@B@6s$s?`Ix z%_MXu!acpdT2dw($yAJeSBf>^qOhg#}Xiyph=%5NukR~%%cIEfvdKSt$IhtnMo%N*;dPF z;%aXNIGe;2Pl_*}j!pad!t*V6dJXSH|5SoVfY5=}#)4mzNj<1vJqtmwh$H#@GC2Zg zx3xV(%2HWrqZL)=LUv3Hll`?Qf^Q|ur=V8bx{8C_{lY>qX5;{+)^%$MiRG0QcQ?1{ zN%O~N!X9{LUv+i$=}c}UyEBlX>hSh<&19%(74zAG^;lbFODX%J>?+=xyHJX#OAt$a zWsM&AZ}W>uwIKbFA~mGxx*eFHiZBuVvy;*!>b`CNm_1eN-prE0fR6N(#N}g5%QL<0 zWXYG;_SY9rr`FxRzKQbcsQ|DnS%RSRUHbO4;0e&1z3V4R3_G8%6 z5^Dq`$37>%JVS30a&oV2>76U%TELWl6{jrkST16DSIzTZ6gros#YL*$KZ;ANK6Sg;8Kltd zI$sO8_W_lsfkWh$#GB)eeR7dwQv)$@0JrGEnK=2(3P@)DOG_w-aLQVX#`ODKJw zUivCO-1E9G$>MT~ri<^{>zHRecTswIKJ-bT;S&*+s$yd2z(aLBzhXFedOi|J6aAQ@ zY;*OSOqH0GYcy*>-s<)<4eI>cwK4?jKi}9kzlRhZ4NvbI6G=-R+CQ&r>6{W;#9{9K z8>7?FDwU#)9RdZ~&vb%A2u4o0&VFIq{OTmbGl+*^vHnNYI=b}ynhhedeDVCLtI**U z^>-;c%q2r00Aqiy5Uyrik5Pe(@bdT=kBEpK(>mAf@UYm3O45S)h;1@@$R9A=M;sSc zY(8Uv)<6U@k(y}3;vC9D0Ai>U* zo7DR`QUCCvMo~$;xM&q~mm|2_mQ|33MJ1m?$3sd;oW}H53r06%HR-|U9Y+Q?DEoTu z${GW={;qpSl+>qZsn7@{o$Y9K>X&OodZaQnaQGQ{*!zCA3ux+U0iXL@7x*BiswdZ0 z1<6XU{ve*oliFl+RdofU4O%kJE#aebK&Jwsg|tZs$r6BMXe<0mp+$a-LLHi@F8dU;gMojmQ+2* z-dDZkhAWv|*SB?e_ApeC|A_B+RAQV5OJ28zfA%2TI)C}`? z4W_V$_Km<$lP;uADLv4jOZJ?udLOUu;u6g8-5!l27h^-M9C@;5p#SH4)qlC}_B68T zL;hV6uMSxi?N&^Qo-H$|;9h0=)5K+)SUS}>2!^&aB68pk@lw1+Q&i%QYJSA|6ig3- zE3D>}H3|HFe$ zz3w^sa~!IvA>?9VUex_GINe9>c(!8F{WiOo^E9B+eNAA%<#+Kt7iq;(n+1iyP#}N+ zSh&6y75M9)hwZs(-E%#{{8#d*iUqn9-=^TSbu|LPIfy){bTx`kW)W*_r*3Cwfe&@+ zg5+a|>GQzh!^zC-x%%Vebx`?Rs#X~t^Ljv+Th7}xC-3ll1+diQ)Ho0suvWPb1?PTtzPulZ3 z?(@~J@%rs`>oL!%@CwK8<6iJ7Xv_EQ8YM3F4BBS+^!D)%(FNq+j~~PW$=6069K zgwkTUf}bzafVj8`6S%wnVorn$_VN;H2sy%7J(<Y&M|rb|MoX}mSxs`$SH=tldkV6$r~LB} zMd5LY`B2D1)}n*k2$89Vm6qlx3G9kfsG3>8!hk))IEXC@9lm9hR#m{miG`3-84TA_ zMlyRKaM|r+*e{5KO5dZ_!u0bZNCKiaeAvqG=*pM5u13iodrmU3tCzUH+qju!zTO$9 z$ily5DG@cY?CHH%;qBn^qx;gAZk=0GVn|_&>t3dtoiA%DGbaP3CG*woQf1Ora?+nt z{h1k@{wu@C#1x1CCja~uUv&sjwWu=5Pr-8F6JkCsKFxGZu}GuGh+cjsZ462-e!FV+ z=P(?<1r4M<64 z$t`1t!+xRVhS;eE^}SaG_H_X_p+n&(kJ6K6<~V}aCh*-tIc`~&2tcmRSj9sUbozQ4 zKQv0iW!Y5iCJKgAq9-Z22)*gC>vsPN!AU6xpd02SNe>PVa%-iiszLF>5h~6TcBh;N z7f<=)Ox3l(7if=l^JUy#dipDySu1>A`t7MHkp8<0HPzyN(D6&k&Z0NP87BTP>|`vW zc{pp$xj3O|@fLPAW+~Ddr)jni8kKUf^4$SnL%S36FI@V7l5-~dI8ur8PR#4g6L+l@ z(1My?h{vUv=mc4Q3jDND)^lt>fA)4YHl|F~apof2F331Wn9x*OKpkekWG>KI+&cJ4 z#uiBaR(JBjDm=H zu*MkQDlNVzazkgu+(e#0>Yc*=XW#$t5yIyV0?Fr7b#290U7G?uD-4-`+sRQKoWPcN zERzM&=SwBl-z(BN03|SRTJtdyuxgYNCzaf@Hs7LDVC-dbeSzWc!JG6RnCkr2|RT}GR+fJp`N$XYR zIV;~P?WpFZ3jMBv&SqwC`L<+IDU*6&?c~vttOw!U+v(U?#ndz`v@A3k%v7S-eD);3 z?Ile3Q_t7oe>NW6tU$iJ(S6o^>X8&dA-|bNsvCLtdC=73iK--PpKtk`ICp=fZGlY> z+8>&=qMg`vYT52F!)|S=vP>s`_iq7@TLAAwvZX@{O(q_$Vvv<(R3-6w+>w@QT*I5` zY9s6XSQ_YsxhU5tmrqqu0bV4VXfaz=`9(Q^t~!^5YF9zvi%%DB-JjRPf~bhItNZIY z{9a&QIicTDqCg5WdvOvxZndf#7g5#n5ebmf&K02=1)ahX!{VB;NbJ=zCo4O9K=j#I zG<*Vuw#fq%P5f>Hl*6KU!#xyY{M4)QUqGlM@dJkrh{~fGxs6|Rym|K4tBU!bIxS#e zK;)IskALL`*$lMrSy^TI3xm2nqw@0dlMK2`NJc>S$JTkK&YJ_BoVP~<_xH3^qW z^r;opLFKi4KnQMtIV9H%P>k1`h{#+QFq-)MePbkwZQJ$;(_LmUlJa<^ya(}HZK?sE zZVn(+joY9?-Hv0p@VK-#Z>Qd&Lw6agmJIZ8H>uClu01lt{uzMM;oy7FQAA@QpM{BK zT0HYWf1(o+VZNPMZ_?CCU5wW^!wU5dKa9=NQy{ycf4DfL@&j$M281uCQcO_NB{#kMg=bu2Y0eW){w?gjMCn z%sl7^s+2D}wXUC?Wp2e; zykJL#nARaQX*Fd}>dG?Exx-;B!28>EoFGMMe+DKK;}UG5_*bzAH^|le0ILZ9$w&OU zGMv4Bl^!nc=r=#JR7u-t_jAj)b{kaxl|1Qm>I!#_ImNKUf>P+7FxS{o4;CSkh$RgF znGb3=3Cb|)%xYJocI4a$D4&^9nmz3%uVBF_)w=PIZ+uHjv*R={i^b>l>kWNk0J8_I zurYPs%{%zLu5EV+Jgk^#?`7#XJfj%c)N0BW&Xt#!mzBMEce(T7#fa}vp9=g|VMMBD zG25?6U-nIv`W&(Z^N?7MeNVvb$d89_~elkJS$Z%H#`Wa zDE=zQ$`&b7*U%HdhYW$@JovNK!9dREaHcFq&ZM7J{c5Q|4TJG+G+rZ`9Xraz3eJ3i zkEcDa#|wVnx2HqF&*z<;9ja`1V@Jo?(|byExD^L(W`^^X=n__5(F-^Z6Dri6#3@zU zV&E8wH$;`OFqcxOC zQPXC<#dUxD>o#M-4Kx6LwI6Ek9^ZMkdx_hfVc$cya0K)_%qnAbgS7IsPxze6G~CuG-JzM1*v+wy6O( zd~kfwczDM5HW{Qr@OUMxjHFYLzjqPqgsuz28w9A7COEJ*vy+o#YiJ#@HO1nA_pKolTwunO7AGOOjBuu?0Ya4#-GkN5j!7??1_xU%D+ z#&fT6Mq|zeVcWO4Oo!Zz^7wTT&uuN3CG^9A>lU^ZILMkmzd92bEhao7!jLy!uMOUh zIv+P7*7%0)CE6Vp5A5Vky1%9Cp&xgPei1X{#0PN)!9zhnkaA>AP521YQOq+;bxW765HbDby7t%%UkfuqJ_30_>*iI*TW6^ zd}FxV-R(q^zfw5FJB7J4rd?5k+Wka74VJGF40kx=NK&=;MJ?ZBNP+B)UBjMcoY~@r zS%|C_o3@ObL#u~5Z>Df)&9BJD5~w|pGUPB(K!zDLasaDAh2E&e;T(}@yJ_uIox9PY zw7Jw$8m|87;0nFdk}53rAs8;R%*3GIb)P_4nR)%HBn3Dx4g5uRP`>TyX%>5GcR8K7 zQDy$DE#FBJ7KDTzQZnl}`?jExDr9?1t0!gT4?m|vzJzvg-b2tHce*?L8g>M8yg_YJ zR))7sSyj~^bzS7HDo0`}6&2fvO?f@m!uYlq>Y0^65l8ErjyYY9@gAm0koQA*sskG-+=9oE*O<=6(35#*pCwFm3XFb&^d4xFPZe047~w z<#gVcXyn-v3Ny6*>Ioh6;AeHk4kF_??=${j?jrw}1F6?B_-&ZNn_Id6J4xgW^~(gI zqITH*e@8m}9|9u&f3p8;AW6(83h9M`{Y7X^-+yp3QeyHyt3(U~{~L@03k&;S=$`+q z{LkmV&^=}@MvU%uwlPV)v1_E5Vvq0eQE3cAhE$G8dA;PX4Brb~ONn zxo)Nv$A5nc#$@_iFZGCV9I~h6h&tg+3e}-{9Kp%*ejg|kAzYcf!X0dvzSYcz1(^mq zO}2?s!w~G0jmRVy_N#;O6qHm|G^nb@)GV-+>EwySWz97>uvcW-l=|XqFSe$Tx$tD| zs^Hr=|8(!vFYtBy$=&W`XK|9fix{CDjEud5TabW+e3%Y@wxDbieBYjY8pc{Zq{>!V z*w~ehTxSI6bWNnd!|#&#%TbrT#!?f1Ty)R>ct0si_dTQ44E#0jv|y*h_fomz5c9cI zqbkrrIg_|Y4)Me9@BMv4Dz0pxgb;TTy{<&-G1ESE5_9r=k#~w0dDlH)%ozQU#lt(L zjQ7&_V0?o$in6Eb$4jaqvKfU{;&5D61vdqOi-wbBZ}d?d%6r<+W4!}Z49P?WDH=+4 zEd!V4^-wlXv~8#X+}%O!!vz~j{OS}MtsS+CLUN8fbX}g$I?~sEYa^LV1M98It-g-0 z`|Qmt$E&Qm!TjKO)|oV7-zi<=x7Z~q?E6zslF(i9c^VCWc9AbDUodx@f+cSViZU>;_P}`g%`Ze%FC+l)zuyyxUz@|(%*DmZ z-op7m`(i^|&$)~Xw`eS6=CVkBpXpiTFB z;_-sB;o^7sf1(qSn5;u#GYA4i^CvG4df(t3lL05Qw9o>7)DBdo0M{Vx`}ZSj>87r_ zpTzp>SO?Kii^?>yd*e?hiNW=W)Kbbco$W;U!SPPiJ<7esXk9tC*-PKtPbTHXwBmdP zb5L(6dD3e1HEBEOVUy=xUP0{l{4TT_tW8I#g4^kKcUhHyhc^|Y#9FU%{qh&h_PZjV zdaX;{Ke{D$??$K4jcYNEOP`U%LB6}>I2q#+L+#+j65wok}+=C?sN zl7PQ6c8=7r8J-67>FnEfrM7bAb@|79zdeE0okUjLK#Zk=&s z#RO)P5>nV7;Rm+(6`}ig3isuK9KdEF&sXC&dg9v*j3Kld>J*>sExFXk10Q0XvMgA> zg%jV(^o)`82-Cq7E9o2Bm<0<2<}7j#W1y-yi{|@?$26Ht>&z1PZ$3xe{Klh zR=9%bJI+VGcVi*(>_A8;C)Kd4gq~!s4DkuCLwE zNnYgR$kf~3CHyG@dIR!JC7_+%6)L%f`**%f2F0$pJ?XR-E^t)4Dpdwi9uD8x-$If6 zl=T}-&O*YW2#U-OJl-vimO#Wtl<{7)F? z<>=Mz&u+t!qwiEWh=qh5JSTZyFjcRx_4CP|FA)9Bve{faKIn1x`DH_ zVQQtQGt|N49m^9dko(b4nkSNID71MZA|!+r9IQ*R5ZNjdBB&GhBagQ{x+)6z;s6iZ z<+H;Ed}U2skVjYAo6wkvF-paQ7qX6n2nFL!LqsmM)`3=fr>+bWkW%%SQ^O|?H3?H%5Z z*v4LeBz+cvKM8nmy5I344}f?0F0GWVtQX`KXrvmgT4j?jF3Kq-KKGT?c`pmNV{vsA zW64i;CqLCI66iS{%-^CeWU`mkgCiK32wJ+p?L$l^&}XF!A8@FV`$>v@I8H%qB6n?yGxsqV@p#*7pSW1Mf(i1 zQq7T=OS^5gp@wv`D{adp)h2Egc-{5e!bStc{V0RJ*>;@6+2KnmaV#v#uOerI@bnGmt>nA9P_4=GxrDo}_YHWupCKQbg zMq*2t&Xx@mqnhj_E<2uv@X67FG)LP|>8HyG#6SqNbP4KNB7Z}H5I^{Lqb)M>D{7#} z%K!%ZmcOsRfMlU>6^}ys>D(qAVWA1r^TG%Ce>{`+xB-?SGyp(J@&DwR5WYN%*BtOXP@xjA@|(`FZLu?=Q?2L|JjGK`xMO#Cu4@&X*cw7~9(-pp8 z246CaN7GME^Pu$GyEUV7oK*4Np70`e5X?!$a&G@`1O@_Ll^f#`d(;&sF0= zLMzM7o1q4Zx*HaK{XeD{f^)j~_{xbGmFCbogh z@3_l<4;C0h-bf6>KDDyYEJM7w9+CuTzCS(f0IO~^K@3B5Li>kCl%135896ycR#dbZ ziUeNY8JAq0_5BW7+$>hzJT&JrO&+J~UMX&P2j*K)*tbQUw-t|5h@PjyaZv|*Ao;3C ziJZ|81zvJU1o@t9@P9!#yQgU({mQ2p1xq7CCbwb$T=wLBm!kH;#J!9-{&&WVNM=9j zoL=a$N@Gbw0%?e~Zq&fIXSou>Vm;nA7L=QcHNbMPJ=K#|vKD{g`x|cd_^tOY7TJ9N zgh{US_md_N1U`2dUF=K+R7DA(GjOeSO|wtTT@pni-LPOs!Hf90*bs6Bsjs8-f)!`G z%kl{MO)`YtnqQ;2aC7)iDLxJ`zSnTxws#WSM4$L_pLjT$9Vum4fzL_PR|(f_%j4

V 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 Date: Tue, 27 Dec 2022 11:05:31 +0100 Subject: [PATCH 10/11] add generatedBy context variable --- .../codehaus/modello/plugin/velocity/VelocityGenerator.java | 1 + .../modello-plugin-velocity/src/site/xdoc/index.xml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java index 9f9c95b8e..6f9301113 100644 --- a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java @@ -77,6 +77,7 @@ public void generate( Model model, Properties parameters ) throws ModelloExcepti for ( String templatePath : templates.split( "," ) ) { Template template = velocity.getTemplate( templatePath ); + context.put( "generatedBy", "Generated by Modello Velocity from " + templatePath + " template, any modifications will be overwritten." ); try ( Writer w = new RedirectingWriter( Paths.get( output ) ) ) { diff --git a/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml index 7bffb3492..88ecbdc1f 100644 --- a/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml +++ b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml @@ -34,6 +34,9 @@ HelperHelper A helper tool with classical functions useful to generate content from a Modello model API. + generatedByString + "Generated by Modello Velocity from " + templatePath + " template, any modifications will be overwritten." +

From ea0cf4be4b28a73164efb54ad1c8c8582b278fa2 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 28 Dec 2022 10:43:01 +0100 Subject: [PATCH 11/11] Rename #REDIRECT to #SAVE-OUTPUT-TO --- .../org/codehaus/modello/maven/ModelloVelocityMojo.java | 4 ++-- .../codehaus/modello/plugin/velocity/VelocityGenerator.java | 6 ++++-- .../modello-plugin-velocity/src/site/xdoc/index.xml | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java index 8d8ac54d7..b33346ac8 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/ModelloVelocityMojo.java @@ -45,14 +45,14 @@ *
  • {@code Helper}: a {@link org.codehaus.modello.plugin.velocity.Helper} object instance
  • *
  • any additional parameters specified using the {@link #params} property
  • * - * The output file is controlled from within the template using the {@code #MODELLO-VELOCITY#REDIRECT} + * The output file is controlled from within the template using the {@code #MODELLO-VELOCITY#SAVE-OUTPUT-TO} * VTL directive. * This allows a single template to generate multiple files. For example, the following * directive will redirect further output from the template to a file named * {@code org/apache/maven/api/model/Plugin.java} if the variable {@code package} is set to * {@code org.apache.maven.api.model} and the variable {@code className} is set to {@code Plugin}. *

    - * {@code #MODELLO-VELOCITY#REDIRECT ${package.replace('.','/')}/${className}.java} + * {@code #MODELLO-VELOCITY#SAVE-OUTPUT-TO ${package.replace('.','/')}/${className}.java} */ @Mojo( name = "velocity", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true ) public class ModelloVelocityMojo diff --git a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java index 6f9301113..6a01969fb 100644 --- a/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java +++ b/modello-plugins/modello-plugin-velocity/src/main/java/org/codehaus/modello/plugin/velocity/VelocityGenerator.java @@ -46,6 +46,8 @@ public class VelocityGenerator public static final String VELOCITY_PARAMETERS = "modello.velocity.parameters"; + public static final String MODELLO_VELOCITY_OUTPUT = "#MODELLO-VELOCITY#SAVE-OUTPUT-TO "; + @Override public void generate( Model model, Properties parameters ) throws ModelloException { @@ -126,9 +128,9 @@ public void write( char[] cbuf, int off, int len ) throws IOException protected void writeLine( String line ) throws IOException { - if ( line.startsWith( "#MODELLO-VELOCITY#REDIRECT " ) ) + if ( line.startsWith( MODELLO_VELOCITY_OUTPUT ) ) { - String file = line.substring( "#MODELLO-VELOCITY#REDIRECT ".length() ); + String file = line.substring( MODELLO_VELOCITY_OUTPUT.length() ); if ( current != null ) { current.close(); diff --git a/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml index 88ecbdc1f..e260e5642 100644 --- a/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml +++ b/modello-plugins/modello-plugin-velocity/src/site/xdoc/index.xml @@ -18,7 +18,7 @@

    The plugin is configured with a list of template files to evaluate.

    -

    During template evaluation, #MODELLO-VELOCITY#REDIRECT {relative path to file} pseudo macro is available to send the rendered content to a file.

    +

    During template evaluation, #MODELLO-VELOCITY#SAVE-OUTPUT-TO {relative path to file} pseudo macro is available to send the rendered content to a file.

    The Velocity context contains some variables related to the Modello model context that you can use:
    VariableTypeDescription