[Schmitzm-commits] r1941 - in trunk: schmitzm-adresses/src/main/java/de/schmitzm/adresses schmitzm-db/src/main/java/de/schmitzm/postgres schmitzm-gt/src/main/java/de/schmitzm/geotools/io

scm-commit at wald.intevation.org scm-commit at wald.intevation.org
Wed Apr 11 14:31:58 CEST 2012


Author: alfonx
Date: 2012-04-11 14:31:57 +0200 (Wed, 11 Apr 2012)
New Revision: 1941

Modified:
   trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
   trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
   trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
Log:
Better support for PostGIS Layers in AtlasStyler 1.9

Modified: trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
===================================================================
--- trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java	2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java	2012-04-11 12:31:57 UTC (rev 1941)
@@ -561,6 +561,7 @@
 
 	static public String saeubereStrassenname(String orginal) {
 		String strasse = LangUtil.removeTags(orginal);
+		strasse = strasse.replaceAll("\\+", " ");
 		strasse = strasse.replaceAll("\\s\\s+", " ");
 		strasse = strasse.replaceAll("(\\d)\\s", "$1");
 		strasse = strasse.replaceAll("\\s+-\\s+", "-");

Modified: trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java	2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java	2012-04-11 12:31:57 UTC (rev 1941)
@@ -14,19 +14,21 @@
 import de.schmitzm.lang.LangUtil;
 
 /**
- * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection} sein. In Hibernate kann über #doWork eine
- * {@link Connection} erhalten werden.
+ * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection}
+ * sein. In Hibernate kann über #doWork eine {@link Connection} erhalten werden.
  */
 public class PGUtil {
 	static final Logger log = Logger.getLogger(PGUtil.class);
 
 	/**
-	 * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden können.<br/>
+	 * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden
+	 * können.<br/>
 	 * 
 	 * @see http://www.postgresql.org/docs/9.1/static/sql-grant.html
 	 */
 	public enum Privileges {
-		SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES("ALL PRIVILEGES");
+		SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES(
+				"ALL PRIVILEGES");
 
 		String sql;
 
@@ -55,11 +57,12 @@
 	 *            List der zuzuordnenden Privilegien
 	 * @throws SQLException
 	 */
-	public static void grantPrivilegesOnTable(Connection c, String targetRole, String tablename,
-			Privileges... privileges) throws SQLException {
+	public static void grantPrivilegesOnTable(Connection c, String targetRole,
+			String tablename, Privileges... privileges) throws SQLException {
 		// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
-		String sql = "GRANT " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename + " TO "
-				+ targetRole;
+		String sql = "GRANT "
+				+ LangUtil.stringConcatWithSep(",", (Object[]) privileges)
+				+ " ON " + tablename + " TO " + targetRole;
 		c.createStatement().executeUpdate(sql);
 	}
 
@@ -72,11 +75,12 @@
 	 *            List der zuzuordnenden Privilegien
 	 * @throws SQLException
 	 */
-	public static void revokePrivilegesOnTable(Connection c, String tablename, String targetRole,
-			Privileges... privileges) throws SQLException {
+	public static void revokePrivilegesOnTable(Connection c, String tablename,
+			String targetRole, Privileges... privileges) throws SQLException {
 		// GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
-		String sql = "REVOKE " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename
-				+ " FROM " + targetRole;
+		String sql = "REVOKE "
+				+ LangUtil.stringConcatWithSep(",", (Object[]) privileges)
+				+ " ON " + tablename + " FROM " + targetRole;
 		c.createStatement().executeUpdate(sql);
 	}
 
@@ -88,11 +92,13 @@
 	 * @param inhRoles
 	 *            Rollen in denen die neue Rolle Mitglied ist
 	 */
-	public static void createRole(Connection c, String rolename, String... inhRoles) throws SQLException {
+	public static void createRole(Connection c, String rolename,
+			String... inhRoles) throws SQLException {
 		String sql = "CREATE ROLE " + rolename;
 		c.createStatement().executeUpdate(sql);
 		for (String inhRole : inhRoles)
-			c.createStatement().executeUpdate("GRANT " + inhRole + " TO " + rolename);
+			c.createStatement().executeUpdate(
+					"GRANT " + inhRole + " TO " + rolename);
 	}
 
 	/**
@@ -103,39 +109,96 @@
 	 * @param inhRoles
 	 *            Rollen in denen die neue Rolle Mitglied ist
 	 */
-	public static void createRoleIfNotExists(Connection c, String rolename, String... inhRoles) throws SQLException {
+	public static void createRoleIfNotExists(Connection c, String rolename,
+			String... inhRoles) throws SQLException {
 		if (existsRole(c, rolename))
 			return;
 		createRole(c, rolename, inhRoles);
 	}
 
+	//
+	// /**
+	// * Querys the <code>geometry_columns</code> table. It is part of every
+	// POSTGIS installation and must/should describe
+	// * the geometry columns and tables.
+	// *
+	// * @return Liste von String[], wobei jeder String[] ein Paar aus Schema
+	// und Tabelle
+	// *
+	// */
+	// static public List<String[]>
+	// getTabelsDescribedInGeometryColumnsTable(Statement s) {
+	// String[] columns = new String[0];
+	// try {
+	// ResultSet rs =
+	// s.executeQuery("SELECT distinct f_table_name FROM geometry_columns;");
+	// try {
+	//
+	// while (rs.next()) {
+	// columns = LangUtil.extendArray(columns, rs.getString(1));
+	// }
+	// } finally {
+	// rs.close();
+	// }
+	// } catch (SQLException e) {
+	// log.error(e, e);
+	// }
+	//
+	// return columns;
+	// }
+
 	/**
-	 * Querys the <code>geometry_columns</code> table. It is part of every POSTGIS installation and must/should describe
-	 * the geometry columns and tables.
+	 * Liefert ein {@link PGPostGisMetadata} Objekt für die angefragte
+	 * Geometry-Spalte in der angegebenen Tabelle.
 	 * 
-	 * @deprecated
+	 * @param tablename
+	 *            (auch als Schema.Tablename erlaubt)
+	 * 
+	 * @see #getPostGisMetadata(Connection, String)
 	 */
-	static public String[] getColumnsDescribedInGeometryColumnsTable(Statement s) {
-		String[] columns = new String[0];
+	public static PGPostGisMetadata getPostGisMetadata(Connection c,
+			String tablename, String geoCol) throws SQLException {
+
+		String schema = "public";
+		if (tablename.contains(".")) {
+			final String[] split = tablename.split("\\.");
+			schema = split[0];
+			tablename = split[1];
+		}
+
+		String sql = "SELECT coord_dimension, srid, type FROM geometry_columns where f_table_schema=? and f_table_name=? and f_geometry_column=?";
+		ResultSet rs = null;
+		PreparedStatement s = c.prepareStatement(sql);
+		s.setString(1, schema);
+		s.setString(2, tablename);
+		s.setString(3, geoCol);
+		
 		try {
-			ResultSet rs = s.executeQuery("SELECT f_table_name FROM geometry_columns;");
-			try {
-
-				while (rs.next()) {
-					columns = LangUtil.extendArray(columns, rs.getString(1));
-				}
-			} finally {
+			rs = s.executeQuery();
+			if (rs.next()) {
+				PGPostGisMetadata metadata = new PGPostGisMetadata(schema,
+						tablename, geoCol, rs.getInt(1), rs.getInt(2),
+						rs.getString(3));
+				return metadata;
+			} else
+				return null;
+		} finally {
+			if (rs != null)
 				rs.close();
-			}
-		} catch (SQLException e) {
-			log.error(e, e);
 		}
-
-		return columns;
 	}
 
-	public static PGPostGisMetadata getPostGisMetadata(Connection c, String tablename, String geoCol)
-			throws SQLException {
+	/**
+	 * Liefert ein {@link PGPostGisMetadata} Objekt für die erste
+	 * Geometry-Spalte in der angegebenen Tabelle.
+	 * 
+	 * @param tablename
+	 *            (auch als Schema.Tablename erlaubt)
+	 * 
+	 * @see #getPostGisMetadata(Connection, String, String)
+	 */
+	public static PGPostGisMetadata getPostGisMetadata(Connection c,
+			String tablename) throws SQLException {
 
 		String schema = "public";
 		if (tablename.contains(".")) {
@@ -144,15 +207,17 @@
 			tablename = split[1];
 		}
 
-		String sql = "SELECT coord_dimension, srid, type FROM geometry_columns where f_table_catalog='' and f_table_name='"
-				+ tablename + "' and f_geometry_column='" + geoCol + "'";
+		String sql = "SELECT coord_dimension, srid, type, f_geometry_column FROM geometry_columns where f_table_schema=? and f_table_name=? limit 1";
 		ResultSet rs = null;
-		Statement s = c.createStatement();
+		PreparedStatement s = c.prepareStatement(sql);
+		s.setString(1, schema);
+		s.setString(2, tablename);
 		try {
-			rs = s.executeQuery(sql);
+			rs = s.executeQuery();
 			if (rs.next()) {
-				PGPostGisMetadata metadata = new PGPostGisMetadata(schema, tablename, geoCol, rs.getInt(1),
-						rs.getInt(2), rs.getString(3));
+				PGPostGisMetadata metadata = new PGPostGisMetadata(schema,
+						tablename, rs.getString(4), rs.getInt(1), rs.getInt(2),
+						rs.getString(3));
 				return metadata;
 			} else
 				return null;
@@ -175,8 +240,8 @@
 	 * @Deprecated tut es noch nicht
 	 * 
 	 */
-	public static void createOrUpdateGeometrysColumnsEntry(Connection c, String tableName, String geoColumnName,
-			int srid, String type) {
+	public static void createOrUpdateGeometrysColumnsEntry(Connection c,
+			String tableName, String geoColumnName, int srid, String type) {
 
 		String schema = "public";
 		if (tableName.contains(".")) {
@@ -191,19 +256,15 @@
 				+ tableName
 				+ "', '"
 				+ geoColumnName
-				+ "', 2, "
-				+ srid
-				+ ",'"
-				+ type.toUpperCase()
-				+ "' );";
+				+ "', 2, " + srid + ",'" + type.toUpperCase() + "' );";
 
 	}
 
 	/**
 	 * @param binding
 	 *            Eine "einfache" Javaklasse, die in PG abgebildet werden soll.
-	 * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück, z.b. "double precision" für
-	 *         <code>Double.class</code>
+	 * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück,
+	 *         z.b. "double precision" für <code>Double.class</code>
 	 */
 	public static String getColTypeName(Class<?> binding) {
 
@@ -217,7 +278,8 @@
 			return "bigint";
 		}
 
-		throw new RuntimeException("DB Type mapping for " + binding + " not yet implemented.");
+		throw new RuntimeException("DB Type mapping for " + binding
+				+ " not yet implemented.");
 	}
 
 	/**
@@ -225,19 +287,24 @@
 	 * 
 	 * @return <code>true</code> wenn das Schema neu angelegt wurde.
 	 */
-	public static boolean createSchemaIfNotExists(Connection c, String schemaname) throws SQLException {
+	public static boolean createSchemaIfNotExists(Connection c,
+			String schemaname) throws SQLException {
 		if (!existsSchema(c, schemaname)) {
-			c.createStatement().execute("create schema " + schemaname.toLowerCase());
+			c.createStatement().execute(
+					"create schema " + schemaname.toLowerCase());
 			return true;
 		}
 		return false;
 	}
 
 	/**
-	 * Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG Datenbank existiert.
+	 * Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG
+	 * Datenbank existiert.
 	 */
-	public static boolean existsSchema(Connection c, String schemaname) throws SQLException {
-		String sql = "select 1 from pg_catalog.pg_namespace where nspname = '" + schemaname.toLowerCase() + "'";
+	public static boolean existsSchema(Connection c, String schemaname)
+			throws SQLException {
+		String sql = "select 1 from pg_catalog.pg_namespace where nspname = '"
+				+ schemaname.toLowerCase() + "'";
 		ResultSet rs = c.createStatement().executeQuery(sql);
 		try {
 			return rs.next();
@@ -248,10 +315,12 @@
 	}
 
 	/**
-	 * Liefert eine Liste der Rollen in denen der Übergebenen USER (Login role) ist. <br/>
+	 * Liefert eine Liste der Rollen in denen der Übergebenen USER (Login role)
+	 * ist. <br/>
 	 * Tested with PG 8.4
 	 */
-	public static List<String> listRolesForUser(Connection c, String username) throws SQLException {
+	public static List<String> listRolesForUser(Connection c, String username)
+			throws SQLException {
 		List<String> roles = new ArrayList<String>();
 		String sql = "select rolname from pg_user join pg_auth_members on (pg_user.usesysid=pg_auth_members.member) join pg_roles on (pg_roles.oid=pg_auth_members.roleid) where pg_user.usename='"
 				+ username.toLowerCase() + "'";
@@ -273,7 +342,8 @@
 	 */
 	public static List<String> listUsers(Connection c) throws SQLException {
 		List<String> roles = new ArrayList<String>();
-		ResultSet rs = c.createStatement().executeQuery("select * from pg_user");
+		ResultSet rs = c.createStatement()
+				.executeQuery("select * from pg_user");
 		try {
 			while (rs.next()) {
 				roles.add(rs.getString(1));
@@ -285,17 +355,19 @@
 	}
 
 	/**
-	 * Liste aller Tabellennamen in diesem Schema, ohne die Schemaangabe im Namen. (Also 'anreden' und nicht
-	 * 'public.anreden') <br/>
+	 * Liste aller Tabellennamen in diesem Schema, ohne die Schemaangabe im
+	 * Namen. (Also 'anreden' und nicht 'public.anreden') <br/>
 	 * Tested with PG 8.4
 	 * 
 	 * @param schemaname
 	 *            if <code>null</code>, <code>public</code> is used.
 	 */
-	public static List<String> listTablesInSchema(Connection c, String schemaname) throws SQLException {
+	public static List<String> listTablesInSchema(Connection c,
+			String schemaname) throws SQLException {
 		List<String> tables = new ArrayList<String>();
 
-		String sql = "select tablename from pg_tables where schemaname = '" + schemaname.toLowerCase() + "'";
+		String sql = "select tablename from pg_tables where schemaname = '"
+				+ schemaname.toLowerCase() + "'";
 		ResultSet rs = c.createStatement().executeQuery(sql);
 		try {
 			while (rs.next()) {
@@ -310,14 +382,16 @@
 	/**
 	 * Liefert eine Liste alle Spaltennamen in einer Tabelle.
 	 * 
-	 * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das SChema wird ignoriert. Es gibt also probleme,
-	 * wenn der selbe Tabellenname noch in einem anderen Schema existiert.
+	 * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das
+	 * SChema wird ignoriert. Es gibt also probleme, wenn der selbe Tabellenname
+	 * noch in einem anderen Schema existiert.
 	 * 
 	 * @param tableName
 	 *            darf auch schema-informationen enthalten.
 	 * @throws SQLException
 	 */
-	public List<String> listColumnNamesInTable(Connection c, String tableName) throws SQLException {
+	public List<String> listColumnNamesInTable(Connection c, String tableName)
+			throws SQLException {
 		List<String> cols = new ArrayList<String>();
 
 		for (PGColumn pgcol : listColumnsInTable(c, tableName)) {
@@ -327,7 +401,8 @@
 		return cols;
 	}
 
-	public static PGColumn getFirstGeometryColumn(Connection c, String tablename) throws SQLException {
+	public static PGColumn getFirstGeometryColumn(Connection c, String tablename)
+			throws SQLException {
 		for (PGColumn col : PGUtil.listColumnsInTable(c, tablename)) {
 
 			if (col.isGeometry())
@@ -339,14 +414,16 @@
 	/**
 	 * Liefdert eine Liste alle Spaltenin einer Tabelle.
 	 * 
-	 * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das SChema wird ignoriert. Es gibt also probleme,
-	 * wenn der selbe Tabellenname noch in einem anderen Schema existiert.
+	 * ACHTUNG! Diese Methode schaut gerade nur auf den Tabellennamen! Das
+	 * SChema wird ignoriert. Es gibt also probleme, wenn der selbe Tabellenname
+	 * noch in einem anderen Schema existiert.
 	 * 
 	 * @param tableName
 	 *            darf auch schema-informationen enthalten.
 	 * @throws SQLException
 	 */
-	public static List<PGColumn> listColumnsInTable(Connection c, String tableName) throws SQLException {
+	public static List<PGColumn> listColumnsInTable(Connection c,
+			String tableName) throws SQLException {
 		List<PGColumn> cols = new ArrayList<PGColumn>();
 
 		String schema = "public";
@@ -359,9 +436,10 @@
 		String sql = "SELECT a.attnum, a.attname AS field, t.typname AS type,"
 				+ " a.attlen AS length, a.atttypmod AS length_var,"
 				+ " a.attnotnull AS not_null, a.atthasdef as has_default"
-				+ " FROM pg_class c, pg_attribute a, pg_type t" + " WHERE c.relname = '" + tableName + "'"
-				+ " AND a.attnum > 0" + "   AND a.attrelid = c.oid" + "   AND a.atttypid = t.oid"
-				+ " ORDER BY a.attnum;";
+				+ " FROM pg_class c, pg_attribute a, pg_type t"
+				+ " WHERE c.relname = '" + tableName + "'"
+				+ " AND a.attnum > 0" + "   AND a.attrelid = c.oid"
+				+ "   AND a.atttypid = t.oid" + " ORDER BY a.attnum;";
 		ResultSet rs = c.createStatement().executeQuery(sql);
 		try {
 			while (rs.next()) {
@@ -371,7 +449,8 @@
 				Boolean notNull = rs.getBoolean(6);
 				Boolean hasDefault = rs.getBoolean(7);
 
-				PGColumn pgcol = new PGColumn(fieldname, typename, notNull, hasDefault);
+				PGColumn pgcol = new PGColumn(fieldname, typename, notNull,
+						hasDefault);
 
 				cols.add(pgcol);
 
@@ -385,9 +464,11 @@
 	/**
 	 * Liefert <code>true</code> wenn der Benutzername im DBMS Superuser ist.
 	 */
-	public static boolean isSuperuser(Connection c, String username) throws SQLException {
+	public static boolean isSuperuser(Connection c, String username)
+			throws SQLException {
 		ResultSet rs = c.createStatement().executeQuery(
-				"select usesuper from pg_user where usename = '" + username + "' and usesuper = true");
+				"select usesuper from pg_user where usename = '" + username
+						+ "' and usesuper = true");
 		try {
 			if (rs.next()) {
 				return true;
@@ -398,8 +479,10 @@
 		return false;
 	}
 
-	public static boolean existsRole(Connection c, String rolename) throws SQLException {
-		String sql = "select count(1) from pg_roles where rolname = '" + rolename.toLowerCase() + "'";
+	public static boolean existsRole(Connection c, String rolename)
+			throws SQLException {
+		String sql = "select count(1) from pg_roles where rolname = '"
+				+ rolename.toLowerCase() + "'";
 		ResultSet rs = c.createStatement().executeQuery(sql);
 		try {
 			if (rs.next())
@@ -410,16 +493,20 @@
 		return false;
 	}
 
-	public static void removeAllPrivilegesFrom(Connection c, String rolename, String tablename) throws SQLException {
+	public static void removeAllPrivilegesFrom(Connection c, String rolename,
+			String tablename) throws SQLException {
 		c.createStatement().executeUpdate(
-				"revoke all on TABLE " + tablename.toLowerCase() + " from " + rolename.toLowerCase() + " cascade");
+				"revoke all on TABLE " + tablename.toLowerCase() + " from "
+						+ rolename.toLowerCase() + " cascade");
 	}
 
 	/**
 	 * Löscht eine Rolle wenn sie vorher existiert
 	 */
-	public static void dropRoleIfExists(Connection c, String rolename) throws SQLException {
-		c.createStatement().executeUpdate("drop role if exists " + rolename.toLowerCase());
+	public static void dropRoleIfExists(Connection c, String rolename)
+			throws SQLException {
+		c.createStatement().executeUpdate(
+				"drop role if exists " + rolename.toLowerCase());
 	}
 
 	/**
@@ -429,8 +516,11 @@
 	 * @param triggerName
 	 * @param tableName
 	 */
-	public static void dropTriggerIfExists(Connection c, String triggerName, String tableName) throws SQLException {
-		c.createStatement().executeUpdate("drop TRIGGER if exists " + triggerName.toLowerCase() + " ON " + tableName);
+	public static void dropTriggerIfExists(Connection c, String triggerName,
+			String tableName) throws SQLException {
+		c.createStatement().executeUpdate(
+				"drop TRIGGER if exists " + triggerName.toLowerCase() + " ON "
+						+ tableName);
 	}
 
 	/**
@@ -444,20 +534,26 @@
 	 *            OHNE <code>RETURN NEW</code>, das wird automatisch angehangen.
 	 * @throws SQLException
 	 */
-	public static void createOrReplaceTriggerFunction(Connection c, String name, String plCommands) throws SQLException {
+	public static void createOrReplaceTriggerFunction(Connection c,
+			String name, String plCommands) throws SQLException {
 		// System.err.println(plCommands);
 
-		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name
-		// + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+		// " RETURNS trigger AS $" + name
+		// + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name +
+		// "$ LANGUAGE 'plpgsql'";
 		// PreparedStatement ps = c.prepareStatement(sql);
 		// ps.setString(0, plCommands);
 		// ps.executeUpdate();
 
-		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name + "$\nBEGIN\n "
-		// + plCommands + " \nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+		// " RETURNS trigger AS $" + name + "$\nBEGIN\n "
+		// + plCommands + " \nRETURN NEW;" + "\nEND;\n$" + name +
+		// "$ LANGUAGE 'plpgsql'";
 		// c.createStatement().executeUpdate(sql);
 
-		createOrReplaceFunction(c, name, null, "TRIGGER", null, plCommands + "\nRETURN NEW");
+		createOrReplaceFunction(c, name, null, "TRIGGER", null, plCommands
+				+ "\nRETURN NEW");
 	}
 
 	/**
@@ -468,18 +564,24 @@
 	 * @param parameters
 	 *            Parameter der Funcktion, kann <code>null</code> sein.
 	 * @param returns
-	 *            z.B. <code>TRIGGER</code> oder <code>SETOF bigint</code> oder "void"
+	 *            z.B. <code>TRIGGER</code> oder <code>SETOF bigint</code> oder
+	 *            "void"
 	 * @param declare
 	 *            Declare block oder <code>null</code>
 	 * @param plCommands
-	 *            z.B. NEW.kpk_kreis = NEW.risiko_soz+NEW.risiko_emo+NEW.risiko_moti +NEW.risiko_spr+NEW.risiko_wohl;
+	 *            z.B. NEW.kpk_kreis =
+	 *            NEW.risiko_soz+NEW.risiko_emo+NEW.risiko_moti
+	 *            +NEW.risiko_spr+NEW.risiko_wohl;
 	 */
-	public static void createOrReplaceFunction(Connection c, String name, String parameters, String returns,
-			String declare, String plCommands) throws SQLException {
+	public static void createOrReplaceFunction(Connection c, String name,
+			String parameters, String returns, String declare, String plCommands)
+			throws SQLException {
 		// System.err.println(plCommands);
 
-		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" + " RETURNS trigger AS $" + name
-		// + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name + "$ LANGUAGE 'plpgsql'";
+		// String sql = "CREATE OR REPLACE FUNCTION " + name + "()" +
+		// " RETURNS trigger AS $" + name
+		// + "$\nBEGIN\n?\nRETURN NEW;" + "\nEND;\n$" + name +
+		// "$ LANGUAGE 'plpgsql'";
 		// PreparedStatement ps = c.prepareStatement(sql);
 		// ps.setString(0, plCommands);
 		// ps.executeUpdate();
@@ -487,13 +589,16 @@
 		parameters = LangUtil.removeWhitespacesToEmpty(parameters);
 		declare = LangUtil.removeWhitespacesToEmpty(declare);
 
-		String sql = "CREATE OR REPLACE FUNCTION " + name + "(" + parameters + ")" + " RETURNS " + returns + " AS $$\n"
-				+ "DECLARE\n" + declare + "\n" + "BEGIN\n " + plCommands + ";" + "\nEND;\n$$ LANGUAGE 'plpgsql'";
+		String sql = "CREATE OR REPLACE FUNCTION " + name + "(" + parameters
+				+ ")" + " RETURNS " + returns + " AS $$\n" + "DECLARE\n"
+				+ declare + "\n" + "BEGIN\n " + plCommands + ";"
+				+ "\nEND;\n$$ LANGUAGE 'plpgsql'";
 		c.createStatement().executeUpdate(sql);
 	}
 
 	/**
-	 * Erstellt einen <code>FOR EACH ROW EXECUTE PROCEDURE</code> trigger für eine Tabelle
+	 * Erstellt einen <code>FOR EACH ROW EXECUTE PROCEDURE</code> trigger für
+	 * eine Tabelle
 	 * 
 	 * @param c
 	 * @param triggerName
@@ -509,12 +614,14 @@
         END IF;
         </code>
 	 */
-	public static void createOrRecreateTrigger(Connection c, String triggerName, String type, String tableName,
-			String plCommands) throws SQLException {
+	public static void createOrRecreateTrigger(Connection c,
+			String triggerName, String type, String tableName, String plCommands)
+			throws SQLException {
 		dropTriggerIfExists(c, triggerName, tableName);
 		createOrReplaceTriggerFunction(c, triggerName + "_fn", plCommands);
 		c.createStatement().executeUpdate(
-				"CREATE TRIGGER " + triggerName + " " + type + " ON " + tableName + " FOR EACH ROW EXECUTE PROCEDURE "
+				"CREATE TRIGGER " + triggerName + " " + type + " ON "
+						+ tableName + " FOR EACH ROW EXECUTE PROCEDURE "
 						+ triggerName + "_fn" + "()");
 	}
 
@@ -526,30 +633,37 @@
 	 * @param idxNamePostfix
 	 *            e.g. 'idx1'
 	 * @param unique
-	 *            <code>true</code> if the columns are unique. A UNIQUE INDEX will be created.
+	 *            <code>true</code> if the columns are unique. A UNIQUE INDEX
+	 *            will be created.
 	 */
-	public static void addIndex(Connection c, final String tableName, final String columns, String idxPostfix,
-			final boolean unique) throws SQLException {
-		addIndex(c, tableName, columns, idxPostfix, unique, null, null, false, null);
+	public static void addIndex(Connection c, final String tableName,
+			final String columns, String idxPostfix, final boolean unique)
+			throws SQLException {
+		addIndex(c, tableName, columns, idxPostfix, unique, null, null, false,
+				null);
 	}
 
 	/**
-	 * Liefert eine Liste aller Indexnamen die für eine Tabelle existieren. Der Tabellenname wird mit <code>like</code>
-	 * verglichen, darf also <code>%</code> enthalten.<br/>
-	 * Achtung: Diese abfrage ist nicht Schema-Spezifisch. Eine schema. Angabe vor dem tabellennamen wird automatisch
-	 * entfernt.
+	 * Liefert eine Liste aller Indexnamen die für eine Tabelle existieren. Der
+	 * Tabellenname wird mit <code>like</code> verglichen, darf also
+	 * <code>%</code> enthalten.<br/>
+	 * Achtung: Diese abfrage ist nicht Schema-Spezifisch. Eine schema. Angabe
+	 * vor dem tabellennamen wird automatisch entfernt.
 	 */
-	public static List<String> listIndexesForTable(Connection c, String tableName) throws SQLException {
+	public static List<String> listIndexesForTable(Connection c,
+			String tableName) throws SQLException {
 		Statement s = c.createStatement();
 
 		if (tableName.contains("."))
-			tableName = tableName.substring(tableName.indexOf(".") + 1, tableName.length());
+			tableName = tableName.substring(tableName.indexOf(".") + 1,
+					tableName.length());
 
 		List<String> idxes = new ArrayList<String>();
 
 		// , array_to_string(array_agg(a.attname), ', ') as column_names
 		String sql = "select t.relname as table_name, i.relname as index_name from pg_class t, pg_class i, pg_index ix, pg_attribute a where t.oid = ix.indrelid and i.oid = ix.indexrelid and a.attrelid = t.oid and a.attnum = ANY(ix.indkey) and t.relkind = 'r' and t.relname like '"
-				+ tableName + "' group by t.relname, i.relname order by t.relname, i.relname";
+				+ tableName
+				+ "' group by t.relname, i.relname order by t.relname, i.relname";
 
 		ResultSet rs = s.executeQuery(sql);
 		try {
@@ -572,20 +686,27 @@
 	 * @param idxNamePostfix
 	 *            e.g. 'idx1'
 	 * @param unique
-	 *            <code>true</code> if the columns are unique. A UNIQUE INDEX will be created.
+	 *            <code>true</code> if the columns are unique. A UNIQUE INDEX
+	 *            will be created.
 	 * @param tablespace
-	 *            <code>null</code> oder der name des tablespace in dem der Index liegen soll.
+	 *            <code>null</code> oder der name des tablespace in dem der
+	 *            Index liegen soll.
 	 * @param type
-	 *            <code>null</code> für DB default oder "hash" oder "btree" oder "gin" etc...
+	 *            <code>null</code> für DB default oder "hash" oder "btree" oder
+	 *            "gin" etc...
 	 * @param forceRecreationIfExistsAlready
-	 *            wenn <code>true</code> dann werden der Index vorher gedroppt falls er exisitert.
+	 *            wenn <code>true</code> dann werden der Index vorher gedroppt
+	 *            falls er exisitert.
 	 * @param fillFactor
-	 *            Wert von >0. -> 1. Bei .5 wird für den Index doppelt so viel Platz reserviert wie aktuell benötig, um
-	 *            auf weiteres Wachstum der Tabelle ohne Indexfragmentierung reagieren zu können.
+	 *            Wert von >0. -> 1. Bei .5 wird für den Index doppelt so viel
+	 *            Platz reserviert wie aktuell benötig, um auf weiteres Wachstum
+	 *            der Tabelle ohne Indexfragmentierung reagieren zu können.
 	 */
-	public static void addIndex(Connection c, final String tableName, final String columns, String idxPostfix,
-			final boolean unique, String tablespace, String type, boolean forceRecreationIfExistsAlready,
-			Double fillFactor) throws SQLException {
+	public static void addIndex(Connection c, final String tableName,
+			final String columns, String idxPostfix, final boolean unique,
+			String tablespace, String type,
+			boolean forceRecreationIfExistsAlready, Double fillFactor)
+			throws SQLException {
 		String idxNameWithDot = tableName + "_" + idxPostfix;
 		final String idxName = idxNameWithDot.replace(".", "_");
 
@@ -599,8 +720,8 @@
 				if (!forceRecreationIfExistsAlready)
 					return;
 
-				log.info("Aufgrund von forceRecreationIfExistsAlready=true wird der Index " + idxNameWithDot
-						+ " jetzt gedroppt.");
+				log.info("Aufgrund von forceRecreationIfExistsAlready=true wird der Index "
+						+ idxNameWithDot + " jetzt gedroppt.");
 
 				Statement s = c.createStatement();
 
@@ -634,19 +755,23 @@
 		Statement s = c.createStatement();
 
 		if (fillFactor != null && (fillFactor <= 0. || fillFactor > 1.))
-			throw new IllegalArgumentException("fillFactor muss großer 0 und kleinergleich 1 sein.");
+			throw new IllegalArgumentException(
+					"fillFactor muss großer 0 und kleinergleich 1 sein.");
 
 		String sqlFillFactor = "";
 		if (fillFactor != null)
-			sqlFillFactor = " WITH (FILLFACTOR=" + (int) (fillFactor * 100) + ") ";
+			sqlFillFactor = " WITH (FILLFACTOR=" + (int) (fillFactor * 100)
+					+ ") ";
 
-		String sqlTableSpace = (tablespace == null || tablespace.equalsIgnoreCase("null") || !existsTablespace(c,
+		String sqlTableSpace = (tablespace == null
+				|| tablespace.equalsIgnoreCase("null") || !existsTablespace(c,
 				tableName)) ? "" : " TABLESPACE " + tablespace;
 
 		String sqlUsing = type == null ? "" : " USING " + type;
 
-		final String queryString = "CREATE " + (unique ? "UNIQUE " : "") + "INDEX " + idxName + " ON " + tableName
-				+ sqlUsing + " (" + columns + ") " + sqlFillFactor + sqlTableSpace;
+		final String queryString = "CREATE " + (unique ? "UNIQUE " : "")
+				+ "INDEX " + idxName + " ON " + tableName + sqlUsing + " ("
+				+ columns + ") " + sqlFillFactor + sqlTableSpace;
 		try {
 			s.execute(queryString);
 			c.commit();
@@ -663,9 +788,11 @@
 			// Ex abfangen, wenn IDX schon existiert
 
 			String msg = cause.getMessage();
-			if (msg.endsWith("already exists") || msg.endsWith("existiert bereits")) {
+			if (msg.endsWith("already exists")
+					|| msg.endsWith("existiert bereits")) {
 				// TO NOTHING, IDX already exists
-				log.info("Index existierte bereits, nicht neuerstellt: " + queryString);
+				log.info("Index existierte bereits, nicht neuerstellt: "
+						+ queryString);
 			} else
 				log.error(e.getLocalizedMessage(), e);
 
@@ -678,10 +805,12 @@
 	 * 
 	 * @throws SQLException
 	 */
-	private static boolean existsTablespace(Connection c, String spaceName) throws SQLException {
+	private static boolean existsTablespace(Connection c, String spaceName)
+			throws SQLException {
 
 		// SELECT count(1) FROM pg_tablespace where spcname = 'spcname';
-		String stmtSql = "SELECT COUNT(*) FROM pg_tablespace where spcname = '" + spaceName + "'";
+		String stmtSql = "SELECT COUNT(*) FROM pg_tablespace where spcname = '"
+				+ spaceName + "'";
 
 		PreparedStatement stmt = c.prepareStatement(stmtSql);
 		stmt.execute();
@@ -701,18 +830,21 @@
 	}
 
 	/**
-	 * Fügt einen Benutzer zu einer Rolle hinzu. Wenn der benutzer bereits in der Rolle enthalten ist, wird keine
-	 * Exception geschmisssen.
+	 * Fügt einen Benutzer zu einer Rolle hinzu. Wenn der benutzer bereits in
+	 * der Rolle enthalten ist, wird keine Exception geschmisssen.
 	 * 
 	 * @throws SQLException
 	 */
-	public static void grantRoleToUser(Connection c, String rolename, String username) throws SQLException {
-		c.createStatement().executeUpdate("GRANT " + rolename + " TO " + username);
+	public static void grantRoleToUser(Connection c, String rolename,
+			String username) throws SQLException {
+		c.createStatement().executeUpdate(
+				"GRANT " + rolename + " TO " + username);
 	}
 
 	/**
-	 * Der : (Doppelpunkt) hat in PSQL eine besondere Bedeutung. Er wind mit dieser methode escaped. Diese Methode
-	 * sollte mit <code>like E'"+PGUtil.escape(...)+"'</code> verwendet werden.
+	 * Der : (Doppelpunkt) hat in PSQL eine besondere Bedeutung. Er wind mit
+	 * dieser methode escaped. Diese Methode sollte mit
+	 * <code>like E'"+PGUtil.escape(...)+"'</code> verwendet werden.
 	 */
 	public static String escape(String key) {
 		key = key.replaceAll(":", "\\:");
@@ -725,11 +857,14 @@
 	 * @param c
 	 *            DB-Verbindung
 	 * @param dbName
-	 *            Name der Datenbank fuer die die Sessions gezaehlt werden (kann {@code null} sein)
+	 *            Name der Datenbank fuer die die Sessions gezaehlt werden (kann
+	 *            {@code null} sein)
 	 * @param userName
-	 *            Name des Users fuer den die Sessions gezaehlt werden (kann {@code null} sein)
+	 *            Name des Users fuer den die Sessions gezaehlt werden (kann
+	 *            {@code null} sein)
 	 */
-	public static int getOpenSessionCount(Connection c, String dbName, String userName) throws SQLException {
+	public static int getOpenSessionCount(Connection c, String dbName,
+			String userName) throws SQLException {
 		return getOpenSessionCount(c, dbName, userName, null);
 	}
 
@@ -739,14 +874,17 @@
 	 * @param c
 	 *            DB-Verbindung
 	 * @param dbName
-	 *            Name der Datenbank fuer die die Sessions gezaehlt werden (kann {@code null} sein)
+	 *            Name der Datenbank fuer die die Sessions gezaehlt werden (kann
+	 *            {@code null} sein)
 	 * @param userName
-	 *            Name des Users fuer den die Sessions gezaehlt werden (kann {@code null} sein)
+	 *            Name des Users fuer den die Sessions gezaehlt werden (kann
+	 *            {@code null} sein)
 	 * @param queryLike
-	 *            like-Beindung auf die Query die in der Session ausgeführt wird, oder <code>null</code>
+	 *            like-Beindung auf die Query die in der Session ausgeführt
+	 *            wird, oder <code>null</code>
 	 */
-	public static int getOpenSessionCount(Connection c, String dbName, String userName, String queryLike)
-			throws SQLException {
+	public static int getOpenSessionCount(Connection c, String dbName,
+			String userName, String queryLike) throws SQLException {
 		String stmtSql = "SELECT COUNT(*) FROM pg_stat_activity WHERE TRUE";
 
 		if (dbName != null)
@@ -778,10 +916,12 @@
 	}
 
 	/**
-	 * Liefert <code>true</code> wenn eine Spalte mit dem Namen in der angegebenen Tabelle existiert. Die Tablle darf
-	 * optional mit "schema." prefixiert werden.
+	 * Liefert <code>true</code> wenn eine Spalte mit dem Namen in der
+	 * angegebenen Tabelle existiert. Die Tablle darf optional mit "schema."
+	 * prefixiert werden.
 	 */
-	public static boolean existsColumn(Connection c, String tableName, String columnName) throws SQLException {
+	public static boolean existsColumn(Connection c, String tableName,
+			String columnName) throws SQLException {
 
 		String schema = "public";
 
@@ -791,9 +931,12 @@
 			tableName = split[1];
 		}
 
-		ResultSet nativeCheckExistsColumnQuery = c.createStatement().executeQuery(
-				"SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME = '" + columnName.toLowerCase()
-						+ "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+		ResultSet nativeCheckExistsColumnQuery = c.createStatement()
+				.executeQuery(
+						"SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+								+ columnName.toLowerCase()
+								+ "' AND TABLE_NAME='" + tableName
+								+ "' AND TABLE_SCHEMA='" + schema + "';");
 		return nativeCheckExistsColumnQuery.next();
 	}
 
@@ -804,7 +947,8 @@
 	 *            Darf eine Schemaangabe mit . Trenner enthalten.
 	 * @throws SQLException
 	 */
-	public static boolean existsView(Connection c, String viewName) throws SQLException {
+	public static boolean existsView(Connection c, String viewName)
+			throws SQLException {
 
 		String schema = "public";
 
@@ -814,8 +958,8 @@
 			viewName = split[1];
 		}
 
-		final String checkView = "SELECT * FROM information_schema.VIEWS where table_schema = '" + schema
-				+ "' and table_name = '" + viewName + "' LIMIT 1";
+		final String checkView = "SELECT * FROM information_schema.VIEWS where table_schema = '"
+				+ schema + "' and table_name = '" + viewName + "' LIMIT 1";
 		ResultSet rs = c.createStatement().executeQuery(checkView);
 
 		try {
@@ -832,7 +976,8 @@
 	 *            Darf eine Schemaangabe mit . Trenner enthalten.
 	 * @throws SQLException
 	 */
-	public static boolean existsTable(Connection c, String tableName) throws SQLException {
+	public static boolean existsTable(Connection c, String tableName)
+			throws SQLException {
 
 		String schema = "public";
 
@@ -842,8 +987,8 @@
 			tableName = split[1];
 		}
 
-		final String checkTableExists = "SELECT * FROM pg_tables where schemaname = '" + schema + "' and tablename = '"
-				+ tableName + "' LIMIT 1";
+		final String checkTableExists = "SELECT * FROM pg_tables where schemaname = '"
+				+ schema + "' and tablename = '" + tableName + "' LIMIT 1";
 		ResultSet rs = c.createStatement().executeQuery(checkTableExists);
 
 		try {
@@ -853,19 +998,22 @@
 		}
 	}
 
-	public static void dropViewIfExists(Connection c, String viewName) throws SQLException {
+	public static void dropViewIfExists(Connection c, String viewName)
+			throws SQLException {
 		final String dropView = "DROP VIEW IF EXISTS " + viewName;
 		c.createStatement().executeUpdate(dropView);
 	}
 
 	/**
-	 * Wenn der übergebene durch die PID identifizierte Process blockiert ist, dann wird die PID des (ersten?)
-	 * blockierenden Prozess zurückgeliefert. Sonst wird <code>null</code> geliefert.
+	 * Wenn der übergebene durch die PID identifizierte Process blockiert ist,
+	 * dann wird die PID des (ersten?) blockierenden Prozess zurückgeliefert.
+	 * Sonst wird <code>null</code> geliefert.
 	 * 
 	 * @param blockedPid
 	 * @return blockingPid oder <code>null</code>
 	 */
-	static public Long getBlockingPid(Connection c, Long blockedPid) throws SQLException {
+	static public Long getBlockingPid(Connection c, Long blockedPid)
+			throws SQLException {
 		final String sql = "SELECT kl.pid as blocking_pid FROM pg_catalog.pg_locks bl "
 				+ "JOIN pg_catalog.pg_stat_activity a on bl.pid = a.procpid "
 				+ "JOIN pg_catalog.pg_locks kl "
@@ -883,20 +1031,25 @@
 	}
 
 	/**
-	 * Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten zurück. Der 2. Teil der Rückgabepaare ist
-	 * ein String der einem PG Interval entspricht. Dieses kann mit der Klasse PGInterval geparst werden.<br/>
+	 * Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten
+	 * zurück. Der 2. Teil der Rückgabepaare ist ein String der einem PG
+	 * Interval entspricht. Dieses kann mit der Klasse PGInterval geparst
+	 * werden.<br/>
 	 * 
 	 * @param datName
-	 *            <code>null</code> oder der Datenbankname, auf den die Abfrage gefiltert werden soll.
+	 *            <code>null</code> oder der Datenbankname, auf den die Abfrage
+	 *            gefiltert werden soll.
 	 * 
 	 * @param minSecondsRunning
-	 *            <code>null</code> oder die zurückgegebenen Anfragen müssen mindestens soviele Sekunden schon laufen.
+	 *            <code>null</code> oder die zurückgegebenen Anfragen müssen
+	 *            mindestens soviele Sekunden schon laufen.
 	 * 
 	 * @param filter
-	 *            0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
+	 *            0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in
+	 *            Transaction'
 	 */
-	static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning, int filter)
-			throws SQLException {
+	static public List<SqlQueryStat> listQueries(Connection c, String datName,
+			Integer minSecondsRunning, int filter) throws SQLException {
 		ArrayList<SqlQueryStat> result = new ArrayList<SqlQueryStat>();
 
 		String where = "WHERE TRUE ";
@@ -913,7 +1066,8 @@
 			if (minSecondsRunning < 0)
 				throw new IllegalStateException();
 
-			where += " AND age (now(),query_start) >= interval '" + minSecondsRunning + "s' ";
+			where += " AND age (now(),query_start) >= interval '"
+					+ minSecondsRunning + "s' ";
 		}
 
 		final String sql = "SELECT current_query, age (now(),query_start) as qage, waiting, procpid, client_addr, usename, application_name from pg_stat_activity "
@@ -930,8 +1084,8 @@
 				String username = rs.getString(6);
 				String application_name = rs.getString(7);
 
-				result.add(new SqlQueryStat(q, new PGInterval(age), waiting, procId, client_addr, username,
-						application_name));
+				result.add(new SqlQueryStat(q, new PGInterval(age), waiting,
+						procId, client_addr, username, application_name));
 			}
 
 		} finally {
@@ -943,10 +1097,12 @@
 	/**
 	 * Tablename der optinal als das Schema enthalten darf.
 	 */
-	public static boolean removeColumn(Connection c, String tableName, String columnName) throws SQLException {
+	public static boolean removeColumn(Connection c, String tableName,
+			String columnName) throws SQLException {
 
 		// Das eigentliche erstellen der neuen Spalte
-		String queryString = "ALTER TABLE " + tableName + " DROP COLUMN " + columnName;
+		String queryString = "ALTER TABLE " + tableName + " DROP COLUMN "
+				+ columnName;
 
 		// System.out.println(queryString);
 
@@ -970,7 +1126,8 @@
 	 * 
 	 * @return Primary Key. <code>NULL</code> if empty
 	 */
-	public static String getPrimaryKey(Connection dbc, String tableName) throws SQLException {
+	public static String getPrimaryKey(Connection dbc, String tableName)
+			throws SQLException {
 
 		String schema = "public";
 		if (tableName.contains(".")) {
@@ -1005,8 +1162,10 @@
 	/**
 	 * Returns cardinality of column in table
 	 */
-	public long getCardinality(Connection dbc, String tableName, String column) throws SQLException {
-		String sql = "select count( DISTINCT " + "(" + column + ")" + ") " + "from " + tableName;
+	public long getCardinality(Connection dbc, String tableName, String column)
+			throws SQLException {
+		String sql = "select count( DISTINCT " + "(" + column + ")" + ") "
+				+ "from " + tableName;
 		ResultSet countRs = dbc.createStatement().executeQuery(sql);
 		try {
 			countRs.next();
@@ -1016,7 +1175,8 @@
 		}
 	}
 
-	public static boolean isIntColumn(Connection c, String tableName, String columnName) throws SQLException {
+	public static boolean isIntColumn(Connection c, String tableName,
+			String columnName) throws SQLException {
 		String schema = "public";
 		if (tableName.contains(".")) {
 			final String[] split = tableName.split("\\.");
@@ -1025,8 +1185,11 @@
 		}
 
 		Statement s = c.createStatement();
-		ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
-				+ columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+		ResultSet rs = s
+				.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+						+ columnName.toLowerCase()
+						+ "' AND TABLE_NAME='"
+						+ tableName + "' AND TABLE_SCHEMA='" + schema + "';");
 		try {
 
 			rs.next();
@@ -1043,7 +1206,8 @@
 	/**
 	 * Typischer Weise POSTGIS, wenn man sonst nichts anderen installiert hat.
 	 */
-	public static boolean isUserDefinedColumn(Connection c, String tableName, String columnName) throws SQLException {
+	public static boolean isUserDefinedColumn(Connection c, String tableName,
+			String columnName) throws SQLException {
 
 		String schema = "public";
 		if (tableName.contains(".")) {
@@ -1053,14 +1217,18 @@
 		}
 
 		Statement s = c.createStatement();
-		ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
-				+ columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+		ResultSet rs = s
+				.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+						+ columnName.toLowerCase()
+						+ "' AND TABLE_NAME='"
+						+ tableName + "' AND TABLE_SCHEMA='" + schema + "';");
 		rs.next();
 		String typeDef = rs.getString(1);
 		return typeDef.toUpperCase().startsWith("USER-DEFINED");
 	}
 
-	public static boolean isTextColumn(Connection c, String tableName, String columnName) throws SQLException {
+	public static boolean isTextColumn(Connection c, String tableName,
+			String columnName) throws SQLException {
 
 		String schema = "public";
 		if (tableName.contains(".")) {
@@ -1070,8 +1238,11 @@
 		}
 
 		Statement s = c.createStatement();
-		ResultSet rs = s.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
-				+ columnName.toLowerCase() + "' AND TABLE_NAME='" + tableName + "' AND TABLE_SCHEMA='" + schema + "';");
+		ResultSet rs = s
+				.executeQuery("SELECT data_type FROM information_schema.COLUMNS WHERE COLUMN_NAME = '"
+						+ columnName.toLowerCase()
+						+ "' AND TABLE_NAME='"
+						+ tableName + "' AND TABLE_SCHEMA='" + schema + "';");
 		try {
 			rs.next();
 			String typeDef = rs.getString(1);
@@ -1096,11 +1267,13 @@
 	 * @return
 	 * @throws SQLException
 	 */
-	public static boolean addColumn(Connection dbc, String tableName, String columnName, String colTypeName,
-			String comment) throws SQLException {
+	public static boolean addColumn(Connection dbc, String tableName,
+			String columnName, String colTypeName, String comment)
+			throws SQLException {
 
 		if (dbc == null)
-			throw new IllegalStateException("Es besteht keine Datenbankverbindung!");
+			throw new IllegalStateException(
+					"Es besteht keine Datenbankverbindung!");
 
 		Statement s = dbc.createStatement();
 
@@ -1109,7 +1282,8 @@
 		}
 
 		// Das eigentliche erstellen der neuen Spalte
-		String queryString = "ALTER TABLE " + tableName + " ADD " + columnName + " " + colTypeName;
+		String queryString = "ALTER TABLE " + tableName + " ADD " + columnName
+				+ " " + colTypeName;
 
 		// JRegDBUtils.log.debug(queryString);
 
@@ -1120,7 +1294,8 @@
 		}
 
 		if (comment != null && !comment.isEmpty()) {
-			queryString = "COMMENT ON COLUMN " + tableName + "." + columnName + " IS '" + comment + "';";
+			queryString = "COMMENT ON COLUMN " + tableName + "." + columnName
+					+ " IS '" + comment + "';";
 		}
 
 		s.close();
@@ -1131,7 +1306,8 @@
 	/**
 	 * Liefert alle Spalten einer Tabelle
 	 */
-	public static ArrayList<String> getAllColumnsOf(Connection dbc, String tableName) throws SQLException {
+	public static ArrayList<String> getAllColumnsOf(Connection dbc,
+			String tableName) throws SQLException {
 		String schema = "public";
 		if (tableName.contains(".")) {
 			final String[] split = tableName.split("\\.");
@@ -1143,8 +1319,8 @@
 
 		// String tableName = PropertyUtils.getDbTableName(i);
 
-		String sql = "SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_NAME = '" + tableName
-				+ "' and TABLE_SCHEMA = '" + schema + "';";
+		String sql = "SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_NAME = '"
+				+ tableName + "' and TABLE_SCHEMA = '" + schema + "';";
 
 		ResultSet colsRs = dbc.createStatement().executeQuery(sql);
 		try {
@@ -1161,7 +1337,8 @@
 	 * 
 	 * @throws SQLException
 	 */
-	public static boolean pg_terminate_backend(Connection dbc, Long procId) throws SQLException {
+	public static boolean pg_terminate_backend(Connection dbc, Long procId)
+			throws SQLException {
 		String sql = "SELECT pg_terminate_backend(" + procId + ");";
 		ResultSet rs = dbc.createStatement().executeQuery(sql);
 		try {

Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java	2012-04-10 18:53:05 UTC (rev 1940)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/io/GtDbServerSettings.java	2012-04-11 12:31:57 UTC (rev 1941)
@@ -188,7 +188,6 @@
 	}
 
 	private String[] cachedTypeNames = null;
-	private String[] cachedGeometryTableNames;
 
 	public GtDbServerSettings() {
 		this(DbType.postgis);
@@ -418,7 +417,7 @@
 			throw new RuntimeException(e);
 		}
 		String url = "jdbc:postgresql://" + getHost()
-		// + (":" + PropertyUtils.getDbPort())
+		 + (":" + getPort())
 				+ ("/" + getDatabase());
 
 		String password = getPassword();
@@ -430,30 +429,48 @@
 		return DriverManager.getConnection(url, username, password);
 	}
 
-	public String[] getDescribedTablesWithGeometry() {
+	//
+	// public String[] getDescribedTablesWithGeometry() {
+	//
+	// if (cachedGeometryTableNames == null) {
+	//
+	// Connection dc;
+	// try {
+	// dc = createNewDatabaseConnection();
+	// try {
+	//
+	// cachedGeometryTableNames = PGUtilGT
+	// .getPoTabelsDescribedInGeometryColumnsTable(dc
+	// .createStatement());
+	//
+	// } catch (SQLException e) {
+	// LOGGER.error(e, e);
+	// } finally {
+	// dc.close();
+	// }
+	// } catch (SQLException e1) {
+	// LOGGER.error(e1, e1);
+	// return new String[0];
+	// }
+	// }
+	// return cachedGeometryTableNames;
+	// }
 
-		if (cachedGeometryTableNames == null) {
-
-			Connection dc;
+	public boolean isGeometryColumnDescribed(String tableName) {
+		Connection dc;
+		try {
+			dc = createNewDatabaseConnection();
 			try {
-				dc = createNewDatabaseConnection();
-				try {
-
-					cachedGeometryTableNames = PGUtilGT
-							.getColumnsDescribedInGeometryColumnsTable(dc
-									.createStatement());
-
-				} catch (SQLException e) {
-					LOGGER.error(e, e);
-				} finally {
-					dc.close();
-				}
-			} catch (SQLException e1) {
-				LOGGER.error(e1, e1);
-				return new String[0];
+				return PGUtilGT.getPostGisMetadata(dc, tableName) != null;
+			} catch (SQLException e) {
+				LOGGER.error(e, e);
+			} finally {
+				dc.close();
 			}
+		} catch (SQLException e1) {
+			LOGGER.error(e1, e1);
 		}
-		return cachedGeometryTableNames;
+		return false;
 	}
 
 	@Override



More information about the Schmitzm-commits mailing list