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

pauls pushed a commit to branch issues/SLING-8013
in repository 
https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git

commit 1d45820afbda4ebf17bdfc8a6a3ac64c63bd4b5a
Author: Karl Pauls <[email protected]>
AuthorDate: Mon Oct 15 16:03:48 2018 +0200

    SLING-8013: Take all features into account when building repositories and 
allow to pick specific features plus extra artifacts.
---
 .../sling/feature/maven/mojos/RepositoryMojo.java  | 112 +++++++++++++++++----
 1 file changed, 92 insertions(+), 20 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java 
b/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
index 4f04011..1d8830e 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/RepositoryMojo.java
@@ -22,7 +22,10 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.artifact.Artifact;
@@ -35,6 +38,7 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
 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.ArtifactId;
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
@@ -59,6 +63,12 @@ public class RepositoryMojo extends AbstractFeatureMojo {
     @Parameter(defaultValue = "artifacts")
     private String repositoryDir;
 
+    @Parameter
+    private List<Include> includes;
+
+    @Parameter
+    private List<Include> embed;
+
     @Component
     private ArtifactHandlerManager artifactHandlerManager;
 
@@ -74,21 +84,46 @@ public class RepositoryMojo extends AbstractFeatureMojo {
         final File artifactDir = new 
File(this.project.getBuild().getDirectory(), repositoryDir);
         this.getLog().info("Creating repository in '" + artifactDir.getPath() 
+ "'...");
 
-        final Map<String, org.apache.sling.feature.Feature> features = 
ProjectHelper.getAssembledFeatures(this.project);
+        final Map<String, org.apache.sling.feature.Feature> features = 
ProjectHelper.getFeatures(this.project);
+        features.putAll(ProjectHelper.getAssembledFeatures(this.project));
 
-        for(final Feature f : features.values()) {
-            processFeature(artifactDir, f);
+        final Set<ArtifactId> includedIds = new HashSet<>();
+
+        if (includes != null && !includes.isEmpty()) {
+            for (Include include : includes) {
+                boolean found = false;
+                for (Feature f : features.values()) {
+                    if (f.getId().equals(include.getID())) {
+                        processFeature(artifactDir, f);
+                        found = true;
+                    }
+                }
+                if (!found) {
+                    processRemoteFeature(artifactDir, include.getID());
+                }
+            }
+        }
+        else {
+            for (final Feature f : features.values())
+            {
+                processFeature(artifactDir, f);
+            }
+        }
+        if (embed != null) {
+            for (Include include : embed) {
+                copyArtifactToRepository(include.getID(), artifactDir);
+            }
         }
     }
 
     private void processFeature(final File artifactDir, final Feature f) 
throws MojoExecutionException {
         for(final org.apache.sling.feature.Artifact artifact : f.getBundles()) 
{
-            copyArtifactToRepository(artifact, artifactDir);
+            copyArtifactToRepository(artifact.getId(), artifactDir);
         }
         for(final Extension ext : f.getExtensions()) {
             if ( ext.getType() == ExtensionType.ARTIFACTS ) {
                 for(final org.apache.sling.feature.Artifact artifact : 
ext.getArtifacts()) {
-                    copyArtifactToRepository(artifact, artifactDir);
+                    copyArtifactToRepository(artifact.getId(), artifactDir);
                 }
             }
         }
@@ -101,18 +136,22 @@ public class RepositoryMojo extends AbstractFeatureMojo {
             throw new MojoExecutionException("Unable to write feature file ", 
e);
         }
         if ( f.getInclude() != null ) {
-            final Artifact source = 
ProjectHelper.getOrResolveArtifact(this.project,
-                    this.mavenSession,
-                    this.artifactHandlerManager,
-                    this.resolver,
-                    f.getInclude().getId());
-
-            try (final Reader reader = new FileReader(source.getFile()) ) {
-                final Feature inc = FeatureJSONReader.read(reader, 
f.getId().toMvnId());
-                processFeature(artifactDir, inc);
-            } catch (final IOException e) {
-                throw new MojoExecutionException("Unable to read feature file 
", e);
-            }
+            processRemoteFeature(artifactDir, f.getInclude().getId());
+        }
+    }
+
+    private void processRemoteFeature(final File artifactDir, final ArtifactId 
id) throws MojoExecutionException {
+        final Artifact source = 
ProjectHelper.getOrResolveArtifact(this.project,
+            this.mavenSession,
+            this.artifactHandlerManager,
+            this.resolver,
+            id);
+
+        try (final Reader reader = new FileReader(source.getFile()) ) {
+            final Feature inc = FeatureJSONReader.read(reader, id.toMvnId());
+            processFeature(artifactDir, inc);
+        } catch (final IOException e) {
+            throw new MojoExecutionException("Unable to read feature file ", 
e);
         }
     }
 
@@ -155,10 +194,10 @@ public class RepositoryMojo extends AbstractFeatureMojo {
      * Copy a single artifact to the repository
      * @throws MojoExecutionException
      */
-    private void copyArtifactToRepository(final 
org.apache.sling.feature.Artifact artifact,
+    private void copyArtifactToRepository(final ArtifactId artifactId,
             final File artifactDir)
     throws MojoExecutionException {
-        final File artifactFile = getRepositoryFile(artifactDir, 
artifact.getId());
+        final File artifactFile = getRepositoryFile(artifactDir, artifactId);
         // TODO - we could overwrite snapshots?
         if ( artifactFile.exists() ) {
             return;
@@ -167,7 +206,7 @@ public class RepositoryMojo extends AbstractFeatureMojo {
                 this.mavenSession,
                 this.artifactHandlerManager,
                 this.resolver,
-                artifact.getId());
+                artifactId);
 
         try {
             FileUtils.copyFile(source.getFile(), artifactFile);
@@ -175,4 +214,37 @@ public class RepositoryMojo extends AbstractFeatureMojo {
             throw new MojoExecutionException("Unable to copy artifact from " + 
source.getFile(), e);
         }
     }
+
+    public static class Include {
+        String groupId;
+        String artifactId;
+        String version;
+        String type;
+        String classifier;
+
+        public void setGroupId(String gid) {
+            groupId = gid;
+        }
+
+        public void setArtifactId(String aid) {
+            artifactId = aid;
+        }
+
+        public void setVersion(String ver) {
+            version = ver;
+        }
+
+        public void setType(String t) {
+            type = t;
+        }
+
+        public void setClassifier(String clf) {
+            classifier = clf;
+        }
+
+        public ArtifactId getID()
+        {
+            return new ArtifactId(groupId, artifactId, version, classifier, 
type);
+        }
+    }
 }

Reply via email to