[Schmitzm-commits] r1738 - in trunk/schmitzm-core/src/main/java/de/schmitzm: lang postgres
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Sep 29 20:37:00 CEST 2011
Author: mojays
Date: 2011-09-29 20:36:59 +0200 (Thu, 29 Sep 2011)
New Revision: 1738
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java
trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java
Log:
LangUtil: neue Methode callStaticMethod(.)
PGUtil: neue Methode createRoleIfNotExists(.)
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java 2011-09-29 16:14:47 UTC (rev 1737)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/lang/LangUtil.java 2011-09-29 18:36:59 UTC (rev 1738)
@@ -34,6 +34,8 @@
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.text.DateFormat;
@@ -1369,6 +1371,52 @@
}
/**
+ * Ruft eine statische Methode fuer eine Reihe von Classen auf.
+ * @param classes irgenwelche Klassen
+ * @param superClass es werden nur Klassen beruecksichtigt, die von
+ * dieser Oberklasse abgeleitet sind (kann {@code null}
+ * sein)
+ * @param methodName aufzurufende Methode (case-sensitive!)
+ * @param methodParams Aufruf-Parameter fuer Methode
+ * @return Die Rueckgabewerte der Methoden-Aufrufe. Die Elemente fuer diejenigen
+ * Indizes i, fuer die classes[i] nicht der superClass entspricht werden
+ * mit {@code null} belegt
+ */
+ public static Object[] callStaticMethod(Class[] classes, Class superClass, String methodName, Object... methodParams) {
+ Object[] ret = new Object[classes.length];
+ for ( int i=0; i<classes.length; i++ ) {
+ Class clazz = classes[i];
+ // pruefen, ob Klasse von Deiner Oberklasse abgeleitet ist
+ if ( superClass != null && !superClass.isAssignableFrom(clazz) )
+ continue;
+ // Theoretisch koenne man hier Class.getMethod(methodName,methodParams)
+ // aufrufen; habe aber bei den Konstruktorne (siehe loadPreferredObject(.))
+ // festgestellt, wenn die Parameter GENAU die Typen sind, mit denen die
+ // Methode deklariert ist... Besser ist es, die passende Methode durch
+ // Ausprobieren zu ermitteln:
+ for (Method m : clazz.getMethods()) {
+ if ( !m.getName().equals(methodName) )
+ continue;
+ try {
+ ret[i] = m.invoke(null, methodParams);
+ break;
+ } catch (Exception err){
+ // Wenn Methode einen Fehler erzeugte, diese
+ // Exception werfen...
+ if ( err instanceof InvocationTargetException )
+ throw new RuntimeException(err);
+ // ... ansonsten bedeutet die Exception, dass die
+ // betrachtete Methode nicht zu den Parametern
+ // passt
+ // -> ignornieren
+ }
+ }
+ }
+ return ret;
+ }
+
+
+ /**
* Liefert das Package einer Klasse erweitert um einen relativen Pfad in Punkt-Notation.
*
* @param clazz
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java 2011-09-29 16:14:47 UTC (rev 1737)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/postgres/PGUtil.java 2011-09-29 18:36:59 UTC (rev 1738)
@@ -87,7 +87,16 @@
c.createStatement().executeUpdate(sql);
}
- /**
+ /**
+ * Erstellt eine neue Rolle, wenn diese noch nicht existiert.
+ */
+ public static void createRoleIfNotExists(Connection c, String rolename) throws SQLException {
+ if ( existsRole(c, rolename) )
+ return;
+ createRole(c, rolename);
+ }
+
+ /**
* Querys the <code>geometry_columns</code> table is part of every POSTGIS installation and must/should describe the
* geometry columns and tables.
*/
More information about the Schmitzm-commits
mailing list