initial commit
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / CommandlineHandler.java
1 /*
2  * Meviz - Various tools collection to work with multimedia.
3  * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  * 
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 2 of the GNU General Public License
7  * as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.meviz.encoder;
11
12 import eu.svjatoslav.commons.commandline.parameterparser.Parameter;
13 import eu.svjatoslav.commons.commandline.parameterparser.Parser;
14
15 public class CommandlineHandler {
16
17     Parameter outputFormatParameter = new Parameter(true, true, true,
18             new eu.svjatoslav.commons.commandline.parameterparser.arguments.String(), "Encoding output format.", "-o",
19             "--output-format");
20
21     Parameter terminalParameter = new Parameter("Enable popup terminal.", "--terminal");
22
23     Parameter testParameter = new Parameter("Simulate file encoding.", "-t", "--test");
24
25     Parameter recursiveParameter = new Parameter("Enable recursive mode.", "-r", "--recursive");
26
27     Parameter inputPatternParameter = new Parameter(true, true, true,
28             new eu.svjatoslav.commons.commandline.parameterparser.arguments.String(), "File input pattern.", "-i",
29             "--input-pattern");
30
31     Parameter workingDirectoryParameter = new Parameter(false, true, true,
32             new eu.svjatoslav.commons.commandline.parameterparser.arguments.ExistingDirectory(), "Working directory.",
33             "-w", "--working-directory");
34
35     Parameter videoBitrateParameter = new Parameter(false, true, false, new Bitrate(), "Video bitrate.", "-v",
36             "--video-bitrate");
37
38     public Parser initParser() {
39         final Parser parser = new Parser();
40
41         parser.addParameter(recursiveParameter);
42
43         parser.addParameter(testParameter);
44
45         parser.addParameter(terminalParameter);
46
47         parser.addParameter(outputFormatParameter);
48
49         parser.addParameter(inputPatternParameter);
50
51         parser.addParameter(workingDirectoryParameter);
52
53         parser.addParameter(videoBitrateParameter);
54
55         return parser;
56     }
57
58     /**
59      * @return {@link EncodingOptions} if commandline arguments were
60      *         successfully parsed, or <code>null</code> if parsing error
61      *         occurred.
62      */
63     public EncodingOptions parseCommandlineArguments(final String[] args) {
64
65         final EncodingOptions options = new EncodingOptions();
66
67         final Parser parser = initParser();
68         parser.parse(args);
69
70         if (recursiveParameter.isParameterSpecified())
71             options.recursive = true;
72
73         if (terminalParameter.isParameterSpecified())
74             options.terminal = true;
75
76         if (testParameter.isParameterSpecified())
77             options.testOnly = true;
78
79         if (outputFormatParameter.isParameterSpecified()) {
80             options.outputFormats.addAll(outputFormatParameter.getArgumentsAsStrings());
81         }
82
83         if (workingDirectoryParameter.isParameterSpecified()) {
84             options.workingDirectory = workingDirectoryParameter.getArgumentsAsFiles().get(0);
85         }
86
87         if (inputPatternParameter.isParameterSpecified()) {
88             options.inputPatterns.addAll(inputPatternParameter.getArgumentsAsStrings());
89         }
90
91         if (videoBitrateParameter.isParameterSpecified()) {
92
93             try {
94                 options.videoBitrate = Bitrate.bitrate.valueOf(videoBitrateParameter.getArgumentAsString()
95                         .toUpperCase());
96             } catch (final Exception e) {
97                 System.out.println("Invalid video bitrate. Valid values are: LOW, MEDIUM, HIGH.");
98                 return null;
99             }
100         }
101
102         return options;
103     }
104 }