diff --git a/src/main/java/com/bartek/esa/EsaMain.java b/src/main/java/com/bartek/esa/EsaMain.java index aab71b6..ef18130 100644 --- a/src/main/java/com/bartek/esa/EsaMain.java +++ b/src/main/java/com/bartek/esa/EsaMain.java @@ -12,6 +12,7 @@ import com.bartek.esa.formatter.provider.FormatterProvider; import javax.inject.Inject; import java.util.Set; +import java.util.stream.Collectors; public class EsaMain { private final CliArgsParser cliArgsParser; @@ -37,9 +38,16 @@ public class EsaMain { CliArgsOptions options = cliArgsParser.parse(args); Set issues = methodDispatcher.dispatchMethod(options, dispatcherActions); - formatterProvider.provide(options).format(issues); + Set filteredIssues = filterIssuesBySeverity(options, issues); + formatterProvider.provide(options).format(filteredIssues); - exitWithErrorIfAnyIssueIsAnError(issues); + exitWithErrorIfAnyIssueIsAnError(filteredIssues); + } + + private Set filterIssuesBySeverity(CliArgsOptions options, Set issues) { + return issues.stream() + .filter(issue -> options.getSeverities().contains(issue.getSeverity().name())) + .collect(Collectors.toSet()); } private void exitWithErrorIfAnyIssueIsAnError(Set issues) { diff --git a/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java b/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java index 1280bdb..074b5fb 100644 --- a/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java +++ b/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java @@ -15,6 +15,7 @@ public class CliArgsOptions { private Set excludes; private Set plugins; private boolean color; + private Set severities; public boolean isSourceAnalysis() { return sourceAnalysisDirectory != null; @@ -26,8 +27,6 @@ public class CliArgsOptions { public static CliArgsOptions empty() { return CliArgsOptions.builder() - .sourceAnalysisDirectory(null) - .apkAuditFile(null) .excludes(emptySet()) .plugins(emptySet()) .build(); diff --git a/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java b/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java index f98c873..1dd5d06 100644 --- a/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java +++ b/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java @@ -1,12 +1,15 @@ package com.bartek.esa.cli.parser; import com.bartek.esa.cli.model.CliArgsOptions; +import com.bartek.esa.core.model.enumeration.Severity; import org.apache.commons.cli.*; import javax.inject.Inject; import java.util.HashSet; +import java.util.stream.Collectors; import static java.util.Arrays.asList; +import static java.util.Arrays.stream; import static java.util.Collections.emptySet; public class CliArgsParser { @@ -16,6 +19,7 @@ public class CliArgsParser { private static final String HELP_OPT = "help"; private static final String PLUGINS_OPT = "plugins"; private static final String COLOR_OPT = "color"; + private static final String SEVERITIES_OPT = "severities"; @Inject public CliArgsParser() {} @@ -34,6 +38,7 @@ public class CliArgsParser { if (command.hasOption(HELP_OPT)) { printHelp(); + return CliArgsOptions.empty(); } @@ -49,6 +54,7 @@ public class CliArgsParser { .plugins(command.hasOption(PLUGINS_OPT) ? new HashSet<>(asList(command.getOptionValues(PLUGINS_OPT))) : emptySet()) .excludes(command.hasOption(EXCLUDE_OPT) ? new HashSet<>(asList(command.getOptionValues(EXCLUDE_OPT))) : emptySet()) .color(command.hasOption(COLOR_OPT)) + .severities(command.hasOption(SEVERITIES_OPT) ? new HashSet<>(asList((command.getOptionValues(SEVERITIES_OPT)))) : stream(Severity.values()).map(Severity::name).collect(Collectors.toSet())) .build(); } @@ -65,6 +71,7 @@ public class CliArgsParser { options.addOption(plugins()); options.addOption(help()); options.addOption(color()); + options.addOption(severities()); return options; } @@ -117,4 +124,14 @@ public class CliArgsParser { .desc("enable colored output") .build(); } + + private Option severities() { + String severities = stream(Severity.values()).map(Severity::name).map(String::toUpperCase).collect(Collectors.joining(", ")); + return Option.builder() + .longOpt(SEVERITIES_OPT) + .argName("SEVERITY") + .numberOfArgs(Option.UNLIMITED_VALUES) + .desc("filter output to selected severities(available: " + severities + ")") + .build(); + } }