use database properties v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed, 01 Jan 2014 01:06:38 +0100
branchv_0
changeset 106 e9c3583580c8
parent 105 39d8b427e20f
child 107 8189a4a28cd8
use database properties
java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java
java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java
java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java
java/sql-dk/src/info/globalcode/sql/dk/configuration/DatabaseDefinition.java
java/sql-dk/src/info/globalcode/sql/dk/configuration/Properties.java
--- a/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java	Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/CLIStarter.java	Wed Jan 01 01:06:38 2014 +0100
@@ -139,7 +139,7 @@
 	private void processQueryNow() throws ConfigurationException, SQLException, FormatterException {
 		DatabaseDefinition dd = getConfiguration().getDatabase(options.getDatabaseName());
 		FormatterDefinition fd = configuration.getFormatter(options.getFormatterName());
-		try (DatabaseConnection c = dd.connect()) {
+		try (DatabaseConnection c = dd.connect(options.getDatabaseProperties())) {
 			log.log(Level.FINE, "Database connected");
 			try (Formatter f = fd.getInstance(new FormatterContext(options.getOutputStream(), options.getFormatterProperties()))) {
 				c.executeQuery(options.getSQLCommand(), f);
--- a/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java	Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/DatabaseConnection.java	Wed Jan 01 01:06:38 2014 +0100
@@ -19,6 +19,7 @@
 
 import info.globalcode.sql.dk.batch.Batch;
 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
+import info.globalcode.sql.dk.configuration.Properties;
 import info.globalcode.sql.dk.formatting.ColumnsHeader;
 import info.globalcode.sql.dk.formatting.Formatter;
 import java.sql.Connection;
@@ -39,11 +40,18 @@
 	private static final Logger log = Logger.getLogger(DatabaseConnection.class.getName());
 	private DatabaseDefinition databaseDefinition;
 	private Connection connection;
+	private Properties properties;
 
-	public DatabaseConnection(DatabaseDefinition databaseDefinition) throws SQLException {
+	public DatabaseConnection(DatabaseDefinition databaseDefinition, Properties properties) throws SQLException {
 		this.databaseDefinition = databaseDefinition;
+		this.properties = properties;
 
-		connection = DriverManager.getConnection(databaseDefinition.getUrl(), databaseDefinition.getUserName(), databaseDefinition.getPassword());
+		properties.setDefaults(databaseDefinition.getProperties());
+		java.util.Properties javaProperties = properties.getJavaProperties();
+		javaProperties.setProperty("user", databaseDefinition.getUserName());
+		javaProperties.setProperty("password", databaseDefinition.getPassword());
+
+		connection = DriverManager.getConnection(databaseDefinition.getUrl(), javaProperties);
 	}
 
 	public void executeQuery(SQLCommand sqlCommand, Formatter formatter) throws SQLException {
--- a/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java	Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java	Wed Jan 01 01:06:38 2014 +0100
@@ -165,7 +165,7 @@
 			DatabaseDefinition dd = configurationProvider.getConfiguration().getDatabase(dbName);
 			log.log(Level.FINE, "Database definition was loaded from configuration");
 			succesfullyConfigured = true;
-			try (DatabaseConnection dc = dd.connect()) {
+			try (DatabaseConnection dc = dd.connect(options.getDatabaseProperties())) {
 				succesfullyConnected = dc.test();
 			}
 			log.log(Level.FINE, "Database connection test was successful");
--- a/java/sql-dk/src/info/globalcode/sql/dk/configuration/DatabaseDefinition.java	Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/configuration/DatabaseDefinition.java	Wed Jan 01 01:06:38 2014 +0100
@@ -80,7 +80,10 @@
 		this.properties = properties;
 	}
 
-	public DatabaseConnection connect() throws SQLException {
-		return new DatabaseConnection(this);
+	/**
+	 * @param properties ad-hoc properties from CLI options
+	 */
+	public DatabaseConnection connect(Properties properties) throws SQLException {
+		return new DatabaseConnection(this, properties);
 	}
 }
--- a/java/sql-dk/src/info/globalcode/sql/dk/configuration/Properties.java	Tue Dec 31 18:11:50 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/configuration/Properties.java	Wed Jan 01 01:06:38 2014 +0100
@@ -88,4 +88,22 @@
 		Collections.copy(clone, this);
 		return clone;
 	}
+
+	/**
+	 * @return merged this and backing defaults as Java Properties
+	 */
+	public java.util.Properties getJavaProperties() {
+		java.util.Properties javaProperties = new java.util.Properties();
+		if (defaults != null) {
+			duplicateTo(javaProperties);
+		}
+		duplicateTo(javaProperties);
+		return javaProperties;
+	}
+
+	private void duplicateTo(java.util.Properties javaProperties) {
+		for (Property p : this) {
+			javaProperties.setProperty(p.getName(), p.getValue());
+		}
+	}
 }