1 package info.globalcode.sql.dk;
3 import static info.globalcode.sql.dk.Functions.isNotEmpty;
4 import java.util.ArrayList;
5 import java.util.Collection;
10 * @author Ing. František Kučera (frantovo.cz)
12 public class CLIOptions {
14 public static final String DEFAULT_NAME_PREFIX = ":";
16 private String databaseName;
17 private String namePrefix = DEFAULT_NAME_PREFIX;
18 private boolean batch;
27 public enum COMMAND_TYPE {
31 /** INSERT, UPDATE, DELETE */
34 private COMMAND_TYPE commandType;
35 private final Collection<NamedParameter> namedParameters = new ArrayList<>();
36 private final List<Parameter> numberedParameters = new ArrayList<>();
38 public void validate() throws InvalidOptionsException {
39 InvalidOptionsException e = new InvalidOptionsException();
41 if (getMode() == null) {
42 e.addProblem(new InvalidOptionsException.OptionProblem("Invalid combination of DB, SQL and BATCH – please specify just 2 of this 3 options"));
45 if (!namedParameters.isEmpty() && !numberedParameters.isEmpty()) {
46 e.addProblem(new InvalidOptionsException.OptionProblem("Named and numbered parameters can not be used together in one command."));
50 if (e.hasProblems()) {
55 private boolean hasSql() {
56 return isNotEmpty(getSql(), true);
59 private boolean hasDb() {
60 return isNotEmpty(getDatabaseName(), true);
64 * Depends on options: DB, BATCH, SQL
66 * @return mode | or null if options are not yet initialized or combination of options is
69 public MODE getMode() {
70 if (hasDb() && !batch && hasSql()) {
71 return MODE.QUERY_NOW;
72 } else if (!hasDb() && batch && hasSql()) {
73 return MODE.PREPARE_BATCH;
74 } else if (hasDb() && batch && !hasSql()) {
75 return MODE.EXECUTE_BATCH;
81 public String getSql() {
85 public void setSql(String sql) {
89 public String getDatabaseName() {
93 public void setDatabaseName(String databaseName) {
94 this.databaseName = databaseName;
97 public void setBatch(boolean batch) {
101 public COMMAND_TYPE getCommandType() {
105 public void setCommandType(COMMAND_TYPE commandType) {
106 this.commandType = commandType;
109 public Collection<NamedParameter> getNamedParameters() {
110 return namedParameters;
113 public List<Parameter> getNumberedParameters() {
114 return numberedParameters;
117 public void addNumberedParameter(Parameter p) {
118 numberedParameters.add(p);
121 public void addNamedParameter(NamedParameter p) {
122 namedParameters.add(p);
125 public String getNamePrefix() {
129 public void setNamePrefix(String namePrefix) {
130 this.namePrefix = namePrefix;