java/sql-dk/src/info/globalcode/sql/dk/CLIOptions.java
author František Kučera <franta-hg@frantovo.cz>
Sun, 15 Dec 2013 20:25:15 +0100
branchv_0
changeset 3 efdf2b886feb
parent 2 72da10f632b5
child 14 189b1260b942
permissions -rw-r--r--
name prefix
franta-hg@1
     1
package info.globalcode.sql.dk;
franta-hg@1
     2
franta-hg@1
     3
import static info.globalcode.sql.dk.Functions.isNotEmpty;
franta-hg@1
     4
import java.util.ArrayList;
franta-hg@1
     5
import java.util.Collection;
franta-hg@1
     6
import java.util.List;
franta-hg@1
     7
franta-hg@1
     8
/**
franta-hg@1
     9
 *
franta-hg@1
    10
 * @author Ing. František Kučera (frantovo.cz)
franta-hg@1
    11
 */
franta-hg@1
    12
public class CLIOptions {
franta-hg@1
    13
franta-hg@3
    14
	public static final String DEFAULT_NAME_PREFIX = ":";
franta-hg@1
    15
	private String sql;
franta-hg@1
    16
	private String databaseName;
franta-hg@3
    17
	private String namePrefix = DEFAULT_NAME_PREFIX;
franta-hg@1
    18
	private boolean batch;
franta-hg@2
    19
franta-hg@2
    20
	public enum MODE {
franta-hg@2
    21
franta-hg@2
    22
		QUERY_NOW,
franta-hg@2
    23
		PREPARE_BATCH,
franta-hg@2
    24
		EXECUTE_BATCH
franta-hg@2
    25
	}
franta-hg@1
    26
franta-hg@1
    27
	public enum COMMAND_TYPE {
franta-hg@1
    28
franta-hg@1
    29
		/** SELECT */
franta-hg@1
    30
		QUERY,
franta-hg@1
    31
		/** INSERT, UPDATE, DELETE */
franta-hg@1
    32
		UPDATE
franta-hg@1
    33
	};
franta-hg@1
    34
	private COMMAND_TYPE commandType;
franta-hg@1
    35
	private final Collection<NamedParameter> namedParameters = new ArrayList<>();
franta-hg@1
    36
	private final List<Parameter> numberedParameters = new ArrayList<>();
franta-hg@1
    37
franta-hg@1
    38
	public void validate() throws InvalidOptionsException {
franta-hg@1
    39
		InvalidOptionsException e = new InvalidOptionsException();
franta-hg@1
    40
franta-hg@2
    41
		if (getMode() == null) {
franta-hg@1
    42
			e.addProblem(new InvalidOptionsException.OptionProblem("Invalid combination of DB, SQL and BATCH – please specify just 2 of this 3 options"));
franta-hg@1
    43
		}
franta-hg@1
    44
franta-hg@1
    45
		if (!namedParameters.isEmpty() && !numberedParameters.isEmpty()) {
franta-hg@1
    46
			e.addProblem(new InvalidOptionsException.OptionProblem("Named and numbered parameters can not be used together in one command."));
franta-hg@1
    47
		}
franta-hg@1
    48
franta-hg@1
    49
franta-hg@1
    50
		if (e.hasProblems()) {
franta-hg@1
    51
			throw e;
franta-hg@1
    52
		}
franta-hg@1
    53
	}
franta-hg@1
    54
franta-hg@2
    55
	private boolean hasSql() {
franta-hg@2
    56
		return isNotEmpty(getSql(), true);
franta-hg@1
    57
	}
franta-hg@1
    58
franta-hg@2
    59
	private boolean hasDb() {
franta-hg@2
    60
		return isNotEmpty(getDatabaseName(), true);
franta-hg@1
    61
	}
franta-hg@1
    62
franta-hg@2
    63
	/**
franta-hg@2
    64
	 * Depends on options: DB, BATCH, SQL
franta-hg@2
    65
	 *
franta-hg@2
    66
	 * @return mode | or null if options are not yet initialized or combination of options is
franta-hg@2
    67
	 * invalid
franta-hg@2
    68
	 */
franta-hg@2
    69
	public MODE getMode() {
franta-hg@2
    70
		if (hasDb() && !batch && hasSql()) {
franta-hg@2
    71
			return MODE.QUERY_NOW;
franta-hg@2
    72
		} else if (!hasDb() && batch && hasSql()) {
franta-hg@2
    73
			return MODE.PREPARE_BATCH;
franta-hg@2
    74
		} else if (hasDb() && batch && !hasSql()) {
franta-hg@2
    75
			return MODE.EXECUTE_BATCH;
franta-hg@2
    76
		} else {
franta-hg@2
    77
			return null;
franta-hg@2
    78
		}
franta-hg@2
    79
	}
franta-hg@2
    80
franta-hg@2
    81
	public String getSql() {
franta-hg@2
    82
		return sql;
franta-hg@2
    83
	}
franta-hg@2
    84
franta-hg@2
    85
	public void setSql(String sql) {
franta-hg@2
    86
		this.sql = sql;
franta-hg@2
    87
	}
franta-hg@2
    88
franta-hg@2
    89
	public String getDatabaseName() {
franta-hg@2
    90
		return databaseName;
franta-hg@2
    91
	}
franta-hg@2
    92
franta-hg@2
    93
	public void setDatabaseName(String databaseName) {
franta-hg@2
    94
		this.databaseName = databaseName;
franta-hg@2
    95
	}
franta-hg@2
    96
franta-hg@2
    97
	public void setBatch(boolean batch) {
franta-hg@2
    98
		this.batch = batch;
franta-hg@2
    99
	}
franta-hg@2
   100
franta-hg@2
   101
	public COMMAND_TYPE getCommandType() {
franta-hg@2
   102
		return commandType;
franta-hg@2
   103
	}
franta-hg@2
   104
franta-hg@2
   105
	public void setCommandType(COMMAND_TYPE commandType) {
franta-hg@2
   106
		this.commandType = commandType;
franta-hg@2
   107
	}
franta-hg@2
   108
franta-hg@2
   109
	public Collection<NamedParameter> getNamedParameters() {
franta-hg@2
   110
		return namedParameters;
franta-hg@2
   111
	}
franta-hg@2
   112
franta-hg@2
   113
	public List<Parameter> getNumberedParameters() {
franta-hg@2
   114
		return numberedParameters;
franta-hg@2
   115
	}
franta-hg@2
   116
franta-hg@2
   117
	public void addNumberedParameter(Parameter p) {
franta-hg@2
   118
		numberedParameters.add(p);
franta-hg@2
   119
	}
franta-hg@2
   120
franta-hg@2
   121
	public void addNamedParameter(NamedParameter p) {
franta-hg@2
   122
		namedParameters.add(p);
franta-hg@1
   123
	}
franta-hg@3
   124
franta-hg@3
   125
	public String getNamePrefix() {
franta-hg@3
   126
		return namePrefix;
franta-hg@3
   127
	}
franta-hg@3
   128
franta-hg@3
   129
	public void setNamePrefix(String namePrefix) {
franta-hg@3
   130
		this.namePrefix = namePrefix;
franta-hg@3
   131
	}
franta-hg@1
   132
}