This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 02b34ac  SLING-11083 : Allow to specify different feature for 
configuration api
02b34ac is described below

commit 02b34acd174cb1bfee53c8c55b2d6cad834e2493
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sun Jan 23 18:57:41 2022 +0100

    SLING-11083 : Allow to specify different feature for configuration api
---
 .../maven/mojos/AbstractIncludingFeatureMojo.java  |  1 -
 .../maven/mojos/ApplyDefaultConfigMojo.java        | 73 ++++++++++++++++++++--
 2 files changed, 69 insertions(+), 5 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
 
b/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
index fdcbe54..6938511 100644
--- 
a/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
+++ 
b/src/main/java/org/apache/sling/feature/maven/mojos/AbstractIncludingFeatureMojo.java
@@ -194,7 +194,6 @@ public abstract class AbstractIncludingFeatureMojo extends 
AbstractFeatureMojo {
             throw new MojoExecutionException("RefsInclude " + selection + " 
not found.");
         }
         // sort result
-        @SuppressWarnings("unchecked")
         final List<String> includedFiles = new 
ArrayList<>(Arrays.asList(scanner.getIncludedFiles()));
         Collections.sort(includedFiles);
         for(final String path : includedFiles) {
diff --git 
a/src/main/java/org/apache/sling/feature/maven/mojos/ApplyDefaultConfigMojo.java
 
b/src/main/java/org/apache/sling/feature/maven/mojos/ApplyDefaultConfigMojo.java
index 5e7aca9..e1db255 100644
--- 
a/src/main/java/org/apache/sling/feature/maven/mojos/ApplyDefaultConfigMojo.java
+++ 
b/src/main/java/org/apache/sling/feature/maven/mojos/ApplyDefaultConfigMojo.java
@@ -18,11 +18,13 @@ package org.apache.sling.feature.maven.mojos;
 
 import java.util.Map;
 
+import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 import 
org.apache.sling.feature.extension.apiregions.api.config.ConfigurationApi;
 import 
org.apache.sling.feature.extension.apiregions.api.config.validation.FeatureValidationResult;
@@ -37,24 +39,87 @@ import org.apache.sling.feature.maven.ProjectHelper;
     threadSafe = true)
 public class ApplyDefaultConfigMojo extends AbstractIncludingFeatureMojo {
 
+    /**
+     * The features to apply the default configuration to.
+     */
     @Parameter(name = "selection", required = true)
     FeatureSelectionConfig selection;
 
+    /**
+     * If enabled (default) the build fails if the configuration is invalid
+     */
     @Parameter(defaultValue = "true")
     boolean failOnValidationError;
 
+    /**
+     * Optional feature model dependency containing the configuration api to 
validate against.
+     * @since 1.6
+     */
+    @Parameter
+    Dependency configurationApiDependency;
+
+    /**
+     * Optional classifier for a feature from the local project containing the 
configuration api to validate against
+     * @since 1.6
+     */
+    @Parameter
+    String configurationApiClassifier;
+
+    private ConfigurationApi getDefaultConfigurationApi() throws 
MojoExecutionException {
+        if ( this.configurationApiClassifier != null && 
this.configurationApiDependency != null ) {
+            throw new MojoExecutionException("Only one of 
configurationApiDependency or configurationApiClassifier can be specified, but 
not both.");
+        }
+        ConfigurationApi defaultApi = null;
+        if ( this.configurationApiClassifier != null ) {
+            final Map<String, Feature> projectFeatures = 
ProjectHelper.getAssembledFeatures(this.project);
+            for(final Feature f : projectFeatures.values()) {
+                if ( 
this.configurationApiClassifier.equals(f.getId().getClassifier()) ) {
+                    defaultApi = ConfigurationApi.getConfigurationApi(f);
+                    if ( defaultApi == null ) {
+                        throw new MojoExecutionException("Specified feature 
with classifier " + this.configurationApiClassifier + " does not contain 
configuration api");
+                    }
+                    break;
+                }
+            }
+            if ( defaultApi == null ) {
+                throw new MojoExecutionException("Specified feature with 
classifier + " + this.configurationApiClassifier + " does not exist in 
project.");
+            }
+
+        } else if ( this.configurationApiDependency != null ) {
+            final ArtifactId depId = 
ProjectHelper.toArtifactId(this.configurationApiDependency);
+            if (ProjectHelper.isLocalProjectArtifact(this.project, depId)) {
+                throw new MojoExecutionException(
+                            "configurationApiDependency configuration is used 
to select a local feature: " + depId.toMvnId());
+            }
+            final Feature f = ProjectHelper.getOrResolveFeature(this.project, 
this.mavenSession,
+                    this.artifactHandlerManager, this.artifactResolver, depId);
+            defaultApi = ConfigurationApi.getConfigurationApi(f);
+            if ( defaultApi == null ) {
+                throw new MojoExecutionException("Specified feature " + 
depId.toMvnId() + " does not contain configuration api");
+            }
+        }
+        if ( defaultApi != null ) {
+            getLog().info("Using configured configuration-api from " + 
+                (this.configurationApiClassifier != null ? "classifier " + 
this.configurationApiClassifier
+                                                         : " dependency " + 
ProjectHelper.toString(this.configurationApiDependency)));
+        }
+
+        return defaultApi;
+    }
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         checkPreconditions();
-
         getLog().info("Feature Selection: " + selection);
 
-        Map<String, Feature> selFeat = getSelectedFeatures(selection);
-        for (Map.Entry<String, Feature> entry : selFeat.entrySet()) {
+        final ConfigurationApi defaultApi = this.getDefaultConfigurationApi();
+
+        final Map<String, Feature> selFeat = getSelectedFeatures(selection);
+        for (final Map.Entry<String, Feature> entry : selFeat.entrySet()) {
             final Feature f = entry.getValue();
 
             // check if configuration api is set
-            final ConfigurationApi api = 
ConfigurationApi.getConfigurationApi(f);
+            final ConfigurationApi api = defaultApi != null ? defaultApi : 
ConfigurationApi.getConfigurationApi(f);
             if ( api != null ) {
                 final FeatureValidator validator = new FeatureValidator();
                 validator.setFeatureProvider(new BaseFeatureProvider());

Reply via email to