java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java
branchv_0
changeset 14 189b1260b942
parent 3 efdf2b886feb
child 15 bbd335b5410c
     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  }