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