Title: [waffle-scm] [641] trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor: WAFFLE-74: Added cause to ErrorMessage.

Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlDataBinder.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlDataBinder.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlDataBinder.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -60,14 +60,14 @@
                 bindMonitor.dataValueBoundToController(parameterName, dataValue, controller);
             } catch (OgnlException e) {
                 String message = bindErrorMessageResolver.resolve(controller, parameterName, parameterValue);
-                BindErrorMessage errorMessage = new BindErrorMessage(parameterName, parameterValue, message);
+                BindErrorMessage errorMessage = new BindErrorMessage(parameterName, parameterValue, message, e);
                 errorsContext.addErrorMessage(errorMessage);
-                bindMonitor.dataBindFailed(controller, errorMessage);                
+                bindMonitor.dataBindFailed(controller, errorMessage, e);                
             } catch (BindException e) {
                 // by convention BindExceptions should provide the correct bind error message to display to the end-user
-                BindErrorMessage errorMessage = new BindErrorMessage(parameterName, parameterValue, e.getMessage());
+                BindErrorMessage errorMessage = new BindErrorMessage(parameterName, parameterValue, e.getMessage(), e);
                 errorsContext.addErrorMessage(errorMessage);
-                bindMonitor.dataBindFailed(controller, errorMessage);
+                bindMonitor.dataBindFailed(controller, errorMessage, e);
             }
         }
     }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/AbstractWritingMonitor.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -133,7 +133,7 @@
         messages.put("viewDispatched", "View dispatched: {0}");
         messages.put("attributeBindFailed", "Attribute bind failed from controller ''{0}'': {1}");
         messages.put("attributeValueBoundFromController", "Attribute value ''{1}'' bound for name ''{0}'' from controller ''{2}''");        
-        messages.put("dataBindFailed", "Data bind failed to controller ''{0}'': {1}");
+        messages.put("dataBindFailed", "Data bind failed to controller ''{0}'' with message {1}: {2}");
         messages.put("dataValueBoundToController", "Data value ''{1}'' bound for name ''{0}'' to controller ''{2}''");        
         messages.put("registrarCreated", "Registrar ''{0}'' created  with monitor ''{1}''");
         messages.put("registrarNotFound", "Registrar ''{0}'' not found");
@@ -266,8 +266,8 @@
         write("attributeValueBoundFromController", name, value, controller);
     }
 
-    public void dataBindFailed(Object controller, BindErrorMessage errorMessage){
-        write("dataBindFailed", controller, errorMessage);
+    public void dataBindFailed(Object controller, BindErrorMessage errorMessage, Throwable cause){
+        write("dataBindFailed", controller, errorMessage, cause);
     }
     
     public void dataValueBoundToController(String name, Object value, Object controller) {

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/monitor/BindMonitor.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -23,7 +23,7 @@
 
     void attributeValueBoundFromController(String name, Object value, Object controller);
 
-    void dataBindFailed(Object controller, BindErrorMessage errorMessage);
+    void dataBindFailed(Object controller, BindErrorMessage errorMessage, Throwable cause);
 
     void dataValueBoundToController(String name, Object value, Object controller);
     

Added: trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/AbstractErrorMessage.java (0 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/AbstractErrorMessage.java	                        (rev 0)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/AbstractErrorMessage.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (c) 2005-2008 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.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Abstract base class for all error messages. Handles the error cause and the retrieval of stack messages.
+ * 
+ * @author Mauro Talevi
+ */
+public abstract class AbstractErrorMessage implements ErrorMessage {
+
+    protected Throwable cause;
+
+    protected AbstractErrorMessage(Throwable cause) {
+        this.cause = cause;
+    }
+
+    public List<String> getStackMessages() {
+        List<String> messages = new ArrayList<String>();
+        addStackMessages(cause, messages);
+        return messages;
+    }
+
+    public Throwable getCause() {
+        return cause;
+    }
+
+    void addStackMessages(Throwable cause, List<String> messages) {
+        if (cause != null) {
+            messages.add(cause.getMessage());
+            addStackMessages(cause.getCause(), messages);
+        }
+    }
+
+}

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/BindErrorMessage.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/BindErrorMessage.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/BindErrorMessage.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -18,9 +18,13 @@
 public class BindErrorMessage extends FieldErrorMessage {
 
     public BindErrorMessage(String name, String value, String message) {
-        super(name, value, message);
+        this(name, value, message, null);
     }
     
+    public BindErrorMessage(String name, String value, String message, Throwable cause) {
+        super(name, value, message, cause);
+    }
+    
     public Type getType() {
         return Type.BIND;
     }
@@ -33,6 +37,8 @@
         sb.append(getValue());
         sb.append(", message=");
         sb.append(getMessage());
+        sb.append(", stackMessages=");
+        sb.append(getStackMessages());
         sb.append("]");
         return sb.toString();
     }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/ErrorMessage.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/ErrorMessage.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/ErrorMessage.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -10,6 +10,8 @@
  *****************************************************************************/
 package org.codehaus.waffle.validation;
 
+import java.util.List;
+
 /**
  * Represents a validation error message
  * 
@@ -20,8 +22,33 @@
 
     enum Type { BIND, FIELD, GLOBAL }
     
+    /**
+     * Returns the type of error message
+     * 
+     * @return The Type
+     */
     Type getType();
 
+    /**
+     * Returns the formatted message
+     * 
+     * @return The message
+     */
     String getMessage();
+
+    /**
+     * Returns the list of messages for the exception stack that cause the error,
+     * ie the list of Throwable.getMessage() from the stack.
+     * 
+     * @return The List of stack messages
+     */
+    List<String> getStackMessages();
+
+    /**
+     * Returns the throwable that caused the error
+     * 
+     * @return The Throwable cause
+     */
+    Throwable getCause();
     
 }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/FieldErrorMessage.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -10,17 +10,24 @@
  *****************************************************************************/
 package org.codehaus.waffle.validation;
 
+
 /**
  * ErrorMessage associated to field validations.
  * 
  * @author Mauro Talevi
  */
-public class FieldErrorMessage implements ErrorMessage {
+public class FieldErrorMessage extends AbstractErrorMessage {
+    
     private String name;
     private String value;
     private String message;
 
     public FieldErrorMessage(String name, String value, String message) {
+        this(name, value, message, null);
+    }
+
+    public FieldErrorMessage(String name, String value, String message, Throwable cause) {
+        super(cause);
         this.name = name;
         this.value = value;
         this.message = message;
@@ -50,6 +57,8 @@
         sb.append(value);
         sb.append(", message=");
         sb.append(message);
+        sb.append(", stackMessages=");
+        sb.append(getStackMessages());
         sb.append("]");
         return sb.toString();
     }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/GlobalErrorMessage.java (640 => 641)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/GlobalErrorMessage.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/validation/GlobalErrorMessage.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -10,8 +10,6 @@
  *****************************************************************************/
 package org.codehaus.waffle.validation;
 
-import java.util.ArrayList;
-import java.util.List;
 
 
 /**
@@ -19,17 +17,16 @@
  *
  * @author Mauro Talevi
  */
-public class GlobalErrorMessage implements ErrorMessage {
+public class GlobalErrorMessage extends AbstractErrorMessage implements ErrorMessage {
     private String message;
-    private Throwable cause;
-
+    
     public GlobalErrorMessage(String message) {
         this(message, null);
     }
 
     public GlobalErrorMessage(String message, Throwable cause) {
+        super(cause);
         this.message = message;
-        this.cause = cause;
     }
 
     public Type getType() {
@@ -40,23 +37,6 @@
         return message;
     }
     
-    public List<String> getStackMessages(){
-        List<String> messages = new ArrayList<String>();
-        addStackMessages(cause, messages);
-        return messages;        
-    }
-
-    public Throwable getCause(){
-        return cause;
-    }
-    
-    private void addStackMessages(Throwable cause, List<String> messages) {
-        if ( cause != null ){
-            messages.add(cause.getMessage());
-            addStackMessages(cause.getCause(), messages);
-        }
-    }
-
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java (640 => 641)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/testmodel/StubMonitor.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -66,7 +66,7 @@
     public void viewDispatched(View view) {
     }
 
-    public void dataBindFailed(Object controller, BindErrorMessage errorMessage) {
+    public void dataBindFailed(Object controller, BindErrorMessage errorMessage, Throwable cause) {
     }
 
     public void attributeBindFailed(Object controller, Throwable cause) {

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/validation/DefaultErrorsContextTest.java (640 => 641)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/validation/DefaultErrorsContextTest.java	2008-04-20 23:11:05 UTC (rev 640)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/validation/DefaultErrorsContextTest.java	2008-04-21 11:41:23 UTC (rev 641)
@@ -39,10 +39,11 @@
     }
     
     @Test
-    public void canRetrieveStackMessagesFromGlobalErrorMessage() {
+    public void canRetrieveStackMessagesFromErrorMessages() {
         Throwable cause = new Throwable("1", new Throwable("2", new Throwable("3")));
-        GlobalErrorMessage errorMessage = new GlobalErrorMessage("global message", cause);
-        assertEquals(asList("1", "2", "3"), errorMessage.getStackMessages());
+        assertEquals(asList("1", "2", "3"), new BindErrorMessage("bind.error", "foobar", null, cause).getStackMessages());
+        assertEquals(asList("1", "2", "3"), new FieldErrorMessage("field.error", "foobaz", null, cause).getStackMessages());
+        assertEquals(asList("1", "2", "3"), new GlobalErrorMessage("global message", cause).getStackMessages());
     }
 
     @Test


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to