You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2019/12/20 10:40:43 UTC

[sling-slingstart-maven-plugin] branch master updated: SLING-8941 : Make feature list configurable for FM2PM conversion

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-slingstart-maven-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 931cfe8  SLING-8941 : Make feature list configurable for FM2PM conversion
931cfe8 is described below

commit 931cfe8395f0f09ee366fb86f919d8abf79198d0
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Dec 20 11:40:32 2019 +0100

    SLING-8941 : Make feature list configurable for FM2PM conversion
---
 .../slingstart/DependencyLifecycleParticipant.java |  3 +-
 .../maven/slingstart/FeatureModelConverter.java    | 48 ++++++++++++++--------
 .../maven/slingstart/GenerateResourcesMojo.java    | 17 +++++---
 .../sling/maven/slingstart/ModelPreprocessor.java  | 34 +++++++--------
 .../slingstart/FeatureModelConverterTest.java      | 41 ++++++++++--------
 .../slingstart/GenerateResourcesMojoTest.java      | 22 +++++-----
 .../maven/slingstart/PreparePackageMojoTest.java   | 13 +++---
 7 files changed, 100 insertions(+), 78 deletions(-)

diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index ce09cca..2bc41b4 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -106,8 +106,7 @@ public class DependencyLifecycleParticipant extends AbstractMavenLifecyclePartic
                 }
             }
         }
-
-        FeatureModelConverter.convert(session, env);
+        FeatureModelConverter.convert(env);
         new ModelPreprocessor().addDependencies(env);
     }
 
diff --git a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
index 67e7d92..fc92783 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -25,7 +25,6 @@ import java.io.Reader;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 
 import org.apache.maven.MavenExecutionException;
@@ -58,38 +57,54 @@ public class FeatureModelConverter {
         }
     }
 
-    public static void convert(MavenSession session, Environment env) throws MavenExecutionException {
-        Map<String, ProjectInfo> projs = env.modelProjects;
-        for (ProjectInfo pi : projs.values()) {
-            convert(session, pi.project, env.artifactHandlerManager, env.resolver);
+    public static void convert(Environment env) throws MavenExecutionException {
+        for (ProjectInfo pi : env.modelProjects.values()) {
+            convert(env, pi);
         }
     }
 
-    private static void convert(MavenSession session, MavenProject project, ArtifactHandlerManager manager, ArtifactResolver resolver) throws MavenExecutionException {
-        File featuresDir = new File(project.getBasedir(), "src/main/features");
+    public static List<File> getFeatureFiles(final File baseDir, final String config) {
+        final List<File> files = new ArrayList<>();
+        for (final String cfg : config.split(",")) {
+            final File featuresDir = new File(baseDir, cfg.trim().replace('/', File.separatorChar));
+            final File[] children = featuresDir.listFiles();
+            if (children != null) {
+                for (final File f : children) {
+                    if (f.isFile() && f.getName().endsWith(".json")) {
+                        files.add(f);
+                    }
+                }
+            }
+        }
+
+        if (files.isEmpty()) {
+            return null;
+        }
+        return files;
+    }
 
-        File[] files = featuresDir.listFiles();
-        if (files == null || files.length == 0)
+    public static void convert(Environment env, ProjectInfo info) throws MavenExecutionException {
+        final String config = ModelPreprocessor.nodeValue(info.plugin, "featuresDirectory", "src/main/features");
+        final List<File> files = getFeatureFiles(info.project.getBasedir(), config);
+        if (files == null) {
             return;
+        }
 
         try {
-            convert(files, project, id -> getFeature(id, session, project, manager, resolver));
+            convert(files, info.project,
+                    id -> getFeature(id, env.session, info.project, env.artifactHandlerManager, env.resolver));
         } catch (RuntimeException ex) {
             throw new MavenExecutionException(ex.getMessage(), ex);
         }
 
     }
 
-    static void convert(File[] files, MavenProject project, FeatureProvider fp) throws MavenExecutionException {
+    static void convert(List<File> files, MavenProject project, FeatureProvider fp) throws MavenExecutionException {
         File processedFeaturesDir = new File(project.getBuild().getDirectory(), "features/processed");
         processedFeaturesDir.mkdirs();
 
         List<File> substedFiles = new ArrayList<>();
         for (File f : files) {
-            if (!f.getName().endsWith(".json")) {
-                continue;
-            }
-
             try {
                 substedFiles.add(substituteVars(project, f, processedFeaturesDir));
             } catch (IOException e) {
@@ -102,9 +117,6 @@ public class FeatureModelConverter {
 
         try {
             for (File f : substedFiles) {
-                if (!f.getName().endsWith(".json")) {
-                    continue;
-                }
                 File genFile = new File(targetDir, f.getName() + ".txt");
                 FeatureToProvisioning.convert(f, genFile, fp, substedFiles.toArray(new File[] {}));
             }
diff --git a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
index 296977d..366743b 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.maven.slingstart;
 
+import java.io.File;
+import java.util.List;
+
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -28,16 +31,15 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 
-import java.io.File;
-
 @Mojo(
         name = "generate-resources",
         defaultPhase = LifecyclePhase.GENERATE_RESOURCES,
         requiresDependencyResolution = ResolutionScope.TEST,
         threadSafe = true)
 public class GenerateResourcesMojo extends AbstractSlingStartMojo {
-    @Parameter(defaultValue="${basedir}/src/main/features")
-    private File featuresDirectory;
+    /** Comma separated list of directories. */
+    @Parameter(defaultValue = "src/main/features")
+    private String featuresDirectory;
 
     /**
      * To look up Archiver/UnArchiver implementations
@@ -60,12 +62,15 @@ public class GenerateResourcesMojo extends AbstractSlingStartMojo {
 
     @Override
     public void execute() throws MojoExecutionException {
-        File[] featureFiles = featuresDirectory.listFiles();
+        final List<File> featureFiles = FeatureModelConverter.getFeatureFiles(this.project.getBasedir(),
+                this.featuresDirectory);
         if (featureFiles == null)
             return;
 
         try {
-            FeatureModelConverter.convert(featureFiles, project, id -> FeatureModelConverter.getFeature(id, mavenSession, project, artifactHandlerManager, resolver));
+            FeatureModelConverter.convert(featureFiles, project, id -> FeatureModelConverter.getFeature(id,
+                    mavenSession,
+                    project, artifactHandlerManager, resolver));
         } catch (MavenExecutionException e) {
             throw new MojoExecutionException("Cannot convert feature files to provisioning model.", e);
         } catch (RuntimeException e) {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
index 3f56a13..b36a1b5 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
@@ -16,6 +16,21 @@
  */
 package org.apache.sling.maven.slingstart;
 
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.artifact.Artifact;
@@ -43,21 +58,6 @@ import org.apache.sling.provisioning.model.io.ModelReader;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.nio.file.Files;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 public class ModelPreprocessor {
 
     public static final class ProjectInfo {
@@ -439,12 +439,12 @@ public class ModelPreprocessor {
      * @param defaultValue Default value that is returned if parameter is not set
      * @return Parameter value or default value.
      */
-    private String nodeValue(final Plugin plugin, final String name, final String defaultValue) {
+    public static String nodeValue(final Plugin plugin, final String name, final String defaultValue) {
         final Xpp3Dom config = plugin == null ? null : (Xpp3Dom)plugin.getConfiguration();
         return nodeValue(config, name, defaultValue);
     }
 
-    private String nodeValue(final Xpp3Dom config, final String name, final String defaultValue) {
+    private static String nodeValue(final Xpp3Dom config, final String name, final String defaultValue) {
         final Xpp3Dom node = (config == null ? null : config.getChild(name));
         if (node != null) {
             return node.getValue();
diff --git a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
index 3184022..7a51f7d 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
@@ -16,6 +16,17 @@
  */
 package org.apache.sling.maven.slingstart;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.util.Properties;
+
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Build;
@@ -27,17 +38,6 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.nio.file.Files;
-import java.util.Properties;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
 public class FeatureModelConverterTest {
     private File tempDir;
 
@@ -65,7 +65,7 @@ public class FeatureModelConverterTest {
 
     @Test
     public void testConvert() throws Exception {
-        File f = new File(System.getProperty("user.home") + "/.m2");
+        File f = new File(System.getProperty("user.home") + File.separatorChar + ".m2");
         ArtifactRepository localRepo = Mockito.mock(ArtifactRepository.class);
         Mockito.when(localRepo.getUrl()).thenReturn(f.toURI().toURL().toString());
 
@@ -89,17 +89,19 @@ public class FeatureModelConverterTest {
 
         Environment env = new Environment();
         env.modelProjects.put("xyz", pi);
+        env.session = session;
 
-        FeatureModelConverter.convert(session, env);
+        FeatureModelConverter.convert(env);
 
-        File expectedFile = new File(tempDir, "/provisioning/converted/boot_gav.json.txt");
+        File expectedFile = new File(tempDir,
+                "provisioning" + File.separatorChar + "converted" + File.separatorChar + "boot_gav.json.txt");
         assertTrue(expectedFile.exists());
         assertTrue(expectedFile.length() > 0);
     }
 
     @Test
     public void testConvertWithIncludes() throws Exception {
-        File f = new File(System.getProperty("user.home") + "/.m2");
+        File f = new File(System.getProperty("user.home") + File.separatorChar + ".m2");
         ArtifactRepository localRepo = Mockito.mock(ArtifactRepository.class);
         Mockito.when(localRepo.getUrl()).thenReturn(f.toURI().toURL().toString());
 
@@ -123,15 +125,18 @@ public class FeatureModelConverterTest {
 
         Environment env = new Environment();
         env.modelProjects.put("xyz", pi);
+        env.session = session;
 
-        FeatureModelConverter.convert(session, env);
+        FeatureModelConverter.convert(env);
 
-        File simpleProvFile = new File(tempDir, "/provisioning/converted/simple.json.txt");
+        File simpleProvFile = new File(tempDir,
+                "provisioning" + File.separatorChar + "converted" + File.separatorChar + "simple.json.txt");
         String simpleProv = new String(Files.readAllBytes(simpleProvFile.toPath()));
         assertTrue(simpleProv.contains("org.apache.aries/org.apache.aries.util/1.1.3"));
         assertFalse(simpleProv.contains("org.apache.sling/org.apache.sling.commons.log/5.1.0"));
 
-        File inheritsProvFile = new File(tempDir, "/provisioning/converted/simple_inherits.json.txt");
+        File inheritsProvFile = new File(tempDir,
+                "provisioning" + File.separatorChar + "converted" + File.separatorChar + "simple_inherits.json.txt");
         String inheritsProv = new String(Files.readAllBytes(inheritsProvFile.toPath()));
         assertTrue(inheritsProv.contains("org.apache.aries/org.apache.aries.util/1.1.3"));
         assertTrue(inheritsProv.contains("org.apache.sling/org.apache.sling.commons.log/5.1.0"));
diff --git a/src/test/java/org/apache/sling/maven/slingstart/GenerateResourcesMojoTest.java b/src/test/java/org/apache/sling/maven/slingstart/GenerateResourcesMojoTest.java
index 2c62e4d..2c03dfc 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/GenerateResourcesMojoTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/GenerateResourcesMojoTest.java
@@ -16,7 +16,13 @@
  */
 package org.apache.sling.maven.slingstart;
 
-import com.google.common.io.Files;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URL;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
@@ -27,13 +33,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.net.URL;
-
-import static org.junit.Assert.assertTrue;
+import com.google.common.io.Files;
 
 public class GenerateResourcesMojoTest {
     private File tempDir;
@@ -72,7 +72,7 @@ public class GenerateResourcesMojoTest {
         Mockito.when(proj.getBuild()).thenReturn(build);
         Mockito.when(proj.getVersion()).thenReturn("1");
 
-        File f = new File(System.getProperty("user.home") + "/.m2");
+        File f = new File(System.getProperty("user.home") + File.separatorChar + ".m2");
         ArtifactRepository localRepo = Mockito.mock(ArtifactRepository.class);
         Mockito.when(localRepo.getUrl()).thenReturn(f.toURI().toURL().toString());
 
@@ -80,13 +80,13 @@ public class GenerateResourcesMojoTest {
         Mockito.when(session.getLocalRepository()).thenReturn(localRepo);
 
         GenerateResourcesMojo grm = new GenerateResourcesMojo();
-        setPrivateField(grm, "featuresDirectory", featureDir);
+        setPrivateField(grm, "featuresDirectory", featureDir.getAbsolutePath());
         setPrivateField(AbstractSlingStartMojo.class, grm, "project", proj);
         setPrivateField(AbstractSlingStartMojo.class, grm, "mavenSession", session);
 
         grm.execute();
 
-        File expectedFile = new File(tempDir, FeatureModelConverter.BUILD_DIR + "/simple.json.txt");
+        File expectedFile = new File(tempDir, FeatureModelConverter.BUILD_DIR + File.separatorChar + "simple.json.txt");
         assertTrue(expectedFile.exists());
         assertTrue(expectedFile.length() > 0);
     }
diff --git a/src/test/java/org/apache/sling/maven/slingstart/PreparePackageMojoTest.java b/src/test/java/org/apache/sling/maven/slingstart/PreparePackageMojoTest.java
index db33400..f42d8a5 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/PreparePackageMojoTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/PreparePackageMojoTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.sling.maven.slingstart;
 
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -50,9 +53,6 @@ import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
 public class PreparePackageMojoTest {
     @Test
     public void testBSNRenaming() throws Exception {
@@ -74,7 +74,7 @@ public class PreparePackageMojoTest {
             ppm.execute(model);
 
             File orgJar = getMavenArtifactFile(getMavenRepoRoot(), "org.apache.sling", "org.apache.sling.commons.johnzon", "1.0.0");
-            File generatedJar = new File(ppm.getTmpDir() + "/r-foo.bar.renamed.sling.commons.johnzon-1.0.0.jar");
+            File generatedJar = new File(ppm.getTmpDir(), "r-foo.bar.renamed.sling.commons.johnzon-1.0.0.jar");
 
             compareJarContents(orgJar, generatedJar);
 
@@ -171,7 +171,7 @@ public class PreparePackageMojoTest {
             Model model = ModelReader.read(new StringReader(modelTxt), null);
             ppm.execute(model);
 
-            File generatedFile = new File(ppm.getTmpDir() + "/test1.subsystem-base");
+            File generatedFile = new File(ppm.getTmpDir(), "test1.subsystem-base");
             try (JarFile jf = new JarFile(generatedFile)) {
                 // Test META-INF/MANIFEST.MF
                 Manifest mf = jf.getManifest();
@@ -286,7 +286,8 @@ public class PreparePackageMojoTest {
     }
 
     private File getMavenArtifactFile(File repoRoot, String gid, String aid, String ver) {
-        return new File(repoRoot, gid.replace('.', '/') + '/' + aid + '/' + ver + '/' + aid + '-' + ver + ".jar");
+        return new File(repoRoot, gid.replace('.', File.separatorChar) + File.separatorChar + aid + File.separatorChar
+                + ver + File.separatorChar + aid + '-' + ver + ".jar");
     }
 
     private File getMavenRepoRoot() throws IOException {