From beb60c77e48d2777ec187da8d6059b4ca640a87d Mon Sep 17 00:00:00 2001 From: Ravi Chodavarapu Date: Thu, 10 Mar 2016 13:27:26 +0000 Subject: [PATCH] - Allow getting database connection URL and db version - Fix getting entity as string - Add pair class - Add json object properties --- .../java/org/chodavarapu/datamill/Pair.java | 22 ++++++++++++++++ .../datamill/db/DatabaseClient.java | 26 +++++++++++++++++++ .../datamill/http/impl/InputStreamEntity.java | 2 +- .../chodavarapu/datamill/json/JsonArray.java | 4 +++ .../chodavarapu/datamill/json/JsonObject.java | 20 +++++++++++--- 5 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/org/chodavarapu/datamill/Pair.java diff --git a/core/src/main/java/org/chodavarapu/datamill/Pair.java b/core/src/main/java/org/chodavarapu/datamill/Pair.java new file mode 100644 index 0000000..e642514 --- /dev/null +++ b/core/src/main/java/org/chodavarapu/datamill/Pair.java @@ -0,0 +1,22 @@ +package org.chodavarapu.datamill; + +/** + * @author Ravi Chodavarapu (rchodava@gmail.com) + */ +public class Pair { + private final T1 first; + private final T2 second; + + public Pair(T1 first, T2 second) { + this.first = first; + this.second = second; + } + + public T1 getFirst() { + return first; + } + + public T2 getSecond() { + return second; + } +} diff --git a/core/src/main/java/org/chodavarapu/datamill/db/DatabaseClient.java b/core/src/main/java/org/chodavarapu/datamill/db/DatabaseClient.java index ac0d3e5..a43927b 100644 --- a/core/src/main/java/org/chodavarapu/datamill/db/DatabaseClient.java +++ b/core/src/main/java/org/chodavarapu/datamill/db/DatabaseClient.java @@ -10,11 +10,15 @@ import rx.Observable; import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; /** * @author Ravi Chodavarapu (rchodava@gmail.com) */ public class DatabaseClient extends QueryBuilderImpl implements QueryRunner { + private static final Logger logger = LoggerFactory.getLogger(DatabaseClient.class); + private final DataSource dataSource; private Database database; private final String password; @@ -49,6 +53,28 @@ private Database getDatabase() { return database; } + public String getVersion() { + try (Connection connection = getDatabase().getConnectionProvider().get()) { + StringBuilder vendor = new StringBuilder(); + vendor.append(connection.getMetaData().getDatabaseProductName()); + vendor.append(' '); + vendor.append(connection.getMetaData().getDatabaseProductVersion()); + return vendor.toString(); + } catch (SQLException e) { + logger.debug("Error retrieving database version information", e); + return null; + } + } + + public String getURL() { + try (Connection connection = getDatabase().getConnectionProvider().get()) { + return connection.getMetaData().getURL(); + } catch (SQLException e) { + logger.debug("Error retrieving database connection URL", e); + return null; + } + } + private Flyway getFlyway() { Flyway flyway = new Flyway(); if (dataSource != null) { diff --git a/core/src/main/java/org/chodavarapu/datamill/http/impl/InputStreamEntity.java b/core/src/main/java/org/chodavarapu/datamill/http/impl/InputStreamEntity.java index c4f2791..f2f0637 100644 --- a/core/src/main/java/org/chodavarapu/datamill/http/impl/InputStreamEntity.java +++ b/core/src/main/java/org/chodavarapu/datamill/http/impl/InputStreamEntity.java @@ -46,6 +46,6 @@ public Observable asChunks() { @Override public Observable asString() { - return StringObservable.from(new InputStreamReader(inputStream)); + return asBytes().map(bytes -> new String(bytes)); } } diff --git a/core/src/main/java/org/chodavarapu/datamill/json/JsonArray.java b/core/src/main/java/org/chodavarapu/datamill/json/JsonArray.java index 3ae36a8..9ec96cf 100644 --- a/core/src/main/java/org/chodavarapu/datamill/json/JsonArray.java +++ b/core/src/main/java/org/chodavarapu/datamill/json/JsonArray.java @@ -22,6 +22,10 @@ public JsonArray(String json) { array = new io.vertx.core.json.JsonArray(json); } + JsonArray(io.vertx.core.json.JsonArray array) { + this.array = array; + } + public JsonArray(List values) { ArrayList objects = new ArrayList<>(); for (JsonObject value : values) { diff --git a/core/src/main/java/org/chodavarapu/datamill/json/JsonObject.java b/core/src/main/java/org/chodavarapu/datamill/json/JsonObject.java index 4f5b456..f423b8d 100644 --- a/core/src/main/java/org/chodavarapu/datamill/json/JsonObject.java +++ b/core/src/main/java/org/chodavarapu/datamill/json/JsonObject.java @@ -14,6 +14,10 @@ public class JsonObject implements ReflectableValue { final io.vertx.core.json.JsonObject object; + private JsonObject(io.vertx.core.json.JsonObject object) { + this.object = object; + } + public JsonObject() { object = new io.vertx.core.json.JsonObject(); } @@ -81,11 +85,11 @@ public String asString() { return object.encode(); } - public Value get(String property) { + public JsonProperty get(String property) { return new JsonProperty(property); } - public Value get(Member member) { + public JsonProperty get(Member member) { return get(member.name()); } @@ -163,10 +167,10 @@ public String toString() { return asString(); } - private class JsonProperty implements Value { + public class JsonProperty implements Value { private String name; - public JsonProperty(String name) { + private JsonProperty(String name) { this.name = name; } @@ -214,6 +218,14 @@ public int asInteger() { return object.getInteger(name); } + public JsonArray asJsonArray() { + return new JsonArray(object.getJsonArray(name)); + } + + public JsonObject asJson() { + return new JsonObject(object.getJsonObject(name)); + } + @Override public LocalDateTime asLocalDateTime() { return LocalDateTime.parse(object.getString(name));