[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