java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java
branchv_0
changeset 5 26223eb63851
parent 4 f5c3350f3d78
child 13 599aad77e986
--- 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);
 	}
 }