diff -r f5c3350f3d78 -r 26223eb63851 java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java --- 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 types; - - static { - Map 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 numberedTypes = new ArrayList<>(); - Map 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); } }