Author: ivaynberg
Date: Sat Mar  8 11:58:11 2008
New Revision: 635062

URL: http://svn.apache.org/viewvc?rev=635062&view=rev
Log:
WICKET-1400: FormComponent.error(ivalidationerror) error needs to show tried 
resource keys

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java?rev=635062&r1=635061&r2=635062&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
 Sat Mar  8 11:58:11 2008
@@ -22,9 +22,11 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
@@ -51,6 +53,8 @@
 import org.apache.wicket.validation.IValidatorAddListener;
 import org.apache.wicket.validation.ValidationError;
 import org.apache.wicket.version.undo.Change;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -86,6 +90,8 @@
        implements
                IFormVisitorParticipant
 {
+       private static final Logger logger = 
LoggerFactory.getLogger(FormComponent.class);
+
        /**
         * Visitor for traversing form components
         */
@@ -128,6 +134,7 @@
         */
        private class MessageSource implements IErrorMessageSource
        {
+               private final Set/* <String> */triedKeys = new LinkedHashSet();
 
                /**
                 * @see 
org.apache.wicket.validation.IErrorMessageSource#getMessage(java.lang.String)
@@ -153,7 +160,7 @@
                        // Note: It is important that the default value of "" 
is provided
                        // to getString() not to throw a 
MissingResourceException or to
                        // return a default string like "[Warning: String ..."
-                       String message = localizer.getString(resource, 
formComponent.getParent(), "");
+                       String message = getString(localizer, resource, 
formComponent.getParent());
 
                        // If not found, than ...
                        if (Strings.isEmpty(message))
@@ -162,7 +169,7 @@
 
                                resource = prefix + key;
 
-                               message = localizer.getString(resource, 
formComponent.getParent(), "");
+                               message = getString(localizer, resource, 
formComponent.getParent());
                        }
 
                        if (Strings.isEmpty(message))
@@ -175,7 +182,7 @@
                                // provided
                                // to getString() not to throw a 
MissingResourceException or to
                                // return a default string like "[Warning: 
String ..."
-                               message = localizer.getString(resource, 
formComponent, "");
+                               message = getString(localizer, resource, 
formComponent);
 
                                // If not found, than ...
                                if (Strings.isEmpty(message))
@@ -183,8 +190,7 @@
                                        // Try a variation of the resource key
 
                                        resource = prefix + key;
-
-                                       message = localizer.getString(resource, 
formComponent, "");
+                                       message = getString(localizer, 
resource, formComponent);
                                }
                        }
 
@@ -197,6 +203,12 @@
                        return message;
                }
 
+               private String getString(Localizer localizer, String key, 
Component component)
+               {
+                       triedKeys.add(key);
+                       return localizer.getString(key, component, "");
+               }
+
                /**
                 * @see 
org.apache.wicket.validation.IErrorMessageSource#substitute(java.lang.String,
                 *      java.util.Map)
@@ -535,14 +547,31 @@
                {
                        throw new IllegalArgumentException("Argument [[error]] 
cannot be null");
                }
-               String message = error.getErrorMessage(new MessageSource());
+               MessageSource source = new MessageSource();
+               String message = error.getErrorMessage(source);
 
                if (message == null)
                {
-                       // XXX maybe make message source remember tried 
resource keys so a
-                       // more detailed error message can be created - like 
show which keys
-                       // were tried
-                       message = "Could not locate error message for error: " 
+ error.toString();
+                       StringBuffer buffer = new StringBuffer();
+                       buffer.append("Could not locate error message for 
component: ");
+                       buffer.append(Classes.simpleName(getClass()));
+                       buffer.append("@");
+                       buffer.append(getPageRelativePath());
+                       buffer.append(" and error: ");
+                       buffer.append(error.toString());
+                       buffer.append(". Tried keys: ");
+                       Iterator/* <String> */keys = 
source.triedKeys.iterator();
+                       while (keys.hasNext())
+                       {
+                               buffer.append(keys.next());
+                               if (keys.hasNext())
+                               {
+                                       buffer.append(", ");
+                               }
+                       }
+                       buffer.append(".");
+                       message = buffer.toString();
+                       logger.warn(message);
                }
                error(new ValidationErrorFeedback(error, message));
        }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java?rev=635062&r1=635061&r2=635062&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/validation/ValidationError.java
 Sat Mar  8 11:58:11 2008
@@ -25,6 +25,7 @@
 import java.util.Map.Entry;
 
 import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.lang.Classes;
 
 /**
  * A versatile implementation of [EMAIL PROTECTED] IValidationError} that 
supports message resolution from
@@ -97,12 +98,12 @@
                if (name == null || name.trim().length() == 0)
                {
                        throw new IllegalArgumentException(
-                                       "Argument [[name]] cannot be null or an 
empty string");
+                               "Argument [[name]] cannot be null or an empty 
string");
                }
                if (value == null)
                {
                        throw new IllegalArgumentException(
-                                       "Argument [[value]] cannot be null or 
an empty string");
+                               "Argument [[value]] cannot be null or an empty 
string");
                }
 
                getVariables().put(name, value);
@@ -159,9 +160,9 @@
                }
 
                // ... if no keys matched try the default
-               if (errorMessage == null && this.message != null)
+               if (errorMessage == null && message != null)
                {
-                       errorMessage = this.message;
+                       errorMessage = message;
                }
 
                // if a message was found perform variable substitution
@@ -207,7 +208,7 @@
        public String toString()
        {
                StringBuffer tostring = new StringBuffer();
-               tostring.append("[").append(getClass().getName());
+               tostring.append("[").append(Classes.simpleName(getClass()));
 
                tostring.append(" message=[").append(message);
 
@@ -236,8 +237,11 @@
                        while (i.hasNext())
                        {
                                final Map.Entry e = (Entry)i.next();
-                               
tostring.append("[").append(e.getKey()).append("=").append(e.getValue())
-                                               .append("]");
+                               tostring.append("[")
+                                       .append(e.getKey())
+                                       .append("=")
+                                       .append(e.getValue())
+                                       .append("]");
                                if (i.hasNext())
                                {
                                        tostring.append(",");


Reply via email to