diff --git a/src/main/java/com/bartek/esa/EsaMain.java b/src/main/java/com/bartek/esa/EsaMain.java index f2845ac..4c179bc 100644 --- a/src/main/java/com/bartek/esa/EsaMain.java +++ b/src/main/java/com/bartek/esa/EsaMain.java @@ -1,5 +1,8 @@ package com.bartek.esa; +import com.bartek.esa.cli.model.CliArgsOptions; +import com.bartek.esa.dispatcher.dispatcher.MethodDispatcher; +import com.bartek.esa.dispatcher.model.DispatcherActions; import com.bartek.esa.cli.parser.CliArgsParser; import com.bartek.esa.di.DaggerDependencyInjector; @@ -7,14 +10,23 @@ import javax.inject.Inject; public class EsaMain { private final CliArgsParser cliArgsParser; + private final MethodDispatcher methodDispatcher; @Inject - EsaMain(CliArgsParser cliArgsParser) { + EsaMain(CliArgsParser cliArgsParser, MethodDispatcher methodDispatcher) { this.cliArgsParser = cliArgsParser; + this.methodDispatcher = methodDispatcher; } private void run(String[] args) { - // cliArgsParser.parse(...) + DispatcherActions dispatcherActions = DispatcherActions.builder() + .sourceAnalysis(source -> {}) + .apkAudit(source -> {}) + .build(); + + CliArgsOptions options = cliArgsParser.parse(args); + + methodDispatcher.dispatchMethod(options, dispatcherActions); } public static void main(String[] args) { diff --git a/src/main/java/com/bartek/esa/cli/model/CliArgsActions.java b/src/main/java/com/bartek/esa/cli/model/CliArgsActions.java deleted file mode 100644 index 313e601..0000000 --- a/src/main/java/com/bartek/esa/cli/model/CliArgsActions.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.bartek.esa.cli.model; - -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class CliArgsActions { -} diff --git a/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java b/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java new file mode 100644 index 0000000..fe6ca79 --- /dev/null +++ b/src/main/java/com/bartek/esa/cli/model/CliArgsOptions.java @@ -0,0 +1,19 @@ +package com.bartek.esa.cli.model; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CliArgsOptions { + private String sourceAnalysisDirectory; + private String apkAuditFile; + + public boolean isSourceAnalysis() { + return sourceAnalysisDirectory != null; + } + + public boolean isApkAudit() { + return apkAuditFile != null; + } +} 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 ec96d01..2c86e8e 100644 --- a/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java +++ b/src/main/java/com/bartek/esa/cli/parser/CliArgsParser.java @@ -1,15 +1,49 @@ package com.bartek.esa.cli.parser; -import com.bartek.esa.cli.model.CliArgsActions; +import com.bartek.esa.cli.model.CliArgsOptions; +import com.bartek.esa.error.EsaException; +import io.vavr.control.Try; +import org.apache.commons.cli.*; import javax.inject.Inject; public class CliArgsParser { + private static final String SRC_OPT = "src"; + private static final String APK_OPT = "apk"; @Inject public CliArgsParser() {} - public void parse(String[] args, CliArgsActions actions) { + public CliArgsOptions parse(String[] args) { + CommandLine command = Try.of(() -> new DefaultParser().parse(prepareOptions(), args)) + .getOrElseThrow(EsaException::new); + return CliArgsOptions.builder() + .sourceAnalysisDirectory(command.hasOption(SRC_OPT) ? command.getOptionValue(SRC_OPT) : null) + .apkAuditFile(command.hasOption(APK_OPT) ? command.getOptionValue(APK_OPT) : null) + .build(); + } + + private Options prepareOptions() { + Options options = new Options(); + options.addOption(source()); + options.addOption(apk()); + return options; + } + + private Option source() { + return Option.builder() + .longOpt(SRC_OPT) + .hasArg() + .desc("perform analysis for Java code and XML resources") + .build(); + } + + private Option apk() { + return Option.builder() + .longOpt(APK_OPT) + .hasArg() + .desc("perform audit for compiled APK file") + .build(); } } diff --git a/src/main/java/com/bartek/esa/di/DependencyInjector.java b/src/main/java/com/bartek/esa/di/DependencyInjector.java index 85d0744..0a601fb 100644 --- a/src/main/java/com/bartek/esa/di/DependencyInjector.java +++ b/src/main/java/com/bartek/esa/di/DependencyInjector.java @@ -2,10 +2,12 @@ package com.bartek.esa.di; import com.bartek.esa.EsaMain; import com.bartek.esa.cli.di.CliModule; +import com.bartek.esa.dispatcher.di.DispatcherModule; import dagger.Component; @Component(modules = { - CliModule.class + CliModule.class, + DispatcherModule.class }) public interface DependencyInjector { EsaMain esa(); diff --git a/src/main/java/com/bartek/esa/dispatcher/di/DispatcherModule.java b/src/main/java/com/bartek/esa/dispatcher/di/DispatcherModule.java new file mode 100644 index 0000000..88fe190 --- /dev/null +++ b/src/main/java/com/bartek/esa/dispatcher/di/DispatcherModule.java @@ -0,0 +1,14 @@ +package com.bartek.esa.dispatcher.di; + +import com.bartek.esa.dispatcher.dispatcher.MethodDispatcher; +import dagger.Module; +import dagger.Provides; + +@Module +public class DispatcherModule { + + @Provides + MethodDispatcher methodDispatcher() { + return new MethodDispatcher(); + } +} diff --git a/src/main/java/com/bartek/esa/dispatcher/dispatcher/MethodDispatcher.java b/src/main/java/com/bartek/esa/dispatcher/dispatcher/MethodDispatcher.java new file mode 100644 index 0000000..306795d --- /dev/null +++ b/src/main/java/com/bartek/esa/dispatcher/dispatcher/MethodDispatcher.java @@ -0,0 +1,25 @@ +package com.bartek.esa.dispatcher.dispatcher; + +import com.bartek.esa.cli.model.CliArgsOptions; +import com.bartek.esa.dispatcher.model.DispatcherActions; + +import javax.inject.Inject; + +public class MethodDispatcher { + + @Inject + public MethodDispatcher() { + + } + + public void dispatchMethod(CliArgsOptions options, DispatcherActions actions) { + if(options.isSourceAnalysis()) { + actions.getSourceAnalysis().accept(options.getSourceAnalysisDirectory()); + return; + } + + if(options.isApkAudit()) { + actions.getApkAudit().accept(options.getApkAuditFile()); + } + } +} diff --git a/src/main/java/com/bartek/esa/dispatcher/model/DispatcherActions.java b/src/main/java/com/bartek/esa/dispatcher/model/DispatcherActions.java new file mode 100644 index 0000000..a3411c8 --- /dev/null +++ b/src/main/java/com/bartek/esa/dispatcher/model/DispatcherActions.java @@ -0,0 +1,13 @@ +package com.bartek.esa.dispatcher.model; + +import lombok.Builder; +import lombok.Data; + +import java.util.function.Consumer; + +@Data +@Builder +public class DispatcherActions { + private Consumer sourceAnalysis; + private Consumer apkAudit; +}