This is an automated email from the ASF dual-hosted git repository.
davidb pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git
The following commit(s) were added to refs/heads/master by this push:
new 2803677 SLING-7716 Make it possible to run a specific plugin with the
Feature Model Analyser
2803677 is described below
commit 28036776c67eb4d25ac6f97cd7c2a215bc1f25ed
Author: David Bosschaert <[email protected]>
AuthorDate: Fri Jun 8 13:47:53 2018 +0100
SLING-7716 Make it possible to run a specific plugin with the Feature Model
Analyser
---
pom.xml | 9 +++-
.../apache/sling/feature/analyser/Analyser.java | 47 ++++++++++--------
.../apache/sling/feature/analyser/main/Main.java | 57 +++++++++++++++++-----
3 files changed, 81 insertions(+), 32 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2022b63..d2c5c4e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -57,7 +57,7 @@
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
-
<includeArtifactIds>org.apache.felix.converter,org.apache.sling.feature,org.apache.sling.commons.johnzon,osgi.core,slf4j-api,slf4j-simple</includeArtifactIds>
+
<includeArtifactIds>commons-cli,commons-lang,org.apache.felix.utils,org.apache.felix.converter,org.apache.sling.feature,org.apache.sling.feature.io,org.apache.sling.commons.johnzon,osgi.core,slf4j-api,slf4j-simple</includeArtifactIds>
</configuration>
</execution>
</executions>
@@ -89,9 +89,16 @@
</build>
<dependencies>
<dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.3.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
diff --git a/src/main/java/org/apache/sling/feature/analyser/Analyser.java
b/src/main/java/org/apache/sling/feature/analyser/Analyser.java
index 8124c9b..23b2c5f 100644
--- a/src/main/java/org/apache/sling/feature/analyser/Analyser.java
+++ b/src/main/java/org/apache/sling/feature/analyser/Analyser.java
@@ -16,14 +16,6 @@
*/
package org.apache.sling.feature.analyser;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.ServiceLoader;
-import java.util.Set;
-
import org.apache.sling.feature.Application;
import org.apache.sling.feature.analyser.task.AnalyserTask;
import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
@@ -32,6 +24,12 @@ import org.apache.sling.feature.scanner.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ServiceLoader;
+
public class Analyser {
private final AnalyserTask[] tasks;
@@ -41,33 +39,42 @@ public class Analyser {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public Analyser(final Scanner scanner,
- final AnalyserTask...tasks)
- throws IOException {
+ final AnalyserTask...tasks) throws IOException {
this.tasks = tasks;
this.scanner = scanner;
}
public Analyser(final Scanner scanner,
- final String... taskIds)
+ final String... taskClassNames)
throws IOException {
- this(scanner, getTasks(taskIds));
- if ( this.tasks.length != taskIds.length ) {
- throw new IOException("Couldn't find all tasks " + taskIds);
+ this(scanner, getTasksByClassName(taskClassNames));
+ if ( this.tasks.length != taskClassNames.length ) {
+ throw new IOException("Couldn't find all tasks " +
Arrays.toString(taskClassNames));
}
}
- public Analyser(final Scanner scanner)
- throws IOException {
- this(scanner, getTasks((String[])null));
+ public Analyser(final Scanner scanner) throws IOException {
+ this(scanner, getTasks());
}
- private static AnalyserTask[] getTasks(final String... taskIds) {
- final Set<String> ids = taskIds == null ? null : new
HashSet<>(Arrays.asList(taskIds));
+ private static AnalyserTask[] getTasks() {
final ServiceLoader<AnalyserTask> loader =
ServiceLoader.load(AnalyserTask.class);
final List<AnalyserTask> list = new ArrayList<>();
for(final AnalyserTask task : loader) {
- if ( ids == null || ids.contains(task.getId()) ) {
+ list.add(task);
+ }
+ return list.toArray(new AnalyserTask[list.size()]);
+ }
+
+ // Get tasks from class names
+ private static AnalyserTask[] getTasksByClassName(String[] taskClassNames)
throws IOException {
+ List<AnalyserTask> list = new ArrayList<>();
+ for (String cls : taskClassNames) {
+ try {
+ AnalyserTask task = (AnalyserTask)
Analyser.class.getClassLoader().loadClass(cls).newInstance();
list.add(task);
+ } catch (Exception e) {
+ throw new IOException(e);
}
}
return list.toArray(new AnalyserTask[list.size()]);
diff --git a/src/main/java/org/apache/sling/feature/analyser/main/Main.java
b/src/main/java/org/apache/sling/feature/analyser/main/Main.java
index 79cc35b..34b677c 100644
--- a/src/main/java/org/apache/sling/feature/analyser/main/Main.java
+++ b/src/main/java/org/apache/sling/feature/analyser/main/Main.java
@@ -16,6 +16,13 @@
*/
package org.apache.sling.feature.analyser.main;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
import org.apache.sling.feature.Application;
import org.apache.sling.feature.analyser.Analyser;
import org.apache.sling.feature.io.ArtifactManagerConfig;
@@ -25,11 +32,36 @@ import org.apache.sling.feature.scanner.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Main {
+ private static String applicationFile;
+ private static String pluginClass;
+
+ private static void parseArgs(final String[] args) {
+ Option fileOption = new Option("f", true, "Set application file");
+ Option pluginOption = new Option("p", true, "Explicitly specify plugin
class to run, "
+ + "if ommitted the default plugins are used");
+
+ Options options = new Options();
+ options.addOption(fileOption);
+ options.addOption(pluginOption);
+
+ CommandLineParser parser = new DefaultParser();
+ try {
+ CommandLine cl = parser.parse(options, args);
+
+ applicationFile = cl.getOptionValue(fileOption.getOpt());
+ if (cl.hasOption(pluginOption.getOpt())) {
+ pluginClass = cl.getOptionValue(pluginOption.getOpt());
+ }
+ } catch (ParseException e) {
+ HelpFormatter formatter = new HelpFormatter();
+ formatter.printHelp("", options);
+ System.exit(1);
+ }
+ }
public static void main(final String[] args) {
// setup logging
@@ -42,20 +74,18 @@ public class Main {
logger.info("Apache Sling Application Analyser");
logger.info("");
- if ( args.length == 0 ) {
+ parseArgs(args);
+
+ if (applicationFile == null) {
logger.error("Required argument missing: application file");
System.exit(1);
}
- if ( args.length > 1 ) {
- logger.error("Too many arguments. Only one (application file) is
supported");
- System.exit(1);
- }
- final File f = new File(args[0]);
+
Application app = null;
- try ( final FileReader r = new FileReader(f)) {
+ try ( final FileReader r = new FileReader(applicationFile)) {
app = ApplicationJSONReader.read(r);
} catch ( final IOException ioe) {
- logger.error("Unable to read application: {}", f, ioe);
+ logger.error("Unable to read application: {}", applicationFile,
ioe);
System.exit(1);
}
if ( app.getFramework() == null ) {
@@ -64,10 +94,15 @@ public class Main {
try {
final Scanner scanner = new Scanner(new ArtifactManagerConfig());
- final Analyser analyser = new Analyser(scanner);
+ final Analyser analyser;
+ if (pluginClass != null) {
+ analyser = new Analyser(scanner, pluginClass);
+ } else {
+ analyser = new Analyser(scanner);
+ }
analyser.analyse(app);
} catch ( final Exception e) {
- logger.error("Unable to analyse application: {}", f, e);
+ logger.error("Unable to analyse application: {}", applicationFile,
e);
System.exit(1);
}
}
--
To stop receiving notification emails like this one, please contact
[email protected].