80b130b49c53235cbf550e9cf1f6866e6bfd05d6
[meviz.git] / src / main / java / eu / svjatoslav / meviz / renamer / CommandlineHandler.java
1 /*
2  * Meviz - Various tools collection to work with multimedia. Author: Svjatoslav Agejenko.
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5
6
7 package eu.svjatoslav.meviz.renamer;
8
9 import eu.svjatoslav.commons.cli_helper.parameter_parser.Parser;
10 import eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.DirectoryParameter;
11 import eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.NullParameter;
12 import eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.StringParameter;
13 import eu.svjatoslav.commons.cli_helper.parameter_parser.parameter.StringParameters;
14 import eu.svjatoslav.meviz.encoder.EncodingOptions;
15
16 import java.io.File;
17
18 class CommandlineHandler {
19
20     final Parser parser = new Parser();
21
22     private final NullParameter recursiveParameter = parser.add(
23             new NullParameter("Enable recursive mode.")).addAliases("-r",
24             "--recursive");
25
26     private final NullParameter testParameter = parser.add(
27             new NullParameter(
28                     "Simulate renaming (no changes will be actually done)."))
29             .addAliases("-t", "--test");
30
31     private final StringParameter outputPatternParameter = parser.add(
32             new StringParameter("Output pattern.")).addAliases("-o",
33             "--output-pattern");
34
35     private final StringParameters inputPatternParameter = parser.add(
36             new StringParameters("File input pattern.")).addAliases("-i",
37             "--input-pattern");
38
39     private final DirectoryParameter workingDirectoryParameter = parser
40             .add(new DirectoryParameter("Working directory."))
41             .addAliases("-w", "--working-directory").mustExist();
42
43     /**
44      * @return {@link EncodingOptions} if commandline arguments were
45      * successfully parsed, or <code>null</code> if parsing error
46      * occurred.
47      */
48     public RenamingOptions parseCommandlineArguments(final String[] args) {
49
50         final RenamingOptions options = new RenamingOptions();
51
52         if (!parser.parse(args))
53             return null;
54
55         if (testParameter.isSpecified())
56             options.testOnly = true;
57
58         if (recursiveParameter.isSpecified())
59             options.recursive = true;
60
61         if (outputPatternParameter.isSpecified())
62             options.outputPattern = outputPatternParameter.getValue();
63
64         if (workingDirectoryParameter.isSpecified())
65             options.targetDirectory = workingDirectoryParameter.getValue();
66         else
67             options.targetDirectory = new File(System.getProperty("user.dir"));
68
69         // TODO: add multiple input patterns support
70         if (inputPatternParameter.isSpecified())
71             options.inputPatterns.addAll(inputPatternParameter.getValue());
72
73         return options;
74     }
75 }