1
2
3
4
5
6
7 package com.varmateo.yawg.cli;
8
9 import java.nio.file.Path;
10
11 import io.vavr.Tuple;
12 import io.vavr.Tuple2;
13 import io.vavr.collection.HashMap;
14 import io.vavr.collection.Map;
15 import io.vavr.control.Option;
16 import io.vavr.control.Try;
17
18
19
20
21
22 final class BakerCliBakeOptionsParser {
23
24
25 private BakerCliBakeOptionsParser() {
26
27 }
28
29
30
31
32
33 public static Try<BakerCliBakeOptions> parse(final String[] args) {
34
35 return BakerCliParameters.parse(args)
36 .flatMap(BakerCliBakeOptionsParser::parse);
37 }
38
39
40
41
42
43 public static Try<BakerCliBakeOptions> parse(final CliParameterSet cliParams) {
44
45 return Try.of(() -> doParseParameters(cliParams));
46 }
47
48
49 private static BakerCliBakeOptions doParseParameters(final CliParameterSet cliParams)
50 throws CliException {
51
52 final Path sourceDir = cliParams.getPath(BakerCliParameters.SOURCE_DIR);
53 final Path targetDir = cliParams.getPath(BakerCliParameters.TARGET_DIR);
54 final Path templatesDir = cliParams.getPath(BakerCliParameters.TEMPLATES_DIR, null);
55 final Map<String, String> externalPageVars = buildExternalPageVars(cliParams);
56
57 return BakerCliBakeOptions.builder()
58 .sourceDir(sourceDir)
59 .targetDir(targetDir)
60 .templatesDir(Option.of(templatesDir))
61 .externalPageVars(externalPageVars)
62 .build();
63 }
64
65
66 private static Map<String, String> buildExternalPageVars(final CliParameterSet cliParams) {
67
68 return cliParams
69 .getAll(BakerCliParameters.PAGE_VAR)
70 .map(BakerCliBakeOptionsParser::getVarNameAndValueFromOptionValue)
71 .foldLeft(
72 HashMap.empty(),
73 (map, t) -> map.put(t._1, t._2));
74 }
75
76
77 private static Tuple2<String,String> getVarNameAndValueFromOptionValue(
78 final String optionValue) {
79
80 final String varName;
81 final String varValue;
82 final int indexOfEqSign = optionValue.indexOf('=');
83
84 if ( indexOfEqSign < 0 ) {
85 varName = optionValue;
86 varValue = "";
87 } else {
88 varName = optionValue.substring(0, indexOfEqSign);
89 varValue = optionValue.substring(indexOfEqSign+1);
90 }
91
92 return Tuple.of(varName, varValue);
93 }
94
95 }