From 40be0315fee628674a72a42da4f575ea2b1743eb Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 26 Apr 2024 16:22:51 +0200 Subject: [PATCH] Support addition of license header to generated files --- .../modello/ModelloParameterConstants.java | 7 ++++ .../plugin/AbstractModelloGenerator.java | 18 ++++++++++ .../maven/AbstractModelloGeneratorMojo.java | 33 ++++++++++++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/modello-core/src/main/java/org/codehaus/modello/ModelloParameterConstants.java b/modello-core/src/main/java/org/codehaus/modello/ModelloParameterConstants.java index 38fc0b711..0a329be81 100644 --- a/modello-core/src/main/java/org/codehaus/modello/ModelloParameterConstants.java +++ b/modello-core/src/main/java/org/codehaus/modello/ModelloParameterConstants.java @@ -80,5 +80,12 @@ public class ModelloParameterConstants { */ public static final String XSD_ENFORCE_MANDATORY_ELEMENTS = "modello.xsd.enforce.mandatory.element"; + /** + * The license text as string, to be added to generated files, if needed. + * + * @since 2.3.1 + */ + public static final String LICENSE_TEXT = "modello.license.text"; + private ModelloParameterConstants() {} } diff --git a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java index a297210db..891499018 100644 --- a/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java +++ b/modello-core/src/main/java/org/codehaus/modello/plugin/AbstractModelloGenerator.java @@ -66,6 +66,8 @@ public abstract class AbstractModelloGenerator implements ModelloGenerator { private String encoding; + private String licenseText; + @Inject private BuildContext buildContext; @@ -85,6 +87,8 @@ protected void initialize(Model model, Properties parameters) throws ModelloExce packageWithVersion = Boolean.valueOf(getParameter(parameters, ModelloParameterConstants.PACKAGE_WITH_VERSION)); encoding = parameters.getProperty(ModelloParameterConstants.ENCODING); + + licenseText = parameters.getProperty(ModelloParameterConstants.LICENSE_TEXT); } protected Model getModel() { @@ -108,6 +112,16 @@ protected String getEncoding() { } protected String getHeader() { + String header = getLicenseHeader(); + if (header == null) { + return getGeneratedHeader(); + } + header += "\n"; + header += getGeneratedHeader(); + return header; + } + + private String getGeneratedHeader() { String version = getClass().getPackage().getImplementationVersion(); return "=================== DO NOT EDIT THIS FILE ====================\n" + "Generated by Modello" + ((version == null) ? "" : (' ' + version)) + ",\n" @@ -115,6 +129,10 @@ protected String getHeader() { + "=============================================================="; } + private String getLicenseHeader() { + return licenseText; + } + protected boolean isClassInModel(String fieldType, Model model) { try { return model.getClass(fieldType, generatedVersion) != null; diff --git a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/AbstractModelloGeneratorMojo.java b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/AbstractModelloGeneratorMojo.java index 762b57845..526e096a2 100644 --- a/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/AbstractModelloGeneratorMojo.java +++ b/modello-maven-plugin/src/main/java/org/codehaus/modello/maven/AbstractModelloGeneratorMojo.java @@ -25,6 +25,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -95,6 +99,15 @@ public abstract class AbstractModelloGeneratorMojo extends AbstractMojo { @Parameter private List packagedVersions = new ArrayList(); + /** + * The contents of license header, verbatim. It may be file path and if file exists, will be loaded up. Otherwise, + * the contents of this parameter is reused as-is. + * + * @since 2.3.1 + */ + @Parameter + private String licenseText; + /** * @since 1.0.1 */ @@ -160,11 +173,29 @@ public void execute() throws MojoExecutionException { parameters.setProperty(ModelloParameterConstants.PACKAGE_WITH_VERSION, Boolean.toString(packageWithVersion)); - if (packagedVersions.size() > 0) { + if (!packagedVersions.isEmpty()) { parameters.setProperty( ModelloParameterConstants.ALL_VERSIONS, StringUtils.join(packagedVersions.iterator(), ",")); } + if (licenseText != null && !licenseText.trim().isEmpty()) { + String license = ""; + try { + Path licenseFile = Paths.get(licenseText); + if (Files.isRegularFile(licenseFile)) { + license = String.join("\n", Files.readAllLines(licenseFile)); + } + } catch (IOException e) { + throw new MojoExecutionException("Could not load up license text from " + licenseText, e); + } catch (InvalidPathException e) { + // ignore, is verbatim text probably + } + if (license.isEmpty()) { + license = licenseText; + } + parameters.setProperty(ModelloParameterConstants.LICENSE_TEXT, license); + } + customizeParameters(parameters); // ----------------------------------------------------------------------