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 79264e9  SLING-7962 : Add mojo for downloading all artifacts and 
putting them into a build directory
79264e9 is described below

commit 79264e91c8e7171a83e7ce5a1a3ee2a24c2e27c1
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Sep 28 17:39:51 2018 +0200

    SLING-7962 : Add mojo for downloading all artifacts and putting them into a 
build directory
---
 .../sling/feature/maven/mojos/RepositoryMojo.java  | 73 ++++++++++++++++------
 1 file changed, 54 insertions(+), 19 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 d86fefa..58de84c 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
@@ -17,7 +17,11 @@
 package org.apache.sling.feature.maven.mojos;
 
 import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
 import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
 import java.util.Map;
 
 import org.apache.commons.io.FileUtils;
@@ -33,6 +37,8 @@ import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
 import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.io.json.FeatureJSONReader;
+import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.apache.sling.feature.maven.ProjectHelper;
 
 /**
@@ -75,17 +81,43 @@ public class RepositoryMojo extends AbstractFeatureMojo {
         final Map<String, org.apache.sling.feature.Feature> features = 
ProjectHelper.getAssembledFeatures(this.project);
 
         for(final Feature f : features.values()) {
-            for(final org.apache.sling.feature.Artifact artifact : 
f.getBundles()) {
-                copyArtifactToRepository(artifact, 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);
-                    }
+            processFeature(artifactDir, f);
+        }
+    }
+
+    private void processFeature(final File artifactDir, final Feature f) 
throws MojoExecutionException {
+        for(final org.apache.sling.feature.Artifact artifact : f.getBundles()) 
{
+            copyArtifactToRepository(artifact, 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);
                 }
             }
         }
+
+        final File featureFile = getRepositoryFile(artifactDir, f.getId());
+        featureFile.getParentFile().mkdirs();
+        try ( final Writer writer = new FileWriter(featureFile)) {
+            FeatureJSONWriter.write(writer, f);
+        } catch (final IOException e) {
+            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);
+            }
+        }
     }
 
     /**
@@ -94,25 +126,25 @@ public class RepositoryMojo extends AbstractFeatureMojo {
      * @param artifact The artifact
      * @return The file
      */
-    private File getRepositoryFile(final File artifactDir, final 
org.apache.sling.feature.Artifact artifact) {
+    private File getRepositoryFile(final File artifactDir, final 
org.apache.sling.feature.ArtifactId artifact) {
         final StringBuilder artifactNameBuilder = new StringBuilder();
-        artifactNameBuilder.append(artifact.getId().getArtifactId());
+        artifactNameBuilder.append(artifact.getArtifactId());
         artifactNameBuilder.append('-');
-        artifactNameBuilder.append(artifact.getId().getVersion());
-        if ( artifact.getId().getClassifier() != null ) {
+        artifactNameBuilder.append(artifact.getVersion());
+        if ( artifact.getClassifier() != null ) {
             artifactNameBuilder.append('-');
-            artifactNameBuilder.append(artifact.getId().getClassifier());
+            artifactNameBuilder.append(artifact.getClassifier());
         }
         artifactNameBuilder.append('.');
-        artifactNameBuilder.append(artifact.getId().getType());
+        artifactNameBuilder.append(artifact.getType());
         final String artifactName = artifactNameBuilder.toString();
 
         final StringBuilder sb = new StringBuilder();
-        sb.append(artifact.getId().getGroupId().replace('.', 
File.separatorChar));
+        sb.append(artifact.getGroupId().replace('.', File.separatorChar));
         sb.append(File.separatorChar);
-        sb.append(artifact.getId().getArtifactId());
+        sb.append(artifact.getArtifactId());
         sb.append(File.separatorChar);
-        sb.append(artifact.getId().getVersion());
+        sb.append(artifact.getVersion());
         sb.append(File.separatorChar);
         sb.append(artifactName);
         final String destPath = sb.toString();
@@ -130,8 +162,11 @@ public class RepositoryMojo extends AbstractFeatureMojo {
     private void copyArtifactToRepository(final 
org.apache.sling.feature.Artifact artifact,
             final File artifactDir)
     throws MojoExecutionException {
-        final File artifactFile = getRepositoryFile(artifactDir, artifact);
-
+        final File artifactFile = getRepositoryFile(artifactDir, 
artifact.getId());
+        // TODO - we could overwrite snapshots?
+        if ( artifactFile.exists() ) {
+            return;
+        }
         final Artifact source = 
ProjectHelper.getOrResolveArtifact(this.project,
                 this.mavenSession,
                 this.artifactHandlerManager,

Reply via email to