Changeset: aa4108a5bc34 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/aa4108a5bc34
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetDriver.java
        src/main/java/org/monetdb/mcl/net/Target.java
Branch: monetdbs
Log Message:

Move more URL and properties parsing responsibilities to Target


diffs (90 lines):

diff --git a/src/main/java/org/monetdb/jdbc/MonetDriver.java 
b/src/main/java/org/monetdb/jdbc/MonetDriver.java
--- a/src/main/java/org/monetdb/jdbc/MonetDriver.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDriver.java
@@ -106,31 +106,12 @@ public final class MonetDriver implement
                if (!acceptsURL(url))
                        return null;
 
-               Target target = new Target();
-
                try {
-                       // If properties are given, add those first
-                       if (info != null) {
-                               for (String key : info.stringPropertyNames()) {
-                                       String value = info.getProperty(key);
-                                       if (key.equals(Parameter.HOST.name))
-                                               value = 
Target.unpackHost(value);
-                                       target.setString(key, value);
-                               }
-                       }
-
-                       // If url is exactly "jdbc:monetdb:", use just the 
properties.
-                       // This is different from, say, jdbc:monetdb://, 
because the
-                       // latter will clear preexisting host, port, TLS and 
database settings.
-                       // Useful in combination with Target.toProperties().
-                       if (!url.equals("jdbc:monetdb:"))
-                               MonetUrlParser.parse(target, url.substring(5));
+                       Target target = new Target(url, info);
+                       return new MonetConnection(target);
                } catch (ValidationError | URISyntaxException e) {
                        throw new SQLException(e.getMessage());
                }
-
-        // finally return the Connection object as requested
-               return new MonetConnection(target);
        }
 
        /**
diff --git a/src/main/java/org/monetdb/mcl/net/Target.java 
b/src/main/java/org/monetdb/mcl/net/Target.java
--- a/src/main/java/org/monetdb/mcl/net/Target.java
+++ b/src/main/java/org/monetdb/mcl/net/Target.java
@@ -1,5 +1,7 @@
 package org.monetdb.mcl.net;
 
+import java.net.URISyntaxException;
+import java.util.Properties;
 import java.util.regex.Pattern;
 
 public class Target {
@@ -42,6 +44,12 @@ public class Target {
         this.timezone = (int)Parameter.TIMEZONE.getDefault();
     }
 
+    public Target(String url, Properties props) throws URISyntaxException, 
ValidationError {
+        this();
+        setProperties(props);
+        parseUrl(url);
+    }
+
     public void barrier() {
         if (userWasSet && !passwordWasSet)
             password = "";
@@ -89,6 +97,28 @@ public class Target {
         assign(parm, parm.getDefault());
     }
 
+    public void setProperties(Properties props) throws ValidationError {
+        if (props != null) {
+            for (String key : props.stringPropertyNames()) {
+                String value = props.getProperty(key);
+                if (key.equals(Parameter.HOST.name))
+                    value = Target.unpackHost(value);
+                setString(key, value);
+            }
+        }
+    }
+
+    public void parseUrl(String url) throws URISyntaxException, 
ValidationError {
+        if (url == null)
+            return;
+        if (url.startsWith("jdbc:"))
+            url = url.substring(5);
+        if (url.equals("monetdb:")) {
+            return;
+        }
+        MonetUrlParser.parse(this, url);
+    }
+
     private void assign(Parameter parm, Object value) {
         switch (parm) {
             case TLS: setTls((boolean)value); break;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to