View Javadoc
1   /**************************************************************************
2    *
3    * Copyright (c) 2019-2020 Yawg project contributors.
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  /* default */ final class BakerCliBakeOptionsParser {
23  
24  
25      private BakerCliBakeOptionsParser() {
26          // Nothing to do.
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  }