java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java
branchv_0
changeset 14 189b1260b942
parent 3 efdf2b886feb
child 15 bbd335b5410c
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java	Mon Dec 16 12:10:45 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java	Mon Dec 16 15:15:32 2013 +0100
@@ -1,8 +1,10 @@
 package info.globalcode.sql.dk;
 
 import static info.globalcode.sql.dk.Functions.isNotEmpty;
+import static info.globalcode.sql.dk.Functions.equalz;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.List;
 
 /**
@@ -15,13 +17,24 @@
 	private String sql;
 	private String databaseName;
 	private String namePrefix = DEFAULT_NAME_PREFIX;
+	private String formatterName;
 	private boolean batch;
 
 	public enum MODE {
 
 		QUERY_NOW,
 		PREPARE_BATCH,
-		EXECUTE_BATCH
+		EXECUTE_BATCH,
+		JUST_SHOW_INFO
+	}
+
+	public enum INFO_TYPE {
+
+		HELP,
+		VERSION,
+		LICENSE,
+		FORMATTERS,
+		TYPES
 	}
 
 	public enum COMMAND_TYPE {
@@ -34,12 +47,36 @@
 	private COMMAND_TYPE commandType;
 	private final Collection<NamedParameter> namedParameters = new ArrayList<>();
 	private final List<Parameter> numberedParameters = new ArrayList<>();
+	private final EnumSet<INFO_TYPE> showInfo = EnumSet.noneOf(INFO_TYPE.class);
 
 	public void validate() throws InvalidOptionsException {
 		InvalidOptionsException e = new InvalidOptionsException();
 
-		if (getMode() == null) {
+		MODE mode = getMode();
+		if (mode == null) {
 			e.addProblem(new InvalidOptionsException.OptionProblem("Invalid combination of DB, SQL and BATCH – please specify just 2 of this 3 options"));
+		} else if (mode == MODE.JUST_SHOW_INFO) {
+			if (!namedParameters.isEmpty()) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not use named parameters if just showing info."));
+			}
+			if (!numberedParameters.isEmpty()) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not use numbered parameters if just showing info."));
+			}
+			if (isNotEmpty(sql, false)) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify SQL if just showing info."));
+			}
+			if (isNotEmpty(databaseName, false)) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify database if just showing info."));
+			}
+			if (batch) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify batch if just showing info."));
+			}
+			if (isNotEmpty(formatterName, false)) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify formatter if just showing info."));
+			}
+			if (!equalz(namePrefix, DEFAULT_NAME_PREFIX)) {
+				e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify name prefix if just showing info."));
+			}
 		}
 
 		if (!namedParameters.isEmpty() && !numberedParameters.isEmpty()) {
@@ -74,7 +111,7 @@
 		} else if (hasDb() && batch && !hasSql()) {
 			return MODE.EXECUTE_BATCH;
 		} else {
-			return null;
+			return showInfo.isEmpty() ? null : MODE.JUST_SHOW_INFO;
 		}
 	}
 
@@ -129,4 +166,20 @@
 	public void setNamePrefix(String namePrefix) {
 		this.namePrefix = namePrefix;
 	}
+
+	public String getFormatterName() {
+		return formatterName;
+	}
+
+	public void setFormatterName(String formatterName) {
+		this.formatterName = formatterName;
+	}
+
+	public void addShowInfo(INFO_TYPE info) {
+		showInfo.add(info);
+	}
+
+	public EnumSet<INFO_TYPE> getShowInfo() {
+		return showInfo;
+	}
 }