From 40be0315fee628674a72a42da4f575ea2b1743eb Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 26 Apr 2024 16:22:51 +0200 Subject: [PATCH 1/4] 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); // ---------------------------------------------------------------------- From 24abd59c88f886fabadaa8c0592c7bf2bce1d676 Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Fri, 26 Apr 2024 16:35:10 +0200 Subject: [PATCH 2/4] Make new methods protected as all the rest is --- .../org/codehaus/modello/plugin/AbstractModelloGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 891499018..b30dc2fb0 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 @@ -121,7 +121,7 @@ protected String getHeader() { return header; } - private String getGeneratedHeader() { + protected String getGeneratedHeader() { String version = getClass().getPackage().getImplementationVersion(); return "=================== DO NOT EDIT THIS FILE ====================\n" + "Generated by Modello" + ((version == null) ? "" : (' ' + version)) + ",\n" @@ -129,7 +129,7 @@ private String getGeneratedHeader() { + "=============================================================="; } - private String getLicenseHeader() { + protected String getLicenseHeader() { return licenseText; } From 9c5b114570a5a513a6d7ef2e0d29b11558a15bcd Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 30 Apr 2024 12:05:59 +0200 Subject: [PATCH 3/4] PR comments --- .../plugin/AbstractModelloGenerator.java | 11 +++--- .../src/it/maven-model/pom.xml | 2 ++ .../src/it/maven-model/src/main/mdo/maven.mdo | 5 ++- .../maven/AbstractModelloGeneratorMojo.java | 36 ++++++++++--------- 4 files changed, 31 insertions(+), 23 deletions(-) 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 b30dc2fb0..23170bd7c 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 @@ -84,7 +84,8 @@ protected void initialize(Model model, Properties parameters) throws ModelloExce generatedVersion = new Version(version); - packageWithVersion = Boolean.valueOf(getParameter(parameters, ModelloParameterConstants.PACKAGE_WITH_VERSION)); + packageWithVersion = + Boolean.parseBoolean(getParameter(parameters, ModelloParameterConstants.PACKAGE_WITH_VERSION)); encoding = parameters.getProperty(ModelloParameterConstants.ENCODING); @@ -116,16 +117,16 @@ protected String getHeader() { if (header == null) { return getGeneratedHeader(); } - header += "\n"; + header += System.lineSeparator(); header += getGeneratedHeader(); return header; } protected String getGeneratedHeader() { String version = getClass().getPackage().getImplementationVersion(); - return "=================== DO NOT EDIT THIS FILE ====================\n" - + "Generated by Modello" + ((version == null) ? "" : (' ' + version)) + ",\n" - + "any modifications will be overwritten.\n" + return "=================== DO NOT EDIT THIS FILE ====================" + System.lineSeparator() + + "Generated by Modello" + ((version == null) ? "" : (' ' + version)) + "," + System.lineSeparator() + + "any modifications will be overwritten." + System.lineSeparator() + "=============================================================="; } diff --git a/modello-maven-plugin/src/it/maven-model/pom.xml b/modello-maven-plugin/src/it/maven-model/pom.xml index 1c125fb7f..ade38bc61 100644 --- a/modello-maven-plugin/src/it/maven-model/pom.xml +++ b/modello-maven-plugin/src/it/maven-model/pom.xml @@ -28,12 +28,14 @@ src/main/mdo/maven.mdo + The license of this file java xpp3-reader + xsd diff --git a/modello-maven-plugin/src/it/maven-model/src/main/mdo/maven.mdo b/modello-maven-plugin/src/it/maven-model/src/main/mdo/maven.mdo index e07e0e2aa..0a6bdfaf3 100644 --- a/modello-maven-plugin/src/it/maven-model/src/main/mdo/maven.mdo +++ b/modello-maven-plugin/src/it/maven-model/src/main/mdo/maven.mdo @@ -23,7 +23,10 @@ | definition of these types | --> - + maven Maven 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. + * The contents of license header text, verbatim. * * @since 2.3.1 */ @Parameter private String licenseText; + /** + * The file that contains license header text. If both configured, the {@link #licenseText} prevails. + * + * @since 2.3.1 + */ + @Parameter + private File licenseFile; + /** * @since 1.0.1 */ @@ -178,20 +182,18 @@ public void execute() throws MojoExecutionException { ModelloParameterConstants.ALL_VERSIONS, StringUtils.join(packagedVersions.iterator(), ",")); } - if (licenseText != null && !licenseText.trim().isEmpty()) { + if (licenseText != null || licenseFile != null) { 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()) { + if (licenseText != null) { + // licenseText prevails license = licenseText; + } else { + try { + // load it up and hard fail if cannot, as it is user misconfiguration + license = String.join(System.lineSeparator(), Files.readAllLines(licenseFile.toPath())); + } catch (IOException e) { + throw new MojoExecutionException("Could not load up license text from " + licenseFile, e); + } } parameters.setProperty(ModelloParameterConstants.LICENSE_TEXT, license); } From 34ddd7ad09f649827ace8ae263c5ddcd5340670e Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 30 Apr 2024 14:13:47 +0200 Subject: [PATCH 4/4] Add verify that checks license is present in all generated files --- .../src/it/maven-model/verify.groovy | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 modello-maven-plugin/src/it/maven-model/verify.groovy diff --git a/modello-maven-plugin/src/it/maven-model/verify.groovy b/modello-maven-plugin/src/it/maven-model/verify.groovy new file mode 100644 index 000000000..7b9557bf9 --- /dev/null +++ b/modello-maven-plugin/src/it/maven-model/verify.groovy @@ -0,0 +1,32 @@ +/* + * 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. + */ + +File generatedSources = new File(basedir, "target/generated-sources/modello") +File generatedSite = new File(basedir, "target/generated-site/resources/xsd") +assert generatedSources.exists() +assert generatedSources.isDirectory() +assert generatedSite.exists() +assert generatedSite.isDirectory() + +String javaSource = new File(generatedSources, "org/apache/maven/model/Model.java").text +String xsdSource = new File(generatedSite, "maven-4.0.0.xsd").text + +// due formatting issues (empty lines lost) let's stick with trivial license and assertion for now +assert javaSource.contains("The license of this file") +assert xsdSource.contains("The license of this file")