1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java Mon Dec 16 12:10:45 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java Mon Dec 16 15:15:32 2013 +0100
1.3 @@ -1,8 +1,10 @@
1.4 package info.globalcode.sql.dk;
1.5
1.6 import static info.globalcode.sql.dk.Functions.isNotEmpty;
1.7 +import static info.globalcode.sql.dk.Functions.equalz;
1.8 import java.util.ArrayList;
1.9 import java.util.Collection;
1.10 +import java.util.EnumSet;
1.11 import java.util.List;
1.12
1.13 /**
1.14 @@ -15,13 +17,24 @@
1.15 private String sql;
1.16 private String databaseName;
1.17 private String namePrefix = DEFAULT_NAME_PREFIX;
1.18 + private String formatterName;
1.19 private boolean batch;
1.20
1.21 public enum MODE {
1.22
1.23 QUERY_NOW,
1.24 PREPARE_BATCH,
1.25 - EXECUTE_BATCH
1.26 + EXECUTE_BATCH,
1.27 + JUST_SHOW_INFO
1.28 + }
1.29 +
1.30 + public enum INFO_TYPE {
1.31 +
1.32 + HELP,
1.33 + VERSION,
1.34 + LICENSE,
1.35 + FORMATTERS,
1.36 + TYPES
1.37 }
1.38
1.39 public enum COMMAND_TYPE {
1.40 @@ -34,12 +47,36 @@
1.41 private COMMAND_TYPE commandType;
1.42 private final Collection<NamedParameter> namedParameters = new ArrayList<>();
1.43 private final List<Parameter> numberedParameters = new ArrayList<>();
1.44 + private final EnumSet<INFO_TYPE> showInfo = EnumSet.noneOf(INFO_TYPE.class);
1.45
1.46 public void validate() throws InvalidOptionsException {
1.47 InvalidOptionsException e = new InvalidOptionsException();
1.48
1.49 - if (getMode() == null) {
1.50 + MODE mode = getMode();
1.51 + if (mode == null) {
1.52 e.addProblem(new InvalidOptionsException.OptionProblem("Invalid combination of DB, SQL and BATCH – please specify just 2 of this 3 options"));
1.53 + } else if (mode == MODE.JUST_SHOW_INFO) {
1.54 + if (!namedParameters.isEmpty()) {
1.55 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not use named parameters if just showing info."));
1.56 + }
1.57 + if (!numberedParameters.isEmpty()) {
1.58 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not use numbered parameters if just showing info."));
1.59 + }
1.60 + if (isNotEmpty(sql, false)) {
1.61 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify SQL if just showing info."));
1.62 + }
1.63 + if (isNotEmpty(databaseName, false)) {
1.64 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify database if just showing info."));
1.65 + }
1.66 + if (batch) {
1.67 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify batch if just showing info."));
1.68 + }
1.69 + if (isNotEmpty(formatterName, false)) {
1.70 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify formatter if just showing info."));
1.71 + }
1.72 + if (!equalz(namePrefix, DEFAULT_NAME_PREFIX)) {
1.73 + e.addProblem(new InvalidOptionsException.OptionProblem("Do not specify name prefix if just showing info."));
1.74 + }
1.75 }
1.76
1.77 if (!namedParameters.isEmpty() && !numberedParameters.isEmpty()) {
1.78 @@ -74,7 +111,7 @@
1.79 } else if (hasDb() && batch && !hasSql()) {
1.80 return MODE.EXECUTE_BATCH;
1.81 } else {
1.82 - return null;
1.83 + return showInfo.isEmpty() ? null : MODE.JUST_SHOW_INFO;
1.84 }
1.85 }
1.86
1.87 @@ -129,4 +166,20 @@
1.88 public void setNamePrefix(String namePrefix) {
1.89 this.namePrefix = namePrefix;
1.90 }
1.91 +
1.92 + public String getFormatterName() {
1.93 + return formatterName;
1.94 + }
1.95 +
1.96 + public void setFormatterName(String formatterName) {
1.97 + this.formatterName = formatterName;
1.98 + }
1.99 +
1.100 + public void addShowInfo(INFO_TYPE info) {
1.101 + showInfo.add(info);
1.102 + }
1.103 +
1.104 + public EnumSet<INFO_TYPE> getShowInfo() {
1.105 + return showInfo;
1.106 + }
1.107 }