From d625f5e6221efb27e4ab2518943dfa24d20a905f Mon Sep 17 00:00:00 2001
From: Nikolaus Krismer <niko@krismer.de>
Date: Tue, 17 Jun 2014 14:47:11 +0200
Subject: [PATCH] remoced apache dbutils dependency (added own class for
 closing database objects quietly)

---
 build.gradle                                  |   1 -
 .../inf/isochrone/config/ConfigDataset.java   |  13 +-
 .../inf/isochrone/config/ConfigIsochrone.java |  33 ----
 .../it/unibz/inf/isochrone/db/Database.java   |   2 -
 .../it/unibz/inf/isochrone/db/DbUtils.java    | 145 ++++++++++++++++++
 5 files changed, 156 insertions(+), 38 deletions(-)
 create mode 100644 src/main/java/it/unibz/inf/isochrone/db/DbUtils.java

diff --git a/build.gradle b/build.gradle
index 9a9c205f..a4e4b0ec 100644
--- a/build.gradle
+++ b/build.gradle
@@ -128,7 +128,6 @@ buildscript {
 }
 
 dependencies {
-	compile group: 'commons-dbutils', name: 'commons-dbutils', version: '+'
 	compile group: 'commons-io', name: 'commons-io', version: '+'
 	compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '+'
 	compile group: 'com.jolbox', name: 'bonecp', version: '+'
diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
index 97b7c298..6dc27633 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
@@ -10,6 +10,7 @@ import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformer;
 import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformers;
 import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue;
 
+import it.unibz.inf.isochrone.db.DbUtils;
 import it.unibz.inf.isochrone.db.TableEntry;
 import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isochrone.util.ResourceHelper;
@@ -17,6 +18,7 @@ import it.unibz.inf.isochrone.util.ResourceHelper;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.sql.SQLException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -426,10 +428,17 @@ public class ConfigDataset {
 
 	private static Collection<String> filterInvalidDatasets(final Collection<String> datasets) {
 		LOGGER.info("Filtering invalid datasets (e.g. which have no database tables)");
-
 		final ConfigIsochrone config = ConfigIsochrone.getInstance();
+
+		final Collection<String> allTables;
+		try {
+			allTables = DbUtils.getAllTables(config.getConnection());
+		} catch (SQLException e) {
+			LOGGER.warn("Could not get tables from database... datasets will not be filtered at all");
+			return datasets;
+		}
+
 		final Collection<String> filteredList = new ArrayList<>(datasets.size());
-		final Collection<String> allTables = config.getAllTables();
 		for (final String ds : datasets) {
 			final ConfigDataset c = ConfigDataset.createInstance(ds);
 			if (c.hasValidDatabase(allTables)) {
diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
index ae992b1c..69816331 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
@@ -10,16 +10,11 @@ import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue;
 
 import it.unibz.inf.isochrone.db.ConnectionFactory;
 
-import java.sql.CallableStatement;
 import java.sql.Connection;
-import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.commons.dbutils.DbUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -163,32 +158,4 @@ public final class ConfigIsochrone {
 		}
 	}
 
-	public Collection<String> getAllTables() {
-		final Connection connection = getConnection();
-		if (connection == null) {
-			throw new NullPointerException("Connection to database could not be initialized");
-		}
-
-		final Collection<String> result = new ArrayList<>();
-		final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'";
-
-		ResultSet rs = null;
-		CallableStatement stmt = null;
-		try {
-			stmt = connection.prepareCall(query);
-			rs = stmt.executeQuery();
-			while (rs.next()) {
-				result.add(rs.getString("tablename"));
-			}
-		} catch (SQLException e) {
-			LOGGER.warn("Could not get tables from database");
-		} finally {
-			DbUtils.closeQuietly(rs);
-			DbUtils.closeQuietly(stmt);
-			DbUtils.closeQuietly(connection);
-		}
-
-		return result;
-	}
-
 }
diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java
index eb976e8f..4a33c065 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -21,8 +21,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.dbutils.DbUtils;
-
 /**
  * <p>
  * Database layer.  Contains all database queries for the different
diff --git a/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java
new file mode 100644
index 00000000..ba476d59
--- /dev/null
+++ b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java
@@ -0,0 +1,145 @@
+package it.unibz.inf.isochrone.db;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * A collection of JDBC helper methods. This class is thread safe.
+ */
+
+public final class DbUtils {
+	// CHECKSTYLE:OFF EmptyBlock
+
+	private DbUtils() { }
+
+	/**
+	 * Close a <code>Connection</code>, avoid closing if null.
+	 *
+	 * @param conn Connection to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final Connection conn) throws SQLException {
+		if (conn != null) {
+			conn.close();
+		}
+	}
+
+	/**
+	 * Close a <code>ResultSet</code>, avoid closing if null.
+	 *
+	 * @param rs ResultSet to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final ResultSet rs) throws SQLException {
+		if (rs != null) {
+			rs.close();
+		}
+	}
+
+	/**
+	 * Close a <code>Statement</code>, avoid closing if null.
+	 *
+	 * @param stmt Statement to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final Statement stmt) throws SQLException {
+		if (stmt != null) {
+			stmt.close();
+		}
+	}
+
+	/**
+	 * Close a <code>Connection</code>, avoid closing if null and hide
+	 * any SQLExceptions that occur.
+	 *
+	 * @param conn Connection to close.
+	 */
+	public static void closeQuietly(final Connection conn) {
+		try {
+			close(conn);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	/**
+	 * Close a <code>Connection</code>, <code>Statement</code> and <code>ResultSet</code>. Avoid closing if null and hide any
+	 * SQLExceptions that occur.
+	 *
+	 * @param conn Connection to close.
+	 * @param stmt Statement to close.
+	 * @param rs ResultSet to close.
+	 */
+	public static void closeQuietly(final Connection conn, final Statement stmt, final ResultSet rs) {
+		try {
+			closeQuietly(rs);
+		} finally {
+			try {
+				closeQuietly(stmt);
+			} finally {
+				closeQuietly(conn);
+			}
+		}
+	}
+
+	/**
+	 * Close a <code>ResultSet</code>, avoid closing if null and hide any
+	 * SQLExceptions that occur.
+	 *
+	 * @param rs ResultSet to close.
+	 */
+	public static void closeQuietly(final ResultSet rs) {
+		try {
+			close(rs);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	/**
+	 * Close a <code>Statement</code>, avoid closing if null and hide
+	 * any SQLExceptions that occur.
+	 *
+	 * @param stmt Statement to close.
+	 */
+	public static void closeQuietly(final Statement stmt) {
+		try {
+			close(stmt);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	// CHECKSTYLE:ON EmptyBlock
+
+	public static Collection<String> getAllTables(final Connection connection) throws SQLException {
+		if (connection == null) {
+			throw new NullPointerException("Connection to database could not be initialized");
+		}
+
+		final Collection<String> result = new ArrayList<>();
+		final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'";
+
+		ResultSet rs = null;
+		CallableStatement stmt = null;
+		try {
+			stmt = connection.prepareCall(query);
+			rs = stmt.executeQuery();
+			while (rs.next()) {
+				result.add(rs.getString("tablename"));
+			}
+		} finally {
+			DbUtils.closeQuietly(rs);
+			DbUtils.closeQuietly(stmt);
+			DbUtils.closeQuietly(connection);
+		}
+
+		return result;
+	}
+
+}
-- 
GitLab