From b795b61b46749eb0401c044997fcb2c71701da22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= Date: Sat, 23 Mar 2024 03:30:18 +0100 Subject: [PATCH] convert external reference type by value instead of default CONSTANT_NAME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #463 Signed-off-by: Hervé Boutemy --- .../maven/CycloneDxAggregateMojo.java | 3 +- .../org/cyclonedx/maven/CycloneDxMojo.java | 3 +- .../cyclonedx/maven/CycloneDxPackageMojo.java | 3 +- .../maven/ExtendedMojoConfigurator.java | 16 +++++++++++ .../maven/ExternalReferenceTypeConverter.java | 28 +++++++++++++++++++ src/site/markdown/external-references.md | 6 ++-- .../external-reference/child/pom.xml | 2 +- src/test/resources/external-reference/pom.xml | 4 +-- 8 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/cyclonedx/maven/ExtendedMojoConfigurator.java create mode 100644 src/main/java/org/cyclonedx/maven/ExternalReferenceTypeConverter.java diff --git a/src/main/java/org/cyclonedx/maven/CycloneDxAggregateMojo.java b/src/main/java/org/cyclonedx/maven/CycloneDxAggregateMojo.java index 92e8f59b..416596ad 100644 --- a/src/main/java/org/cyclonedx/maven/CycloneDxAggregateMojo.java +++ b/src/main/java/org/cyclonedx/maven/CycloneDxAggregateMojo.java @@ -42,7 +42,8 @@ defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true, aggregator = true, - requiresOnline = true + requiresOnline = true, + configurator = "cyclonedx-mojo-component-configurator" ) public class CycloneDxAggregateMojo extends CycloneDxMojo { @Parameter(property = "reactorProjects", readonly = true, required = true) diff --git a/src/main/java/org/cyclonedx/maven/CycloneDxMojo.java b/src/main/java/org/cyclonedx/maven/CycloneDxMojo.java index 397dc260..2ca6e15a 100644 --- a/src/main/java/org/cyclonedx/maven/CycloneDxMojo.java +++ b/src/main/java/org/cyclonedx/maven/CycloneDxMojo.java @@ -43,7 +43,8 @@ name = "makeBom", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true, - requiresOnline = true + requiresOnline = true, + configurator = "cyclonedx-mojo-component-configurator" ) public class CycloneDxMojo extends BaseCycloneDxMojo { diff --git a/src/main/java/org/cyclonedx/maven/CycloneDxPackageMojo.java b/src/main/java/org/cyclonedx/maven/CycloneDxPackageMojo.java index 656ed222..828d1037 100644 --- a/src/main/java/org/cyclonedx/maven/CycloneDxPackageMojo.java +++ b/src/main/java/org/cyclonedx/maven/CycloneDxPackageMojo.java @@ -42,7 +42,8 @@ defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true, aggregator = true, - requiresOnline = true + requiresOnline = true, + configurator = "cyclonedx-mojo-component-configurator" ) public class CycloneDxPackageMojo extends BaseCycloneDxMojo { @Parameter(property = "reactorProjects", readonly = true, required = true) diff --git a/src/main/java/org/cyclonedx/maven/ExtendedMojoConfigurator.java b/src/main/java/org/cyclonedx/maven/ExtendedMojoConfigurator.java new file mode 100644 index 00000000..881c8143 --- /dev/null +++ b/src/main/java/org/cyclonedx/maven/ExtendedMojoConfigurator.java @@ -0,0 +1,16 @@ +package org.cyclonedx.maven; + +import org.codehaus.plexus.component.configurator.BasicComponentConfigurator; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException; + +import javax.inject.Named; + +@Named("cyclonedx-mojo-component-configurator") +public class ExtendedMojoConfigurator extends BasicComponentConfigurator implements Initializable { + + @Override + public void initialize() throws InitializationException { + converterLookup.registerConverter(new ExternalReferenceTypeConverter()); + } +} diff --git a/src/main/java/org/cyclonedx/maven/ExternalReferenceTypeConverter.java b/src/main/java/org/cyclonedx/maven/ExternalReferenceTypeConverter.java new file mode 100644 index 00000000..03451f57 --- /dev/null +++ b/src/main/java/org/cyclonedx/maven/ExternalReferenceTypeConverter.java @@ -0,0 +1,28 @@ +package org.cyclonedx.maven; + +import org.codehaus.plexus.component.configurator.ComponentConfigurationException; +import org.codehaus.plexus.component.configurator.converters.basic.AbstractBasicConverter; + +import org.cyclonedx.model.ExternalReference; + +/** + * Custom Plexus BasicConverter to instantiate ExternalReference.Type from a String. + * + * @see ExternalReference.Type + */ +public class ExternalReferenceTypeConverter extends AbstractBasicConverter { + + @Override + public boolean canConvert(Class type) { + return ExternalReference.Type.class.isAssignableFrom(type); + } + + @Override + public Object fromString(String string) throws ComponentConfigurationException { + Object value = ExternalReference.Type.fromString(string); + if (value == null) { + throw new ComponentConfigurationException("Unsupported ExternalReference type: " + string); + } + return value; + } +} diff --git a/src/site/markdown/external-references.md b/src/site/markdown/external-references.md index f02006d7..a482c0bc 100644 --- a/src/site/markdown/external-references.md +++ b/src/site/markdown/external-references.md @@ -38,7 +38,7 @@ You can add more external references the component that the BOM describes by plu - EXTERNAL_REFERENCE_TYPE<-- for "external-reference-type"--> + ... external-reference-type ... ... value ... (optional) comment @@ -47,11 +47,9 @@ You can add more external references the component that the BOM describes by plu ``` -Notice that the type value in the plugin configuration refers to a [CycloneDX Core (Java) library constant name][external-reference-type-constants] -corresponding to [CycloneDX type][external-reference-type]. +See valid [CycloneDX external reference types][external-reference-type]. [maven-model]: https://maven.apache.org/ref/current/maven-model/maven.html [metadata-component]: https://cyclonedx.org/docs/1.5/json/#metadata_component [components]: https://cyclonedx.org/docs/1.5/json/#components [external-reference-type]: https://cyclonedx.org/docs/1.5/json/#metadata_component_externalReferences_items_type -[external-reference-type-constants]: https://cyclonedx.github.io/cyclonedx-core-java/org/cyclonedx/model/ExternalReference.Type.html \ No newline at end of file diff --git a/src/test/resources/external-reference/child/pom.xml b/src/test/resources/external-reference/child/pom.xml index 1f0c7b25..d8fb06b1 100644 --- a/src/test/resources/external-reference/child/pom.xml +++ b/src/test/resources/external-reference/child/pom.xml @@ -31,7 +31,7 @@ 1.4 - CHAT + chat https://acme.com/child diff --git a/src/test/resources/external-reference/pom.xml b/src/test/resources/external-reference/pom.xml index faf4ab32..3c170df1 100644 --- a/src/test/resources/external-reference/pom.xml +++ b/src/test/resources/external-reference/pom.xml @@ -90,12 +90,12 @@ json - CHAT + chat https://acme.com/parent optional comment - RELEASE_NOTES + release-notes https://github.com/CycloneDX/cyclonedx-maven-plugin/releases