--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIParser.java Sun Dec 15 22:44:11 2013 +0100
@@ -0,0 +1,122 @@
+package info.globalcode.sql.dk;
+
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author Ing. František Kučera (frantovo.cz)
+ */
+public class CLIParser {
+
+ public static final String TYPE_NAME_SEPARATOR = ":";
+ private final Map<String, Integer> types;
+
+ public CLIParser() {
+ Map<String, Integer> m = new HashMap<>();
+ m.put("int", Types.INTEGER);
+ m.put("string", Types.VARCHAR);
+ m.put("boolean", Types.BOOLEAN);
+ /**
+ * TODO: more types
+ */
+ types = Collections.unmodifiableMap(m);
+ }
+
+ public CLIOptions parseOptions(String[] args) {
+ CLIOptions options = new CLIOptions();
+
+ List<Integer> numberedTypes = new ArrayList<>();
+ Map<String, Integer> namedTypes = new HashMap<>();
+
+ for (int i = 0; i < args.length; i++) {
+ String arg = args[i];
+ switch (arg) {
+ case Tokens.TYPES:
+ String typesString = args[++i];
+
+ for (String oneType : typesString.split("\\s*,\\s*")) {
+ int sepatratorIndex = oneType.indexOf(TYPE_NAME_SEPARATOR);
+ if (sepatratorIndex == -1) {
+ numberedTypes.add(getType(oneType));
+ } else {
+ String namePart = oneType.substring(0, sepatratorIndex);
+ String typePart = oneType.substring(sepatratorIndex + TYPE_NAME_SEPARATOR.length(), oneType.length());
+ namedTypes.put(namePart, getType(typePart));
+ }
+ }
+ break;
+ case Tokens.NAME_PREFIX:
+ options.setNamePrefix(args[++i]);
+ break;
+ case Tokens.DB:
+ options.setDatabaseName(args[++i]);
+ break;
+ case Tokens.SQL:
+ options.setSql(args[++i]);
+ options.setCommandType(CLIOptions.COMMAND_TYPE.QUERY);
+ break;
+ case Tokens.SQL_UPDATE:
+ case Tokens.SQL_INSERT:
+ options.setSql(args[++i]);
+ options.setCommandType(CLIOptions.COMMAND_TYPE.UPDATE);
+ break;
+ case Tokens.BATCH:
+ options.setBatch(true);
+ break;
+ case Tokens.DATA: // --data is the last option
+ for (i++; i < args.length; i++) {
+ arg = args[i];
+
+ if (arg.startsWith(options.getNamePrefix())) {
+ String paramName = arg.substring(options.getNamePrefix().length());
+ String paramValue = args[++i];
+ options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName)));
+ } else {
+ int paramIndex = options.getNumberedParameters().size();
+ int paramType;
+ try {
+ paramType = numberedTypes.get(paramIndex);
+ } catch (IndexOutOfBoundsException e) {
+ throw new IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
+ } catch (NullPointerException e) {
+ throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
+ }
+ options.addNumberedParameter(new Parameter(arg, paramType));
+ }
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown option: " + arg);
+ }
+ }
+
+
+
+ return options;
+
+ }
+
+ public static class Tokens {
+
+ public static final String DB = "--db";
+ public static final String SQL = "--sql";
+ public static final String SQL_UPDATE = "--sql-update";
+ public static final String SQL_INSERT = "--sql-insert";
+ public static final String BATCH = "--batch";
+ public static final String DATA = "--data";
+ public static final String NAME_PREFIX = "--name-prefix";
+ public static final String TYPES = "--types";
+
+ private Tokens() {
+ }
+ }
+
+ private Integer getType(String typeString) {
+ return types.get(typeString);
+ }
+}
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Sun Dec 15 22:07:51 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java Sun Dec 15 22:44:11 2013 +0100
@@ -1,129 +1,13 @@
package info.globalcode.sql.dk;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
*
* @author Ing. František Kučera (frantovo.cz)
*/
public class CLIStarter {
- public static final String TYPE_NAME_SEPARATOR = ":";
- private static final Map<String, Integer> types;
-
- static {
- Map<String, Integer> m = new HashMap<>();
- m.put("int", Types.INTEGER);
- m.put("string", Types.VARCHAR);
- m.put("boolean", Types.BOOLEAN);
- /**
- * TODO: more types
- */
- types = Collections.unmodifiableMap(m);
- }
-
public static void main(String[] args) {
-
- args = new String[]{"--sql", "SELECT * FROM tabulka;", "--db", "databáze_1", "--types", "int,bbb,omfg:int,omg:boolean", "--data", "xxx", ":omfg", "hodnota omfg", ":omg", "true"};
-
- CLIOptions options = parseOptions(args);
- }
-
- private static CLIOptions parseOptions(String[] args) {
- CLIOptions options = new CLIOptions();
-
- List<Integer> numberedTypes = new ArrayList<>();
- Map<String, Integer> namedTypes = new HashMap<>();
-
- for (int i = 0; i < args.length; i++) {
- String arg = args[i];
- switch (arg) {
- case Tokens.TYPES:
- String typesString = args[++i];
-
- for (String oneType : typesString.split("\\s*,\\s*")) {
- int sepatratorIndex = oneType.indexOf(TYPE_NAME_SEPARATOR);
- if (sepatratorIndex == -1) {
- numberedTypes.add(getType(oneType));
- } else {
- String namePart = oneType.substring(0, sepatratorIndex);
- String typePart = oneType.substring(sepatratorIndex + TYPE_NAME_SEPARATOR.length(), oneType.length());
- namedTypes.put(namePart, getType(typePart));
- }
- }
- break;
- case Tokens.NAME_PREFIX:
- options.setNamePrefix(args[++i]);
- break;
- case Tokens.DB:
- options.setDatabaseName(args[++i]);
- break;
- case Tokens.SQL:
- options.setSql(args[++i]);
- options.setCommandType(CLIOptions.COMMAND_TYPE.QUERY);
- break;
- case Tokens.SQL_UPDATE:
- case Tokens.SQL_INSERT:
- options.setSql(args[++i]);
- options.setCommandType(CLIOptions.COMMAND_TYPE.UPDATE);
- break;
- case Tokens.BATCH:
- options.setBatch(true);
- break;
- case Tokens.DATA: // --data is the last option
- for (i++; i < args.length; i++) {
- arg = args[i];
-
- if (arg.startsWith(options.getNamePrefix())) {
- String paramName = arg.substring(options.getNamePrefix().length());
- String paramValue = args[++i];
- options.addNamedParameter(new NamedParameter(paramName, paramValue, namedTypes.get(paramName)));
- } else {
- int paramIndex = options.getNumberedParameters().size();
- int paramType;
- try {
- paramType = numberedTypes.get(paramIndex);
- } catch (IndexOutOfBoundsException e) {
- throw new IllegalArgumentException("Missing type for parameter #" + paramIndex, e);
- } catch (NullPointerException e) {
- throw new IllegalArgumentException("Invalid type definition for parameter #" + paramIndex, e);
- }
- options.addNumberedParameter(new Parameter(arg, paramType));
- }
- }
- break;
- default:
- throw new IllegalArgumentException("Unknown option: " + arg);
- }
- }
-
-
-
- return options;
-
- }
-
- public static class Tokens {
-
- public static final String DB = "--db";
- public static final String SQL = "--sql";
- public static final String SQL_UPDATE = "--sql-update";
- public static final String SQL_INSERT = "--sql-insert";
- public static final String BATCH = "--batch";
- public static final String DATA = "--data";
- public static final String NAME_PREFIX = "--name-prefix";
- public static final String TYPES = "--types";
-
- private Tokens() {
- }
- }
-
- private static Integer getType(String typeString) {
- return types.get(typeString);
+ CLIParser parser = new CLIParser();
+ CLIOptions options = parser.parseOptions(args);
}
}