All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sap.cloud.sdk.s4hana.quality.pmd.ConfigurablePmdMojo Maven / Gradle / Ivy

/*
 * Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved.
 */

package com.sap.cloud.sdk.s4hana.quality.pmd;

import static org.twdata.maven.mojoexecutor.MojoExecutor.artifactId;
import static org.twdata.maven.mojoexecutor.MojoExecutor.configuration;
import static org.twdata.maven.mojoexecutor.MojoExecutor.dependency;
import static org.twdata.maven.mojoexecutor.MojoExecutor.element;
import static org.twdata.maven.mojoexecutor.MojoExecutor.executeMojo;
import static org.twdata.maven.mojoexecutor.MojoExecutor.executionEnvironment;
import static org.twdata.maven.mojoexecutor.MojoExecutor.goal;
import static org.twdata.maven.mojoexecutor.MojoExecutor.groupId;
import static org.twdata.maven.mojoexecutor.MojoExecutor.name;
import static org.twdata.maven.mojoexecutor.MojoExecutor.plugin;
import static org.twdata.maven.mojoexecutor.MojoExecutor.version;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.BuildPluginManager;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.twdata.maven.mojoexecutor.MojoExecutor;

@Mojo( name = "pmd" )
public class ConfigurablePmdMojo extends AbstractMojo
{
    @Parameter( defaultValue = "${project}", readonly = true )
    protected MavenProject mavenProject;

    @Parameter( defaultValue = "${session}", readonly = true )
    protected MavenSession mavenSession;

    @Component
    protected BuildPluginManager pluginManager;

    @Parameter( defaultValue = "${pmd.rulesets}" )
    private String rulesets;

    @Parameter( defaultValue = "${pmd.excludes}" )
    private String excludes;

    @Override
    public void execute()
        throws MojoExecutionException
    {
        final List configurationElements = new ArrayList<>();

        addParametersToConfig(rulesets, "rulesets", "ruleset", configurationElements);
        addParametersToConfig(excludes, "excludes", "exclude", configurationElements);

        final List dependencies = new ArrayList<>();
        dependencies.add(dependency("com.sap.cloud.s4hana.quality", "pmd-rules", "2.19.2"));

        final Plugin pmdPlugin =
            plugin(groupId("org.apache.maven.plugins"), artifactId("maven-pmd-plugin"), version("3.8"), dependencies);

        executeMojo(
            pmdPlugin,
            goal("pmd"),
            configuration(configurationElements.toArray(new MojoExecutor.Element[configurationElements.size()])),
            executionEnvironment(mavenProject, mavenSession, pluginManager));
    }

    private void addParametersToConfig(
        String parameters,
        String elementsTagName,
        String elementTagName,
        List configurationElements )
    {
        if( parameters != null && !parameters.trim().isEmpty() ) {
            final List paraList = Arrays.asList(parameters.split(","));
            final List elements = new ArrayList<>();

            for( final String p : paraList ) {
                elements.add(element(name(elementTagName), p));
            }

            configurationElements
                .add(element(name(elementsTagName), elements.toArray(new MojoExecutor.Element[elements.size()])));

            getLog().info(String.format("Configure PMD with %s: %s", elementsTagName, parameters));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy