diff -r 599aad77e986 -r 189b1260b942 java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java --- 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 namedParameters = new ArrayList<>(); private final List numberedParameters = new ArrayList<>(); + private final EnumSet 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 getShowInfo() { + return showInfo; + } }