author | František Kučera <franta-hg@frantovo.cz> |
Sat, 15 Aug 2015 14:35:27 +0200 | |
branch | v_0 |
changeset 216 | 0eb9aec16bf4 |
parent 209 | 8dfe037b3274 |
child 217 | 84bab99dda50 |
permissions | -rw-r--r-- |
16
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
1 |
/** |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
2 |
* SQL-DK |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
3 |
* Copyright © 2013 František Kučera (frantovo.cz) |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
4 |
* |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
5 |
* This program is free software: you can redistribute it and/or modify |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
6 |
* it under the terms of the GNU General Public License as published by |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
7 |
* the Free Software Foundation, either version 3 of the License, or |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
8 |
* (at your option) any later version. |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
9 |
* |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
10 |
* This program is distributed in the hope that it will be useful, |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
13 |
* GNU General Public License for more details. |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
14 |
* |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
16 |
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
5b8fcd35d4d6
license: GNU GPLv3+
František Kučera <franta-hg@frantovo.cz>
parents:
15
diff
changeset
|
17 |
*/ |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
18 |
package info.globalcode.sql.dk; |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
19 |
|
166
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
20 |
import static info.globalcode.sql.dk.Functions.readString; |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
21 |
import info.globalcode.sql.dk.InfoLister.InfoType; |
107
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
22 |
import info.globalcode.sql.dk.configuration.Property; |
166
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
23 |
import java.io.IOException; |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
24 |
import java.io.InputStream; |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
25 |
import java.util.ArrayList; |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
26 |
import java.util.HashMap; |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
27 |
import java.util.List; |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
28 |
import java.util.Map; |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
29 |
|
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
30 |
/** |
155 | 31 |
* Converts command line arguments from String array to object. |
32 |
* Checks basic constraints (if only supported options are used and if they have correct number of |
|
33 |
* parameters) |
|
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
34 |
* |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
35 |
* @author Ing. František Kučera (frantovo.cz) |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
36 |
*/ |
5 | 37 |
public class CLIParser { |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
38 |
|
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
39 |
public static final String TYPE_NAME_SEPARATOR = ":"; |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
40 |
|
166
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
41 |
public CLIOptions parseOptions(String[] args, InputStream in) throws CLIParserException { |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
42 |
CLIOptions options = new CLIOptions(); |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
43 |
|
68
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
44 |
List<SQLType> numberedTypes = new ArrayList<>(); |
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
45 |
Map<String, SQLType> namedTypes = new HashMap<>(); |
2 | 46 |
|
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
47 |
for (int i = 0; i < args.length; i++) { |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
48 |
String arg = args[i]; |
2 | 49 |
switch (arg) { |
50 |
case Tokens.TYPES: |
|
8 | 51 |
String typesString = fetchNext(args, ++i); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
52 |
|
10 | 53 |
for (String oneType : typesString.split(",")) { |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
54 |
int sepatratorIndex = oneType.indexOf(TYPE_NAME_SEPARATOR); |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
55 |
if (sepatratorIndex == -1) { |
93
5a4dbe6f962c
Type names in --types option are case insensitive
František Kučera <franta-hg@frantovo.cz>
parents:
79
diff
changeset
|
56 |
numberedTypes.add(getType(oneType.toUpperCase())); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
57 |
} else { |
12
2dcb67d90fd2
unit-test: names, types, prefix
František Kučera <franta-hg@frantovo.cz>
parents:
10
diff
changeset
|
58 |
String namePart = oneType.substring(0, sepatratorIndex).trim(); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
59 |
String typePart = oneType.substring(sepatratorIndex + TYPE_NAME_SEPARATOR.length(), oneType.length()); |
93
5a4dbe6f962c
Type names in --types option are case insensitive
František Kučera <franta-hg@frantovo.cz>
parents:
79
diff
changeset
|
60 |
namedTypes.put(namePart, getType(typePart.toUpperCase())); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
61 |
} |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
62 |
} |
2 | 63 |
break; |
64 |
case Tokens.NAME_PREFIX: |
|
8 | 65 |
options.setNamePrefix(fetchNext(args, ++i)); |
2 | 66 |
break; |
44
67581ec4396e
named parameters: suffix (default is empty)
František Kučera <franta-hg@frantovo.cz>
parents:
37
diff
changeset
|
67 |
case Tokens.NAME_SUFFIX: |
67581ec4396e
named parameters: suffix (default is empty)
František Kučera <franta-hg@frantovo.cz>
parents:
37
diff
changeset
|
68 |
options.setNameSuffix(fetchNext(args, ++i)); |
67581ec4396e
named parameters: suffix (default is empty)
František Kučera <franta-hg@frantovo.cz>
parents:
37
diff
changeset
|
69 |
break; |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
70 |
case Tokens.DB: |
8 | 71 |
options.setDatabaseName(fetchNext(args, ++i)); |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
72 |
break; |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
73 |
case Tokens.SQL: |
8 | 74 |
options.setSql(fetchNext(args, ++i)); |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
75 |
break; |
166
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
76 |
case Tokens.SQL_IN: |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
77 |
try { |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
78 |
options.setSql(readString(in)); |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
79 |
} catch (IOException e) { |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
80 |
throw new CLIParserException("Unable to read SQL from the input stream", e); |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
81 |
} |
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
82 |
break; |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
83 |
case Tokens.BATCH: |
2 | 84 |
options.setBatch(true); |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
85 |
break; |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
86 |
case Tokens.DATA: // --data is the last option |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
87 |
for (i++; i < args.length; i++) { |
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
88 |
arg = args[i]; |
52
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
89 |
Parameter parameter; |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
90 |
if (numberedTypes.isEmpty()) { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
91 |
parameter = new Parameter(arg, null); |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
92 |
} else { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
93 |
int paramIndex = options.getNumberedParameters().size(); |
68
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
94 |
SQLType paramType; |
52
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
95 |
try { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
96 |
paramType = numberedTypes.get(paramIndex); |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
97 |
} catch (IndexOutOfBoundsException e) { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
98 |
throw new CLIParserException("Missing type for parameter #" + paramIndex, e); |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
99 |
} catch (NullPointerException e) { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
100 |
throw new CLIParserException("Invalid type definition for parameter #" + paramIndex, e); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
101 |
} |
52
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
102 |
parameter = new Parameter(arg, paramType); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
103 |
} |
52
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
104 |
options.addNumberedParameter(parameter); |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
105 |
} |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
106 |
break; |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
107 |
case Tokens.DATA_NAMED: |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
108 |
for (i++; i < args.length; i++) { |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
109 |
String paramName = args[i]; |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
110 |
String paramValue = fetchNext(args, ++i); |
e2ba2af0ef40
new option --data-named (then follows name/value pairs without prefix/suffix)
František Kučera <franta-hg@frantovo.cz>
parents:
49
diff
changeset
|
111 |
options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName))); |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
112 |
} |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
113 |
break; |
14 | 114 |
case Tokens.FORMATTER: |
115 |
options.setFormatterName(fetchNext(args, ++i)); |
|
116 |
break; |
|
107
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
117 |
case Tokens.DB_PROPERTY: |
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
118 |
options.addDatabaseProperty(new Property(fetchNext(args, ++i), fetchNext(args, ++i))); |
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
119 |
break; |
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
120 |
case Tokens.FORMATTER_PROPERTY: |
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
121 |
options.addFormatterProperty(new Property(fetchNext(args, ++i), fetchNext(args, ++i))); |
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
122 |
break; |
14 | 123 |
case Tokens.INFO_HELP: |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
124 |
options.addShowInfo(InfoType.HELP); |
14 | 125 |
break; |
126 |
case Tokens.INFO_FORMATTERS: |
|
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
127 |
options.addShowInfo(InfoType.FORMATTERS); |
14 | 128 |
break; |
209
8dfe037b3274
property annotations: grounds for --list-formatter-properties
František Kučera <franta-hg@frantovo.cz>
parents:
200
diff
changeset
|
129 |
case Tokens.INFO_FORMATTER_PROPERTIES: |
8dfe037b3274
property annotations: grounds for --list-formatter-properties
František Kučera <franta-hg@frantovo.cz>
parents:
200
diff
changeset
|
130 |
options.addShowInfo(InfoType.FORMATTER_PROPERTIES); |
8dfe037b3274
property annotations: grounds for --list-formatter-properties
František Kučera <franta-hg@frantovo.cz>
parents:
200
diff
changeset
|
131 |
options.addFormatterNameToListProperties(fetchNext(args, ++i)); |
8dfe037b3274
property annotations: grounds for --list-formatter-properties
František Kučera <franta-hg@frantovo.cz>
parents:
200
diff
changeset
|
132 |
break; |
14 | 133 |
case Tokens.INFO_LICENSE: |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
134 |
options.addShowInfo(InfoType.LICENSE); |
14 | 135 |
break; |
200
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
136 |
case Tokens.INFO_JAVA_PROPERTIES: |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
137 |
options.addShowInfo(InfoType.JAVA_PROPERTIES); |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
138 |
break; |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
139 |
case Tokens.INFO_ENVIRONMENT_VARIABLES: |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
140 |
options.addShowInfo(InfoType.ENVIRONMENT_VARIABLES); |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
141 |
break; |
14 | 142 |
case Tokens.INFO_TYPES: |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
143 |
options.addShowInfo(InfoType.TYPES); |
14 | 144 |
break; |
145 |
case Tokens.INFO_VERSION: |
|
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
146 |
options.addShowInfo(InfoType.VERSION); |
14 | 147 |
break; |
158
770b5009ec42
InfoLister: print list of available JDBC drivers: --list-jdbc-drivers
František Kučera <franta-hg@frantovo.cz>
parents:
155
diff
changeset
|
148 |
case Tokens.INFO_JDBC_DRIVERS: |
770b5009ec42
InfoLister: print list of available JDBC drivers: --list-jdbc-drivers
František Kučera <franta-hg@frantovo.cz>
parents:
155
diff
changeset
|
149 |
options.addShowInfo(InfoType.JDBC_DRIVERS); |
770b5009ec42
InfoLister: print list of available JDBC drivers: --list-jdbc-drivers
František Kučera <franta-hg@frantovo.cz>
parents:
155
diff
changeset
|
150 |
break; |
159
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
151 |
case Tokens.INFO_JDBC_PROPERTIES: |
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
152 |
options.addShowInfo(InfoType.JDBC_PROPERTIES); |
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
153 |
options.addDatabaseNameToListProperties(fetchNext(args, ++i)); |
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
154 |
break; |
15
bbd335b5410c
show info basics: list databases + test connection
František Kučera <franta-hg@frantovo.cz>
parents:
14
diff
changeset
|
155 |
case Tokens.INFO_DATABASES: |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
156 |
options.addShowInfo(InfoType.DATABASES); |
15
bbd335b5410c
show info basics: list databases + test connection
František Kučera <franta-hg@frantovo.cz>
parents:
14
diff
changeset
|
157 |
break; |
bbd335b5410c
show info basics: list databases + test connection
František Kučera <franta-hg@frantovo.cz>
parents:
14
diff
changeset
|
158 |
case Tokens.INFO_CONNECTION: |
69
0befec5034c2
InfoLister, InfoType: switch → enum
František Kučera <franta-hg@frantovo.cz>
parents:
68
diff
changeset
|
159 |
options.addShowInfo(InfoType.CONNECTION); |
159
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
160 |
options.addDatabaseNameToTest(fetchNext(args, ++i)); |
15
bbd335b5410c
show info basics: list databases + test connection
František Kučera <franta-hg@frantovo.cz>
parents:
14
diff
changeset
|
161 |
break; |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
162 |
default: |
9 | 163 |
throw new CLIParserException("Unknown option: " + arg); |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
164 |
} |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
165 |
} |
8 | 166 |
return options; |
167 |
} |
|
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
168 |
|
9 | 169 |
private String fetchNext(String[] args, int index) throws CLIParserException { |
8 | 170 |
if (index < args.length) { |
171 |
return args[index]; |
|
172 |
} else { |
|
9 | 173 |
throw new CLIParserException("Expecting value for option: " + args[index - 1]); |
8 | 174 |
} |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
175 |
} |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
176 |
|
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
177 |
public static class Tokens { |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
178 |
|
79
e19a13ed19a9
more bash completion tags
František Kučera <franta-hg@frantovo.cz>
parents:
77
diff
changeset
|
179 |
// bash-completion:options: |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
180 |
public static final String DB = "--db"; // bash-completion:option // help: database name |
107
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
181 |
public static final String DB_PROPERTY = "--db-property"; // bash-completion:option // help: name and value |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
182 |
public static final String SQL = "--sql"; // bash-completion:option // help: SQL query/command |
166
5488c2dcf680
SQL from STDIN: --sql-in
František Kučera <franta-hg@frantovo.cz>
parents:
159
diff
changeset
|
183 |
public static final String SQL_IN = "--sql-in"; // bash-completion:option // help: SQL query/command |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
184 |
public static final String BATCH = "--batch"; // bash-completion:option // help: batch mode (no argument) |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
185 |
public static final String DATA = "--data"; // bash-completion:option // help: list of ordinal parameters |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
186 |
public static final String DATA_NAMED = "--data-named"; // bash-completion:option // help: list of named parameters |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
187 |
public static final String NAME_PREFIX = "--name-prefix"; // bash-completion:option // help: parameter name prefix – regular expression |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
188 |
public static final String NAME_SUFFIX = "--name-suffix"; // bash-completion:option // help: parameter name suffix – regular expression |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
189 |
public static final String TYPES = "--types"; // bash-completion:option // help: comma separated list of parameter types |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
190 |
public static final String FORMATTER = "--formatter"; // bash-completion:option // help: name of the output formatter |
107
8189a4a28cd8
database/formatter properties also as CLI options
František Kučera <franta-hg@frantovo.cz>
parents:
99
diff
changeset
|
191 |
public static final String FORMATTER_PROPERTY = "--formatter-property"; // bash-completion:option // help: name and value |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
192 |
public static final String INFO_HELP = "--help"; // bash-completion:option // help: print this help |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
193 |
public static final String INFO_VERSION = "--version"; // bash-completion:option // help: print version info |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
194 |
public static final String INFO_LICENSE = "--license"; // bash-completion:option // help: print license |
200
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
195 |
public static final String INFO_JAVA_PROPERTIES = "--list-java-properties"; // bash-completion:option // help: list of Java system properties |
2e351d7c26c4
InfoLister: new listings: --list-java-properties and --list-environment-variables
František Kučera <franta-hg@frantovo.cz>
parents:
166
diff
changeset
|
196 |
public static final String INFO_ENVIRONMENT_VARIABLES = "--list-environment-variables"; // bash-completion:option // help: list of environment variables |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
197 |
public static final String INFO_FORMATTERS = "--list-formatters"; // bash-completion:option // help: print list of available formatters |
209
8dfe037b3274
property annotations: grounds for --list-formatter-properties
František Kučera <franta-hg@frantovo.cz>
parents:
200
diff
changeset
|
198 |
public static final String INFO_FORMATTER_PROPERTIES = "--list-formatter-properties"; // bash-completion:option // help: print list of available formatter properties |
99
b969176512dd
Data types help: not all available types are currently supported (will be later by type converters)
František Kučera <franta-hg@frantovo.cz>
parents:
96
diff
changeset
|
199 |
public static final String INFO_TYPES = "--list-types"; // bash-completion:option // help: print list of available data types |
158
770b5009ec42
InfoLister: print list of available JDBC drivers: --list-jdbc-drivers
František Kučera <franta-hg@frantovo.cz>
parents:
155
diff
changeset
|
200 |
public static final String INFO_JDBC_DRIVERS = "--list-jdbc-drivers"; // bash-completion:option // help: list of available JDBC drivers |
159
9632b23df30c
InfoLister: list configured and configurable JDBC driver properties – option: --list-jdbc-properties
František Kučera <franta-hg@frantovo.cz>
parents:
158
diff
changeset
|
201 |
public static final String INFO_JDBC_PROPERTIES = "--list-jdbc-properties"; // bash-completion:option // help: list of available JDBC properties for given database |
96
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
202 |
public static final String INFO_DATABASES = "--list-databases"; // bash-completion:option // help: print list of configured databases |
7ae30649b30b
basic generated help
František Kučera <franta-hg@frantovo.cz>
parents:
93
diff
changeset
|
203 |
public static final String INFO_CONNECTION = "--test-connection"; // bash-completion:option // help: test connection to particular database |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
204 |
|
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
205 |
private Tokens() { |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
206 |
} |
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
207 |
} |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
208 |
|
68
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
209 |
private SQLType getType(String typeString) throws CLIParserException { |
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
210 |
try { |
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
211 |
return SQLType.valueOf(typeString.trim()); |
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
212 |
} catch (IllegalArgumentException e) { |
574cd7fbb5b2
SQLType enum wrapper for java.sql.Types
František Kučera <franta-hg@frantovo.cz>
parents:
62
diff
changeset
|
213 |
throw new CLIParserException("Unsupported type: " + typeString, e); |
8 | 214 |
} |
4
f5c3350f3d78
data/types CLI options parsing
František Kučera <franta-hg@frantovo.cz>
parents:
3
diff
changeset
|
215 |
} |
1
f32dac78d13a
WOW some classes LOL; TODO: refactor
František Kučera <franta-hg@frantovo.cz>
parents:
diff
changeset
|
216 |
} |