Adding a new ImageMagickImageProcessor class to replace
[mir.git] / source / mir / servlet / ServletModuleDispatch.java
index a8efff3..5fd290e 100755 (executable)
 /*
- * Dispatcher
+ * Copyright (C) 2001, 2002 The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with  any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
  */
-
 package  mir.servlet;
 
-import  java.lang.reflect.*;
-import  javax.servlet.http.*;
-import  mir.servlet.ServletModuleException;
-import  mir.misc.*;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import mir.log.LoggerWrapper;
 
 
 /**
- * Dispatcher, der in einer ServletModule-Klasse, die Methode, die per Http-Post oder Get
- * Parameter "do" angegeben wurde, ausruft.
+ * Dispatcher, calls the method passed to ServletModule Class, through the "do"
+ * Parameter (via POST or GET)
+ *
+ * @version $Id: ServletModuleDispatch.java,v 1.15.2.3 2005/07/27 11:46:14 grok Exp $
+ *
+ * @author rk
  */
 public final class ServletModuleDispatch {
 
-  static Logfile theLog;
-
-  static {
-    theLog = Logfile.getInstance("/tmp/smod.dispatch");
-  }
+  private static LoggerWrapper logger = new LoggerWrapper("ServletModule.Dispatch");
+  private static final Class[] SIGNATURE = { HttpServletRequest.class, HttpServletResponse.class };
 
   /**
-   * privater Konstruktor, um versehentliche Instantiierung zu verhindern
+   * private parameter-less constructor to prevent unwanted instantiation
    */
+
   private ServletModuleDispatch () {
   }
 
   /**
-   *  Die Dispatch-Routine ruft das von dem Hauptservlet kommende ServletModule
-   *  mit dem per HttpServletRequest angegebenen Paramter <code>do</code> auf.
-   *  Ist kein Parameter angegeben, so wird versucht, in die <code>defaultAction</code>
-   *  des ServletModules zu springen.
+   * Method to dispatch servletmodule requests.
    *
-   * @param req Http-Request, das vom Dispatcher an die Methode des
-   *    ServletModules durchgereicht wird
-   * @param res Http-Response, die vom Dispatcher an die Methode des
-   *    ServletModules durchgereicht wird
-   * @param sMod ServletModule, an das dispatched wird.
-   * @param mod Name des Modules als String (für Logfile)
+   * @param aServletModule
+   * @param aRequest
+   * @param aResponse
+   * @throws ServletModuleExc
+   * @throws ServletModuleFailure
    */
 
-  public static void dispatch(ServletModule sMod, HttpServletRequest req,
-    HttpServletResponse res) throws ServletModuleException
-  {
-      //sMod.predeliver(req,res);
-
-      String doParam = req.getParameter("do");
-      theLog.printInfo("SerletModuleDispatch: " + sMod.toString() + " with method " + doParam);
-      if (doParam == null) {
-        if (sMod.defaultAction() != null) doParam = sMod.defaultAction();
-        else throw new ServletModuleException("no parameter do supplied!");
-      }
+  public static void dispatch(ServletModule aServletModule, HttpServletRequest aRequest,
+       HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleFailure {
+    // look for requested method's name in the "do" http request param, 
+    // if not present, use default action 
+    String doParam = aRequest.getParameter("do");
+    logger.debug("ServletModuleDispatch: " + aServletModule.toString() + " with method " + doParam);
 
-      Class[] params= { HttpServletRequest.class, HttpServletResponse.class};
+    if (doParam == null) {
+      if (aServletModule.defaultAction() != null)
+        doParam = aServletModule.defaultAction();
+      else
+        throw new ServletModuleExc("no parameter do supplied!");
+    }
 
-      try {
-        Method method = sMod.getClass().getMethod(doParam,params);
-        if (method != null) {
-          method.invoke(sMod,new Object[] {req,res} );
-          return;
-        }
-        else theLog.printDebugInfo("method lookup unsuccesful");
+    // ok, we have the method's name, now call it
+    try {
+      Method method = aServletModule.getClass().getMethod(doParam,SIGNATURE);
+      if (method != null) {
+        method.invoke(aServletModule,new Object[] {aRequest,aResponse} );
+        return;
       }
-      catch ( NoSuchMethodException e) { throw new ServletModuleException("no such method!" + e.toString());}
-      catch ( SecurityException e) { throw new ServletModuleException("method not allowed!" + e.toString());}
-      catch ( InvocationTargetException e) {e.printStackTrace();throw new ServletModuleException("target method exception!" + e.getTargetException().toString());}
-      catch ( IllegalAccessException e) { throw new ServletModuleException("illegal method not allowed!" + e.toString());}
-//      catch ( Exception e ) { throw new ServletModuleException(e.toString()); }
+      else logger.debug("method lookup unsuccesful");
+    }
+    catch ( InvocationTargetException e) {
+      logger.error( "invocation target exception: " + e.toString());
+      e.getTargetException().printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE));
 
-      throw new ServletModuleException("delivery failed! -- ");
+      throw new ServletModuleFailure(e.getTargetException().getMessage(), e.getTargetException());
+    }
+    catch (Throwable t) {
+      logger.error( "ServletModuleDispatch: " + t.toString());
+      throw new ServletModuleFailure(t);
+    }
   }
 }