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 be07376  SLING-8472 : Provide an option to create a reference file 
with all attached features
be07376 is described below

commit be07376c412184f695f1bd97075676592af0068d
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Wed Jun 5 19:44:25 2019 +0200

    SLING-8472 : Provide an option to create a reference file with all attached 
features
---
 .../feature/maven/mojos/AttachFeaturesMojo.java    | 52 ++++++++++++++++++++--
 .../maven/mojos/AttachFeaturesMojoTest.java        |  2 +-
 2 files changed, 50 insertions(+), 4 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java 
b/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
index b217c34..2296bda 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojo.java
@@ -20,7 +20,9 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -29,6 +31,7 @@ import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.io.IOUtils;
 import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.apache.sling.feature.maven.FeatureConstants;
 import org.apache.sling.feature.maven.ProjectHelper;
@@ -49,6 +52,18 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo {
             defaultValue = "false")
     private boolean attachTestFeatures;
 
+    /**
+     * Create reference file
+     */
+    @Parameter(name = "createReferenceFile", defaultValue = "false")
+    private boolean createReferenceFile;
+
+    /**
+     * Classifier for the reference file (if any)
+     */
+    @Parameter(name = "referenceFileClassifier")
+    private String referenceFileClassifier;
+
     private void attach(final Feature feature,
             final String classifier)
     throws MojoExecutionException {
@@ -76,10 +91,39 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo 
{
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         ProjectHelper.checkPreprocessorRun(this.project);
-        
this.attachClassifierFeatures(ProjectHelper.getFeatures(this.project).values());
+        final List<String> featureUrls = new ArrayList<>();
+        
this.attachClassifierFeatures(ProjectHelper.getFeatures(this.project).values(), 
featureUrls);
 
         if ( this.attachTestFeatures ) {
-               
this.attachClassifierFeatures(ProjectHelper.getTestFeatures(this.project).values());
+            
this.attachClassifierFeatures(ProjectHelper.getTestFeatures(this.project).values(),
 featureUrls);
+        }
+        if (this.createReferenceFile) {
+            this.createReferenceFile(featureUrls);
+        }
+    }
+
+    private void createReferenceFile(final List<String> featureUrls) throws 
MojoExecutionException {
+        if (featureUrls.isEmpty()) {
+            getLog().warn(
+                    "Create reference file is enabled but no features are 
attached. Skipping reference file generation.");
+        } else {
+            String fileName = "references";
+            if (this.referenceFileClassifier != null) {
+                fileName = 
fileName.concat("-").concat(this.referenceFileClassifier);
+            }
+            fileName = fileName.concat(IOUtils.EXTENSION_REF_FILE);
+            final File outputFile = new File(this.getTmpDir(), fileName);
+            outputFile.getParentFile().mkdirs();
+
+            try (final Writer w = new FileWriter(outputFile)) {
+                for (final String url : featureUrls) {
+                    w.write(url);
+                    w.write('\n');
+                }
+            } catch (final IOException e) {
+                throw new MojoExecutionException("Unable to write feature 
reference file to " + outputFile, e);
+            }
+            projectHelper.attachArtifact(project, "ref", 
this.referenceFileClassifier, outputFile);
         }
     }
 
@@ -87,9 +131,11 @@ public class AttachFeaturesMojo extends AbstractFeatureMojo 
{
      * Attach all features
      * @throws MojoExecutionException
      */
-    void attachClassifierFeatures(final Collection<Feature> features) throws 
MojoExecutionException {
+    void attachClassifierFeatures(final Collection<Feature> features, final 
List<String> featureUrls)
+            throws MojoExecutionException {
         for (final Feature f : features) {
             attach(f, f.getId().getClassifier());
+            featureUrls.add(f.getId().toMvnUrl());
         }
     }
 }
diff --git 
a/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
 
b/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
index 28a621b..b6f8017 100644
--- 
a/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
+++ 
b/src/test/java/org/apache/sling/feature/maven/mojos/AttachFeaturesMojoTest.java
@@ -61,7 +61,7 @@ public class AttachFeaturesMojoTest {
         MavenProjectHelper helper = Mockito.mock(MavenProjectHelper.class);
         af.projectHelper = helper;
 
-        af.attachClassifierFeatures(features);
+        af.attachClassifierFeatures(features, new ArrayList<>());
         Mockito.verify(helper).attachArtifact(project, 
FeatureConstants.PACKAGING_FEATURE, "testa", new File(featuresDir, 
"slingfeature-tmp" + File.separatorChar + "feature-testa.json"));
         Mockito.verify(helper).attachArtifact(project, 
FeatureConstants.PACKAGING_FEATURE, "testd", new File(featuresDir, 
"slingfeature-tmp" + File.separatorChar + "feature-testd.json"));
         Mockito.verifyNoMoreInteractions(helper);

Reply via email to