--- 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;
+ }
}