Title: [waffle-scm] [351] trunk/core/src/main/java/org/codehaus/waffle: Added monitoring for bind components.

Diff

Modified: trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/ComponentRegistry.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -25,6 +25,7 @@
 import org.codehaus.waffle.controller.ControllerNameResolver;
 import org.codehaus.waffle.i18n.MessageResources;
 import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.validation.Validator;
 import org.codehaus.waffle.view.ViewDispatcher;
 import org.codehaus.waffle.view.ViewResolver;
@@ -44,10 +45,14 @@
 
     ActionMethodResponseHandler getActionMethodResponseHandler();
 
+    ActionMonitor getActionMonitor();
+
     ArgumentResolver getArgumentResolver();
 
     BindErrorMessageResolver getBindErrorMessageResolver();
 
+    BindMonitor getBindMonitor();
+
     ContextContainerFactory getContextContainerFactory();
 
     ControllerNameResolver getControllerNameResolver();
@@ -62,8 +67,6 @@
 
     MethodNameResolver getMethodNameResolver();
 
-    ActionMonitor getMonitor();
-
     RequestAttributeBinder getRequestAttributeBinder();
 
     TypeConverter getTypeConverter();
@@ -73,4 +76,5 @@
     ViewDispatcher getViewDispatcher();
 
     ViewResolver getViewResolver();
+    
 }

Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinder.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,11 +1,5 @@
 package org.codehaus.waffle.bind;
 
-import org.codehaus.waffle.WaffleException;
-import org.codehaus.waffle.controller.RubyController;
-import org.jruby.javasupport.JavaEmbedUtils;
-import org.jruby.runtime.builtin.IRubyObject;
-
-import javax.servlet.http.HttpServletRequest;
 import java.beans.BeanInfo;
 import java.beans.IntrospectionException;
 import java.beans.Introspector;
@@ -15,11 +9,28 @@
 import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.http.HttpServletRequest;
+
+import org.codehaus.waffle.WaffleException;
+import org.codehaus.waffle.controller.RubyController;
+import org.codehaus.waffle.monitor.BindMonitor;
+import org.jruby.javasupport.JavaEmbedUtils;
+import org.jruby.runtime.builtin.IRubyObject;
+
 /**
  * This implementation can handle all standard Java objects and RubyControllers are handled specially (instance_variables)
+ * 
+ * @author Michael Ward
+ * @author Mauro Talevi
  */
 public class IntrospectingRequestAttributeBinder implements RequestAttributeBinder {
 
+    private final BindMonitor bindMonitor;
+
+    public IntrospectingRequestAttributeBinder(BindMonitor bindMonitor) {
+        this.bindMonitor = bindMonitor;
+    }
+
     public void bind(HttpServletRequest request, Object controller) {
         if (controller instanceof RubyController) {
             handleRubyController(request, (RubyController) controller);
@@ -38,10 +49,13 @@
                 }
             }
         } catch (IntrospectionException e) {
+            bindMonitor.bindFailed(controller, e);
             throw new WaffleException(e);
         } catch (IllegalAccessException e) {
+            bindMonitor.bindFailed(controller, e);
             throw new WaffleException(e);
         } catch (InvocationTargetException e) {
+            bindMonitor.bindFailed(controller, e);
             throw new WaffleException(e);
         }
     }

Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlDataBinder.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -10,6 +10,7 @@
  *****************************************************************************/
 package org.codehaus.waffle.bind;
 
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.validation.BindErrorMessage;
 import org.codehaus.waffle.validation.ErrorsContext;
 import ognl.InappropriateExpressionException;
@@ -27,16 +28,19 @@
  * This DataBinder implementation is backed by <a href="" Object Graph Notation Language</a>.
  *
  * @author Michael Ward
+ * @author Mauro Talevi
  */
 public class OgnlDataBinder implements DataBinder {
     private final TypeConverter typeConverter;
     private final BindErrorMessageResolver bindErrorMessageResolver;
+    private final BindMonitor bindMonitor;
 
-    public OgnlDataBinder(TypeConverter typeConverter, BindErrorMessageResolver bindErrorMessageResolver) {
+    public OgnlDataBinder(TypeConverter typeConverter, BindErrorMessageResolver bindErrorMessageResolver, BindMonitor bindMonitor) {
         this.typeConverter = typeConverter;
         this.bindErrorMessageResolver = bindErrorMessageResolver;
+        this.bindMonitor = bindMonitor;
     }
-
+    
     @SuppressWarnings({"unchecked"})
     public void bind(HttpServletRequest request, HttpServletResponse response, ErrorsContext errorsContext, Object model) {
         Enumeration<String> parameterNames = request.getParameterNames();
@@ -49,10 +53,14 @@
                 handleConvert(name, value, model);
             } catch (OgnlException e) {
                 String message = bindErrorMessageResolver.resolve(model, name, value);
-                errorsContext.addErrorMessage(new BindErrorMessage(name, value, message));
+                BindErrorMessage errorMessage = new BindErrorMessage(name, value, message);
+                errorsContext.addErrorMessage(errorMessage);
+                bindMonitor.bindFailed(model, errorMessage);                
             } catch (BindException e) {
                 // by convention BindExceptions should provide the correct bind error message to display to the end-user
-                errorsContext.addErrorMessage(new BindErrorMessage(name, value, e.getMessage()));
+                BindErrorMessage errorMessage = new BindErrorMessage(name, value, e.getMessage());
+                errorsContext.addErrorMessage(errorMessage);
+                bindMonitor.bindFailed(model, errorMessage);
             }
         }
     }
@@ -73,7 +81,6 @@
             if (e.getReason() instanceof BindException) {
                 throw (BindException) e.getReason();
             }
-
             throw e;
         }
     }

Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/bind/OgnlTypeConverter.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -24,6 +24,7 @@
  * @author Michael Ward
  */
 public class OgnlTypeConverter implements TypeConverter {
+    private static final String EMPTY = "";
     private final WaffleTypeConverter[] waffleTypeConverters;
     private final Map<Class, WaffleTypeConverter> cache = new HashMap<Class, WaffleTypeConverter>();
 
@@ -52,7 +53,7 @@
      * @param propertyName property name being set
      * @param value        value to be converted
      * @param toType       type to which value is converted
-     * @return Converted value of type toType or TypeConverter.NoConversionPossible to indicate that the
+     * @return Converted value Object of type toType or TypeConverter.NoConversionPossible to indicate that the
      *         conversion was not possible.
      */
     public Object convertValue(Map context,
@@ -67,15 +68,16 @@
     /**
      * Simplified entry point for Ognl use in Waffle
      *
-     * @param propertyName
-     * @param value
-     * @param toType
-     * @return
+     * @param propertyName property name being set
+     * @param value        value to be converted
+     * @param toType       type to which value is converted
+     * @return Converted value Object of type toType or TypeConverter.NoConversionPossible to indicate that the
+     *         conversion was not possible.
      */
     @SuppressWarnings({"unchecked"})
     public Object convertValue(String propertyName, String value, Class toType) {
         if (toType.isEnum()) {
-            if ("".equals(value)) {
+            if (EMPTY.equals(value)) {
                 return null;
             }
             return Enum.valueOf(toType, value);

Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/bind/RequestAttributeBinder.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,3 +1,13 @@
+/*****************************************************************************
+ * Copyright (C) 2005,2006 Michael Ward                                      *
+ * All rights reserved.                                                      *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD      *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file.                                                     *
+ *                                                                           *
+ * Original code by: Michael Ward                                            *
+ *****************************************************************************/
 package org.codehaus.waffle.bind;
 
 import javax.servlet.http.HttpServletRequest;
@@ -5,6 +15,8 @@
 /**
  * Implementors of this class allow for properties from a controller to be exposed as request attributes.  This
  * simplifies view development.
+ * 
+ * @author Michael Ward
  */
 public interface RequestAttributeBinder {
 

Modified: trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/bind/RubyDataBinder.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,23 +1,25 @@
 package org.codehaus.waffle.bind;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import ognl.TypeConverter;
+
 import org.codehaus.waffle.action.ArgumentResolver;
 import org.codehaus.waffle.controller.RubyController;
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.validation.ErrorsContext;
 import org.jruby.Ruby;
 import org.jruby.javasupport.JavaEmbedUtils;
 import org.jruby.runtime.builtin.IRubyObject;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 public class RubyDataBinder extends OgnlDataBinder {
     private final ArgumentResolver argumentResolver;
 
     public RubyDataBinder(TypeConverter typeConverter,
                           BindErrorMessageResolver bindErrorMessageResolver,
-                          ArgumentResolver argumentResolver) {
-        super(typeConverter, bindErrorMessageResolver);
+                          ArgumentResolver argumentResolver, BindMonitor bindMonitor) {
+        super(typeConverter, bindErrorMessageResolver, bindMonitor);
         this.argumentResolver = argumentResolver;
     }
 

Modified: trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/context/pico/PicoComponentRegistry.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -10,7 +10,12 @@
  *****************************************************************************/
 package org.codehaus.waffle.context.pico;
 
+import java.util.Enumeration;
+
+import javax.servlet.ServletContext;
+
 import ognl.TypeConverter;
+
 import org.codehaus.waffle.ComponentRegistry;
 import org.codehaus.waffle.WaffleException;
 import org.codehaus.waffle.action.ActionMethodExecutor;
@@ -38,6 +43,7 @@
 import org.codehaus.waffle.i18n.DefaultMessageResources;
 import org.codehaus.waffle.i18n.MessageResources;
 import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.validation.DefaultValidator;
 import org.codehaus.waffle.validation.Validator;
@@ -50,9 +56,6 @@
 import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
 import org.picocontainer.defaults.DefaultPicoContainer;
 
-import javax.servlet.ServletContext;
-import java.util.Enumeration;
-
 /**
  * PicoContainer-based implementation of Waffle's ComponentRegistry
  *
@@ -73,17 +76,18 @@
         // register all known components
         register(ActionMethodExecutor.class, InterceptingActionMethodExecutor.class, servletContext);
         register(ActionMethodResponseHandler.class, DefaultActionMethodResponseHandler.class, servletContext);
+        register(ActionMonitor.class, SilentMonitor.class, servletContext);
         register(ArgumentResolver.class, HierarchicalArgumentResolver.class, servletContext);
         register(BindErrorMessageResolver.class, DefaultBindErrorMessageResolver.class, servletContext);
+        register(DataBinder.class, OgnlDataBinder.class, servletContext);
+        register(RequestAttributeBinder.class, IntrospectingRequestAttributeBinder.class, servletContext);
+        register(BindMonitor.class, SilentMonitor.class, servletContext);
         register(ContextContainerFactory.class, PicoContextContainerFactory.class, servletContext);
         register(ControllerDefinitionFactory.class, ContextControllerDefinitionFactory.class, servletContext);
         register(ControllerNameResolver.class, ContextPathControllerNameResolver.class, servletContext);
-        register(DataBinder.class, OgnlDataBinder.class, servletContext);
         register(MessageResources.class, DefaultMessageResources.class, servletContext);
         register(MethodDefinitionFinder.class, AnnotatedMethodDefinitionFinder.class, servletContext);
         register(MethodNameResolver.class, RequestParameterMethodNameResolver.class, servletContext);
-        register(ActionMonitor.class, SilentMonitor.class, servletContext);
-        register(RequestAttributeBinder.class, IntrospectingRequestAttributeBinder.class, servletContext);
         register(TypeConverter.class, OgnlTypeConverter.class, servletContext);
         register(Validator.class, DefaultValidator.class, servletContext);
         register(ViewDispatcher.class, DefaultViewDispatcher.class, servletContext);
@@ -231,7 +235,7 @@
         return locateByType(MethodNameResolver.class);
     }
 
-    public ActionMonitor getMonitor() {
+    public ActionMonitor getActionMonitor() {
         return locateByType(ActionMonitor.class);
     }
 
@@ -239,6 +243,10 @@
         return locateByType(RequestAttributeBinder.class);
     }
 
+    public BindMonitor getBindMonitor() {
+        return locateByType(BindMonitor.class);
+    }
+    
     public TypeConverter getTypeConverter() {
         return locateByType(TypeConverter.class);
     }

Modified: trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -12,17 +12,19 @@
 
 import static org.codehaus.waffle.monitor.Monitor.Level.DEBUG;
 import static org.codehaus.waffle.monitor.Monitor.Level.INFO;
+import static org.codehaus.waffle.monitor.Monitor.Level.WARN;
 
 import java.util.Set;
 
 import org.codehaus.waffle.action.MethodDefinition;
+import org.codehaus.waffle.validation.BindErrorMessage;
 
 /**
  * Abstract implementation of Monitor that delegates writing to concrete subclasses.
  * 
  * @author Mauro Talevi
  */
-public abstract class AbstractWritingMonitor implements ActionMonitor {
+public abstract class AbstractWritingMonitor implements ActionMonitor, BindMonitor {
 
     /**
      * Writes message for a given level. Concrete implementations should provide writing functionality.
@@ -62,4 +64,12 @@
     public void actionMethodExecutionFailed(Exception exception) {
         trace(exception);
     }
+    
+    public void bindFailed(Object bindModel, BindErrorMessage errorMessage){
+        write(WARN, "Bind failed for model " + bindModel + ": " + errorMessage);
+    }
+    
+    public void bindFailed(Object controller, Throwable cause){
+        write(WARN, "Bind failed for controller " + controller + ": " + cause);
+    }
 }

Added: trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java (0 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java	                        (rev 0)
+++ trunk/core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ * Copyright (C) 2005,2006 Michael Ward                                      *
+ * All rights reserved.                                                      *
+ * ------------------------------------------------------------------------- *
+ * The software in this package is published under the terms of the BSD      *
+ * style license a copy of which has been included with this distribution in *
+ * the LICENSE.txt file.                                                     *
+ *                                                                           *
+ * Original code by: Mauro Talevi                                            *
+ *****************************************************************************/
+package org.codehaus.waffle.monitor;
+
+import org.codehaus.waffle.validation.BindErrorMessage;
+
+
+/**
+ * A monitor for bind-related events
+ * 
+ * @author Mauro Talevi
+ */
+public interface BindMonitor extends Monitor {
+
+    void bindFailed(Object bindModel, BindErrorMessage errorMessage);
+
+    void bindFailed(Object controller, Throwable cause);
+    
+}

Modified: trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/servlet/WaffleServlet.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -52,13 +52,20 @@
     private RequestAttributeBinder requestAttributeBinder;
     private String viewPrefix;
     private String viewSuffix;
-    private boolean depsDone = false;
+    private boolean componentsRetrieved = false;
 
     public WaffleServlet() {
     }
 
     /**
-     * Needed for builder ... and helpful for testing
+     * Constructor required by builder and useful for testing
+     * 
+     * @param controllerDefinitionFactory
+     * @param dataBinder
+     * @param actionMethodExecutor
+     * @param actionMethodResponseHandler
+     * @param validator
+     * @param requestAttributeBinder
      */
     public WaffleServlet(ControllerDefinitionFactory controllerDefinitionFactory,
                          DataBinder dataBinder,
@@ -72,7 +79,7 @@
         this.actionMethodResponseHandler = actionMethodResponseHandler;
         this.validator = validator;
         this.requestAttributeBinder = requestAttributeBinder;
-        depsDone = true;
+        componentsRetrieved = true;
     }
 
     public void init() throws ServletException {
@@ -86,8 +93,8 @@
             viewSuffix = DEFAULT_VIEW_SUFFIX; // default
         }
 
-        if (!depsDone) {
-            // Obtain required components from the Component Registry
+        if (!componentsRetrieved) {
+            // Retrieve required components from the Component Registry
             ComponentRegistry componentRegistry = ServletContextHelper
                     .getComponentRegistry(getServletContext());
             controllerDefinitionFactory = componentRegistry.getControllerDefinitionFactory();

Modified: trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java (350 => 351)

--- trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -38,4 +38,15 @@
         return value;
     }
 
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer("[FieldErrorMessage name=");
+        sb.append(name);
+        sb.append(", value=");
+        sb.append(value);
+        sb.append(", message=");
+        sb.append(message);
+        sb.append("]");
+        return sb.toString();
+    }
 }

Modified: trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/bind/IntrospectingRequestAttributeBinderTest.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,6 +1,9 @@
 package org.codehaus.waffle.bind;
 
+import javax.servlet.http.HttpServletRequest;
+
 import org.codehaus.waffle.controller.RubyController;
+import org.codehaus.waffle.monitor.SilentMonitor;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
@@ -10,8 +13,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import javax.servlet.http.HttpServletRequest;
-
 @RunWith(JMock.class)
 public class IntrospectingRequestAttributeBinderTest {
     private final Mockery context = new JUnit4Mockery();
@@ -25,7 +26,7 @@
             one (request).setAttribute("null", null);
         }});
 
-        IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder();
+        IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(new SilentMonitor());
         binder.bind(request, new SimpleController());
     }
 
@@ -63,7 +64,7 @@
             one (request).setAttribute("number", 1985L);
         }});
 
-        IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder();
+        IntrospectingRequestAttributeBinder binder = new IntrospectingRequestAttributeBinder(new SilentMonitor());
         binder.bind(request, controller);
     }
 

Modified: trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/bind/OgnlDataBinderTest.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -15,6 +15,7 @@
 import ognl.DefaultTypeConverter;
 
 import org.codehaus.waffle.context.ContextLevel;
+import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.testmodel.FakeBean;
 import org.codehaus.waffle.testmodel.FakeController;
 import org.codehaus.waffle.validation.BindErrorMessage;
@@ -57,7 +58,7 @@
         });
 
         FakeController fakeController = new FakeController();
-        DataBinder binder = new OgnlDataBinder(new OgnlTypeConverter(), null);
+        DataBinder binder = new OgnlDataBinder(new OgnlTypeConverter(), null, new SilentMonitor());
         ErrorsContext errorsContext = new DefaultErrorsContext();
         binder.bind(request, null, errorsContext, fakeController);
 
@@ -84,7 +85,7 @@
         });
 
         FakeController fakeController = new FakeController();
-        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null);
+        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor());
         ErrorsContext errorsContext = new DefaultErrorsContext();
         binder.bind(request, null, errorsContext, fakeController);
 
@@ -110,7 +111,7 @@
         });
 
         FakeController fakeController = new FakeController();
-        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null);
+        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor());
 
         ErrorsContext errorsContext = new DefaultErrorsContext();
         binder.bind(request, null, errorsContext, fakeController);
@@ -139,7 +140,7 @@
         });
 
         FakeController fakeController = new FakeController();
-        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null);
+        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor());
 
         ErrorsContext errorsContext = new DefaultErrorsContext();
         binder.bind(request, null, errorsContext, fakeController);
@@ -171,7 +172,7 @@
             }
         });
 
-        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), resolver);
+        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), resolver, new SilentMonitor());
 
         ErrorsContext errorsContext = new DefaultErrorsContext();
         binder.bind(request, null, errorsContext, new FakeBean());
@@ -202,7 +203,7 @@
             }
         });
 
-        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null) {
+        DataBinder binder = new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()) {
             protected void handleConvert(String parameterName, String parameterValue, Object model) {
                 throw new BindException("fake from test");
             }

Modified: trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/context/pico/PicoComponentRegistryTest.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -44,6 +44,7 @@
 import org.codehaus.waffle.i18n.MessageResources;
 import org.codehaus.waffle.monitor.AbstractWritingMonitor;
 import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.codehaus.waffle.testmodel.StubActionMethodExecutor;
 import org.codehaus.waffle.testmodel.StubActionMethodResponseHandler;
 import org.codehaus.waffle.testmodel.StubArgumentResolver;
@@ -126,22 +127,23 @@
             {
                 one(servletContext).getInitParameterNames();
                 will(returnValue(EMPTY_ENUMERATION));
-                exactly(17).of(servletContext).getInitParameter(with(any(String.class)));
+                exactly(18).of(servletContext).getInitParameter(with(any(String.class)));
             }
         });
 
         ComponentRegistry componentRegistry = new PicoComponentRegistry(servletContext);
 
+        assertTrue(componentRegistry.getActionMethodExecutor() instanceof InterceptingActionMethodExecutor);
+        assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof DefaultActionMethodResponseHandler);
+        assertTrue(componentRegistry.getActionMonitor() instanceof AbstractWritingMonitor);
+        assertTrue(componentRegistry.getBindErrorMessageResolver() instanceof DefaultBindErrorMessageResolver);
+        assertTrue(componentRegistry.getDataBinder() instanceof OgnlDataBinder);
+        assertTrue(componentRegistry.getBindMonitor() instanceof AbstractWritingMonitor);
         assertTrue(componentRegistry.getControllerNameResolver() instanceof ContextPathControllerNameResolver);
         assertTrue(componentRegistry.getControllerDefinitionFactory() instanceof ContextControllerDefinitionFactory);
         assertTrue(componentRegistry.getContextContainerFactory() instanceof AbstractContextContainerFactory);
-        assertTrue(componentRegistry.getBindErrorMessageResolver() instanceof DefaultBindErrorMessageResolver);
-        assertTrue(componentRegistry.getDataBinder() instanceof OgnlDataBinder);
-        assertTrue(componentRegistry.getActionMethodExecutor() instanceof InterceptingActionMethodExecutor);
-        assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof DefaultActionMethodResponseHandler);
         assertTrue(componentRegistry.getMethodNameResolver() instanceof RequestParameterMethodNameResolver);
         assertTrue(componentRegistry.getMessageResources() instanceof DefaultMessageResources);
-        assertTrue(componentRegistry.getMonitor() instanceof AbstractWritingMonitor);
         assertTrue(componentRegistry.getViewDispatcher() instanceof DefaultViewDispatcher);
         assertTrue(componentRegistry.getTypeConverter() instanceof OgnlTypeConverter);
         assertTrue(componentRegistry.getViewResolver() instanceof DefaultViewResolver);
@@ -156,16 +158,32 @@
             {
                 one(servletContext).getInitParameterNames();
                 will(returnValue(EMPTY_ENUMERATION));
-                one(servletContext).getInitParameter(ControllerNameResolver.class.getName());
-                will(returnValue(StubControllerNameResolver.class.getName()));
+                one(servletContext).getInitParameter(ActionMethodExecutor.class.getName());
+                will(returnValue(StubActionMethodExecutor.class.getName()));
+                one(servletContext).getInitParameter(Validator.class.getName());
+                will(returnValue(StubValidator.class.getName()));
+                one(servletContext).getInitParameter(MessageResources.class.getName());
+                will(returnValue(StubMessageResources.class.getName()));
+                one(servletContext).getInitParameter(MethodDefinitionFinder.class.getName());
+                will(returnValue(StubMethodDefinitionFinder.class.getName()));
+                one(servletContext).getInitParameter(MethodNameResolver.class.getName());
+                will(returnValue(StubMethodNameResolver.class.getName()));
+                one(servletContext).getInitParameter(ActionMethodResponseHandler.class.getName());
+                will(returnValue(StubActionMethodResponseHandler.class.getName()));
+                one(servletContext).getInitParameter(ActionMonitor.class.getName());
+                will(returnValue(StubMonitor.class.getName()));
                 one(servletContext).getInitParameter(ArgumentResolver.class.getName());
                 will(returnValue(StubArgumentResolver.class.getName()));
                 one(servletContext).getInitParameter(BindErrorMessageResolver.class.getName());
                 will(returnValue(StubBindErrorMessageResolver.class.getName()));
                 one(servletContext).getInitParameter(DataBinder.class.getName());
                 will(returnValue(StubDataBinder.class.getName()));
-                one(servletContext).getInitParameter(ActionMethodResponseHandler.class.getName());
-                will(returnValue(StubActionMethodResponseHandler.class.getName()));
+                one(servletContext).getInitParameter(RequestAttributeBinder.class.getName());
+                will(returnValue(StubRequestAttributeBinder.class.getName()));
+                one(servletContext).getInitParameter(BindMonitor.class.getName());
+                will(returnValue(StubMonitor.class.getName()));
+                one(servletContext).getInitParameter(ControllerNameResolver.class.getName());
+                will(returnValue(StubControllerNameResolver.class.getName()));
                 one(servletContext).getInitParameter(TypeConverter.class.getName());
                 will(returnValue(DefaultTypeConverter.class.getName()));
                 one(servletContext).getInitParameter(ViewDispatcher.class.getName());
@@ -176,20 +194,6 @@
                 will(returnValue(StubControllerDefinitionFactory.class.getName()));
                 one(servletContext).getInitParameter(ContextContainerFactory.class.getName());
                 will(returnValue(StubContextContainerFactory.class.getName()));
-                one(servletContext).getInitParameter(ActionMethodExecutor.class.getName());
-                will(returnValue(StubActionMethodExecutor.class.getName()));
-                one(servletContext).getInitParameter(Validator.class.getName());
-                will(returnValue(StubValidator.class.getName()));
-                one(servletContext).getInitParameter(MessageResources.class.getName());
-                will(returnValue(StubMessageResources.class.getName()));
-                one(servletContext).getInitParameter(MethodDefinitionFinder.class.getName());
-                will(returnValue(StubMethodDefinitionFinder.class.getName()));
-                one(servletContext).getInitParameter(MethodNameResolver.class.getName());
-                will(returnValue(StubMethodNameResolver.class.getName()));
-                one(servletContext).getInitParameter(ActionMonitor.class.getName());
-                will(returnValue(StubMonitor.class.getName()));
-                one(servletContext).getInitParameter(RequestAttributeBinder.class.getName());
-                will(returnValue(StubRequestAttributeBinder.class.getName()));
             }
         });
         ComponentRegistry componentRegistry = new PicoComponentRegistry(servletContext);
@@ -205,12 +209,13 @@
         assertTrue(componentRegistry.getMethodNameResolver() instanceof StubMethodNameResolver);
         assertTrue(componentRegistry.getActionMethodResponseHandler() instanceof StubActionMethodResponseHandler);
         assertTrue(componentRegistry.getMessageResources() instanceof StubMessageResources);
-        assertTrue(componentRegistry.getMonitor() instanceof StubMonitor);
         assertTrue(componentRegistry.getRequestAttributeBinder() instanceof StubRequestAttributeBinder);
         assertTrue(componentRegistry.getTypeConverter() instanceof DefaultTypeConverter);
         assertTrue(componentRegistry.getValidator() instanceof StubValidator);
         assertTrue(componentRegistry.getViewDispatcher() instanceof StubViewDispatcher);
         assertTrue(componentRegistry.getViewResolver() instanceof StubViewResolver);
+        assertTrue(componentRegistry.getActionMonitor() instanceof StubMonitor);
+        assertTrue(componentRegistry.getBindMonitor() instanceof StubMonitor);
     }
 
     public void testRegisterAdditionalComponents() {

Modified: trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/servlet/WaffleServletTest.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -10,7 +10,22 @@
  *****************************************************************************/
 package org.codehaus.waffle.servlet;
 
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import ognl.DefaultTypeConverter;
+
 import org.codehaus.waffle.ComponentRegistry;
 import org.codehaus.waffle.Constants;
 import org.codehaus.waffle.WaffleException;
@@ -26,6 +41,7 @@
 import org.codehaus.waffle.context.pico.PicoContextContainer;
 import org.codehaus.waffle.controller.ControllerDefinition;
 import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.monitor.SilentMonitor;
 import org.codehaus.waffle.validation.ErrorsContext;
 import org.codehaus.waffle.validation.Validator;
 import org.codehaus.waffle.view.View;
@@ -38,19 +54,6 @@
 import org.junit.runner.RunWith;
 import org.picocontainer.defaults.DefaultPicoContainer;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-
 /**
  * 
  * @author Michael Ward
@@ -143,7 +146,7 @@
 
         // stub out what we don't want called ... execute it
         WaffleServlet waffleServlet = new WaffleServlet(null,
-                                                        new OgnlDataBinder(new DefaultTypeConverter(), null),
+                                                        new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()),
                                                         new InterceptingActionMethodExecutor(),
                                                         actionMethodResponseHandler,
                                                         validator,
@@ -204,7 +207,7 @@
 
         // stub out what we don't want called ... execute it
         WaffleServlet waffleServlet = new WaffleServlet(null,
-                                                        new OgnlDataBinder(new DefaultTypeConverter(), null),
+                                                        new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()),
                                                         new InterceptingActionMethodExecutor(),
                                                         actionMethodResponseHandler,
                                                         validator,
@@ -284,7 +287,7 @@
 
         // stub out what we don't want called ... execute it
         WaffleServlet waffleServlet = new WaffleServlet(null,
-                new OgnlDataBinder(new DefaultTypeConverter(), null),
+                new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()),
                 null,
                 actionMethodResponseHandler,
                 validator,
@@ -353,7 +356,7 @@
         // Set up what normally would happen via "init()"
         Field dataBinderField = WaffleServlet.class.getDeclaredField("dataBinder");
         dataBinderField.setAccessible(true);
-        dataBinderField.set(waffleServlet, new OgnlDataBinder(new DefaultTypeConverter(), null));
+        dataBinderField.set(waffleServlet, new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor()));
 
         Field mockMethodExecutorField = WaffleServlet.class.getDeclaredField("actionMethodExecutor");
         mockMethodExecutorField.setAccessible(true);

Modified: trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubComponentRegistry.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,19 +1,21 @@
 package org.codehaus.waffle.testmodel;
 
-import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import ognl.DefaultTypeConverter;
+
+import org.codehaus.waffle.action.ActionMethodExecutor;
+import org.codehaus.waffle.action.ActionMethodResponse;
+import org.codehaus.waffle.action.ActionMethodResponseHandler;
 import org.codehaus.waffle.bind.DataBinder;
 import org.codehaus.waffle.bind.OgnlDataBinder;
 import org.codehaus.waffle.context.ContextContainerFactory;
 import org.codehaus.waffle.context.pico.PicoComponentRegistry;
-import org.codehaus.waffle.action.ActionMethodResponse;
-import org.codehaus.waffle.action.ActionMethodResponseHandler;
-import org.codehaus.waffle.action.ActionMethodExecutor;
-import ognl.DefaultTypeConverter;
+import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.monitor.SilentMonitor;
 
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 public class StubComponentRegistry extends PicoComponentRegistry {
 
     public StubComponentRegistry(ServletContext servletContext) {
@@ -32,7 +34,7 @@
     }
 
     public DataBinder getDataBinder() {
-        return new OgnlDataBinder(new DefaultTypeConverter(), null);
+        return new OgnlDataBinder(new DefaultTypeConverter(), null, new SilentMonitor());
     }
 
     public ControllerDefinitionFactory getControllerDefinitionFactory() {

Modified: trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java (350 => 351)

--- trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2007-11-12 11:11:24 UTC (rev 350)
+++ trunk/core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2007-11-12 18:42:31 UTC (rev 351)
@@ -1,12 +1,14 @@
 package org.codehaus.waffle.testmodel;
 
+import java.util.Set;
+
 import org.codehaus.waffle.action.MethodDefinition;
 import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
+import org.codehaus.waffle.validation.BindErrorMessage;
 
-import java.util.Set;
+public class StubMonitor implements ActionMonitor, BindMonitor {
 
-public class StubMonitor implements ActionMonitor {
-
     public void defaultActionMethodFound(MethodDefinition methodDefinition) {
     }
 
@@ -24,4 +26,10 @@
 
     public void actionMethodExecutionFailed(Exception exception) {
     }
+
+    public void bindFailed(Object bindModel, BindErrorMessage errorMessage) {
+    }
+
+    public void bindFailed(Object controller, Throwable cause) {
+    }
 }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to