com.labs64.mojo.swid.GenerateMojo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swid-maven-plugin Show documentation
Show all versions of swid-maven-plugin Show documentation
Maven Plugin :: SoftWare IDentification (SWID) Tags Generator
The newest version!
/*
* Licensed 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.
*/
package com.labs64.mojo.swid;
import java.io.File;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.iso.standards.iso._19770.__2._2009.schema.SoftwareIdentificationTagComplexType;
import com.labs64.mojo.swid.configuration.RegId;
import com.labs64.utils.swid.SwidBuilder;
import com.labs64.utils.swid.io.SwidWriter;
import com.labs64.utils.swid.processor.DefaultSwidProcessor;
import com.labs64.utils.swid.processor.SwidProcessor;
import com.labs64.utils.swid.support.SwidUtils;
/**
* A mojo that generates a SWID tag from a given POM.
*
* @see SoftWare IDentification (SWID) Tags Generator
*/
@Mojo(name = "generate", defaultPhase = LifecyclePhase.PROCESS_RESOURCES)
public class GenerateMojo extends AbstractSwidMojo {
/**
* Specifies the destination directory where the generated SWID tags files will be saved.
*
* @since 1.0.0
*/
@Parameter(property = "swid.outputDirectory", required = true, defaultValue = "${project.build.directory}/generated-resources/swid")
private File outputDirectory;
/**
* Specifies the encoding of the generated SWID tags files.
*
*
* Fallback value(s): UTF-8
*
* @since 1.0.0
*/
@Parameter(property = "swid.encoding", required = false, defaultValue = "${project.build.sourceEncoding}")
private String encoding;
/**
* Specifies the extension of the generated SWID tags files.
*
* @since 1.0.0
*/
@Parameter(property = "swid.extension", required = false, defaultValue = "swidtag")
private String extension;
/**
* Specifies if an entitlement is required to reconcile this product.
*
* @since 1.0.0
*/
@Parameter(property = "swid.entitlement_required", required = false, defaultValue = "false")
private Boolean entitlement_required;
/**
* Specifies product title.
*
*
* Fallback value(s): ${project.artifactId}
*
* @since 1.0.0
*/
@Parameter(property = "swid.product_title", required = false, defaultValue = "${project.name}")
private String product_title;
/**
* Specifies product version.
*
* @since 1.0.0
*/
@Parameter(property = "swid.product_version", required = false, defaultValue = "${project.version}")
private String product_version;
/**
* Specifies domain creation date which belongs to the software creator.
* Format: 'yyyy-MM'
* Example: '2010-04'
* Default value: current date
*
* @since 1.0.0
*/
@Parameter(property = "swid.domain_creation_date", required = false)
private String domain_creation_date;
/**
* Specifies software creator attributes.
*
*
* Fallback value(s): name: ${project.groupId}; regid: ${project.url}, ${project.groupId}
* Default value(s):
*
*
* <software_creator>
* <name>${project.organization.name}</name>
* <regid>${project.organization.url}</regid>
* </software_creator>
*
*
* @since 1.0.0
*/
@Parameter(required = false, defaultValue = "${software_creator}")
private RegId software_creator;
/**
* Specifies software licensor attributes.
*
*
* Fallback value(s): name: ${project.groupId}; regid: ${project.url}, ${project.groupId}
* Default value(s):
*
*
* <software_licensor>
* <name>${project.organization.name}</name>
* <regid>${project.organization.url}</regid>
* </software_licensor>
*
*
* @since 1.0.0
*/
@Parameter(required = false, defaultValue = "${software_licensor}")
private RegId software_licensor;
/**
* Specifies software identifier attributes.
*
*
* Fallback value(s): tag_creator_regid: ${project.url}, ${project.groupId}
* Default value(s):
*
*
* <software_id>
* <unique_id>${project.artifactId}</unique_id>
* <tag_creator_regid>${project.organization.url}</tag_creator_regid>
* </software_id>
*
*
* @since 1.0.0
*/
@Parameter(required = false, defaultValue = "${software_id}")
private RegId software_id;
/**
* Specifies tag creator attributes.
*
*
* Fallback value(s): name: ${project.groupId}; regid: ${project.url}, ${project.groupId}
* Default value(s):
*
*
* <tag_creator>
* <name>${project.organization.name}</name>
* <regid>${project.organization.url}</regid>
* </tag_creator>
*
*
* @since 1.0.0
*/
@Parameter(required = false, defaultValue = "${tag_creator}")
private RegId tag_creator;
public void execute() throws MojoExecutionException {
getLog().debug("Generate SWID Tag...");
// prepare mandatory elements
ArtifactVersion artifactVersion = getArtifactVersion();
prepareMandatoryElements();
// prepare SWID Tag processor
SwidProcessor processor = new DefaultSwidProcessor();
((DefaultSwidProcessor) processor).setEntitlementRequiredIndicator(entitlement_required)
.setProductTitle(product_title)
.setProductVersion(product_version,
artifactVersion.getMajorVersion(),
artifactVersion.getMinorVersion(),
artifactVersion.getIncrementalVersion(),
artifactVersion.getBuildNumber())
.setSoftwareCreator(software_creator.getName(), software_creator.getRegid())
.setSoftwareLicensor(software_licensor.getName(), software_licensor.getRegid())
.setSoftwareId(software_id.getUnique_id(), software_id.getTag_creator_regid())
.setTagCreator(tag_creator.getName(), tag_creator.getRegid());
// create builder and pass processor as build param
SwidBuilder builder = new SwidBuilder();
SoftwareIdentificationTagComplexType swidTag = builder.build(processor);
// output resulting object
final String fileName = SwidUtils.generateSwidFileName(
software_creator.getRegid(),
software_id.getUnique_id(),
product_version,
extension);
if (!outputDirectory.exists()) {
if (!outputDirectory.mkdirs()) {
throw new MojoExecutionException("Cannot create directory '" + outputDirectory.toString() + "'");
}
}
File swidFile = new File(outputDirectory, fileName);
SwidWriter writer = new SwidWriter();
writer.write(swidTag, swidFile);
}
private ArtifactVersion getArtifactVersion() {
if (ArtifactUtils.isSnapshot(product_version)) {
product_version = StringUtils.substring(product_version, 0, product_version.length()
- Artifact.SNAPSHOT_VERSION.length() - 1);
}
return new DefaultArtifactVersion(product_version);
}
private String getDomainDate() {
if (StringUtils.isBlank(domain_creation_date)) {
domain_creation_date = SwidUtils.generateDomainDate(new Date());
}
return domain_creation_date;
}
private RegId getDefaultRegId() {
final RegId regid = new RegId();
regid.setName(getProject().getOrganization() == null ?
getProject().getGroupId() : getProject().getOrganization().getName());
final String url = getProject().getOrganization() == null ?
getProject().getUrl() : getProject().getOrganization().getUrl();
final String reverseDomainName = StringUtils.isBlank(url) ?
getProject().getGroupId() : SwidUtils.revertDomainName(url);
regid.setRegid(SwidUtils.generateRegId(getDomainDate(), reverseDomainName));
return regid;
}
private void prepareMandatoryElements() {
final RegId defaultRegId = getDefaultRegId();
// software_creator
if (software_creator == null) {
software_creator = new RegId();
}
if (StringUtils.isBlank(software_creator.getName())) {
software_creator.setName(defaultRegId.getName());
}
if (StringUtils.isBlank(software_creator.getRegid())) {
software_creator.setRegid(defaultRegId.getRegid());
}
// software_licensor
if (software_licensor == null) {
software_licensor = new RegId();
}
if (StringUtils.isBlank(software_licensor.getName())) {
software_licensor.setName(defaultRegId.getName());
}
if (StringUtils.isBlank(software_licensor.getRegid())) {
software_licensor.setRegid(defaultRegId.getRegid());
}
// tag_creator
if (tag_creator == null) {
tag_creator = new RegId();
}
if (StringUtils.isBlank(tag_creator.getName())) {
tag_creator.setName(defaultRegId.getName());
}
if (StringUtils.isBlank(tag_creator.getRegid())) {
tag_creator.setRegid(defaultRegId.getRegid());
}
// software_id
if (software_id == null) {
software_id = new RegId();
}
if (StringUtils.isBlank(software_id.getUnique_id())) {
software_id.setUnique_id(getProject().getArtifactId());
}
if (StringUtils.isBlank(software_id.getTag_creator_regid())) {
software_id.setTag_creator_regid(tag_creator.getRegid());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy