You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2017/09/18 12:32:51 UTC

svn commit: r1808691 - /sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java

Author: pauls
Date: Mon Sep 18 12:32:51 2017
New Revision: 1808691

URL: http://svn.apache.org/viewvc?rev=1808691&view=rev
Log:
Allow several directories and feature files to be given

Modified:
    sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java

Modified: sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java?rev=1808691&r1=1808690&r2=1808691&view=diff
==============================================================================
--- sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java (original)
+++ sling/whiteboard/cziegeler/feature-applicationbuilder/src/main/java/org/apache/sling/feature/applicationbuilder/impl/Main.java Mon Sep 18 12:32:51 2017
@@ -27,6 +27,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
@@ -58,7 +60,9 @@ public class Main {
 
     private static String output;
 
-    private static String input;
+    private static String filesInput;
+
+    private static String dirsInput;
 
     private static String repoUrls;
 
@@ -73,7 +77,8 @@ public class Main {
         final Option repoOption =  Option.builder("u").hasArg().argName("Set repository url")
                 .desc("repository url").required().build();
 
-        final Option modelOption =  new Option("f", true, "Set feature files/directories");
+        final Option filesOption =  new Option("f", true, "Set feature files (comma separated)");
+        final Option dirsOption = new Option("d", true, "Set feature file dirs (comma separated)");
         final Option propsOption =  new Option("p", true, "sling.properties file");
 
 
@@ -82,7 +87,8 @@ public class Main {
 
         final Options options = new Options();
         options.addOption(repoOption);
-        options.addOption(modelOption);
+        options.addOption(filesOption);
+        options.addOption(dirsOption);
         options.addOption(outputOption);
         options.addOption(propsOption);
 
@@ -93,8 +99,11 @@ public class Main {
             if ( cl.hasOption(repoOption.getOpt()) ) {
                 repoUrls = cl.getOptionValue(repoOption.getOpt());
             }
-            if ( cl.hasOption(modelOption.getOpt()) ) {
-                input = cl.getOptionValue(modelOption.getOpt());
+            if ( cl.hasOption(filesOption.getOpt()) ) {
+                filesInput = cl.getOptionValue(filesOption.getOpt());
+            }
+            if ( cl.hasOption(dirsOption.getOpt()) ) {
+                dirsInput = cl.getOptionValue(dirsOption.getOpt());
             }
             if ( cl.hasOption(outputOption.getOpt()) ) {
                 output = cl.getOptionValue(outputOption.getOpt());
@@ -106,8 +115,8 @@ public class Main {
             LOGGER.error("Unable to parse command line: {}", pe.getMessage(), pe);
             System.exit(1);
         }
-        if ( input == null ) {
-            LOGGER.error("Required argument missing: model file or directory");
+        if ( filesInput == null && dirsInput == null) {
+            LOGGER.error("Required argument missing: model files or directory");
             System.exit(1);
         }
     }
@@ -145,30 +154,32 @@ public class Main {
         if ( repoUrls != null ) {
             amConfig.setRepositoryUrls(repoUrls.split(","));
         }
+
         final ArtifactManager am = getArtifactManager();
 
-        final File f = new File(input);
-        final List<File> files = new ArrayList<>();
-        if ( f.isDirectory() ) {
-            for(final File file : f.listFiles()) {
-                if ( file.isFile() && !file.getName().startsWith(".") ) {
-                    files.add(file);
-                }
-            }
-            if ( files.isEmpty() ) {
-                LOGGER.error("No files found in {}", f);
-                System.exit(1);
-            }
-            Collections.sort(files);
-        } else {
-            files.add(f);
-        }
 
+        final String[] files =
+                Stream.concat(
+                    Stream.of(filesInput != null ? filesInput.split(",") : new String[0])
+                        .map(path -> new File(path))
+                        .filter(File::isFile),
+                    Stream.of(dirsInput != null ? dirsInput.split(",") : new String[0])
+                        .map(path -> new File(path))
+                        .filter(File::isDirectory)
+                        .flatMap(dir ->
+                            Stream.of(dir.listFiles())))
+                .filter(file -> !file.getName().startsWith("."))
+                .sorted()
+                .map(File::getAbsolutePath)
+                .toArray(String[]::new);
+
+        if (files.length == 0) {
+            LOGGER.error("No feature files found.");
+            System.exit(1);
+        }
 
         try {
-            writeApplication(FeatureUtil.assembleApplication(null, am, files.stream()
-                            .map(File::getAbsolutePath)
-                            .toArray(String[]::new)), output == null ? "application.json" : output);
+            writeApplication(FeatureUtil.assembleApplication(null, am, files), output == null ? "application.json" : output);
 
         } catch ( final IOException ioe) {
             LOGGER.error("Unable to read feature/application files " + ioe.getMessage(), ioe);