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