Author: jbq
Date: Tue Mar  6 03:37:40 2007
New Revision: 515082

URL: http://svn.apache.org/viewvc?view=rev&rev=515082
Log:
WICKET-340 Unexpected NPE in MapVariableInterpolator

Applied patch and backported exceptionOnNullVarValue from trunk

Added:
    
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/
    
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
   (with props)
    incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/
    
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
   (with props)
Modified:
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
    
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
    
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java?view=diff&rev=515082&r1=515081&r2=515082
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
 Tue Mar  6 03:37:40 2007
@@ -18,6 +18,8 @@
 
 import java.util.Map;
 
+import wicket.util.string.Strings;
+
 /**
  * Interpolates variables into a string from a Map.
  * 
@@ -43,6 +45,26 @@
        }
 
        /**
+        * Constructor
+        * 
+        * @param string
+        *            The string to interpolate into
+        * @param variables
+        *            The variables to substitute
+        * @param exceptionOnNullVarValue
+        *            if true an [EMAIL PROTECTED] IllegalStateException} will 
be thrown if a
+        *            [EMAIL PROTECTED] #getValue(String)} returns null, 
otherwise the
+        *            ${varname} string will be left in the <code>string</code> 
so
+        *            multiple interpolators can be chained
+        */
+       public MapVariableInterpolator(String string, final Map variables,
+                       boolean exceptionOnNullVarValue)
+       {
+               super(string, exceptionOnNullVarValue);
+               this.variables = variables;
+       }
+
+       /**
         * Accessor to set variables
         * 
         * @param variables
@@ -62,12 +84,7 @@
         */
        protected final String getValue(final String variableName)
        {
-               final Object value = variables.get(variableName);
-               if (value != null)
-               {
-                       return value.toString();
-               }
-               throw new IllegalStateException("Interpolated variable '" + 
variableName + "' not found.");
+               return Strings.toString(variables.get(variableName));
        }
 
        /**

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java?view=diff&rev=515082&r1=515081&r2=515082
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
 Tue Mar  6 03:37:40 2007
@@ -35,6 +35,8 @@
        /** The string to interpolate within */
        protected final String string;
 
+       private boolean exceptionOnNullVarValue = false;
+
        /**
         * Constructor
         * 
@@ -47,6 +49,23 @@
        }
 
        /**
+        * Constructor
+        * 
+        * @param string
+        *            String to interpolate with variable values
+        * @param exceptionOnNullVarValue
+        *            if true an [EMAIL PROTECTED] IllegalStateException} will 
be thrown if a
+        *            [EMAIL PROTECTED] #getValue(String)} returns null, 
otherwise the
+        *            ${varname} string will be left in the <code>string</code> 
so
+        *            multiple interpolators can be chained
+        */
+       public VariableInterpolator(final String string, boolean 
exceptionOnNullVarValue)
+       {
+               this.string = string;
+               this.exceptionOnNullVarValue = exceptionOnNullVarValue;
+       }
+
+       /**
         * Gets a value for a variable name during interpolation
         * 
         * @param variableName
@@ -93,10 +112,18 @@
                                // If there's no value
                                if (value == null)
                                {
-                                       // Leave variable uninterpolated, 
allowing multiple
-                                       // interpolators to
-                                       // do their work on the same string
-                                       buffer.append("${" + variableName + 
"}");
+                                       if (exceptionOnNullVarValue)
+                                       {
+                                               throw new 
IllegalArgumentException("Value of variable [[" + variableName
+                                                               + "]] could not 
be resolved while interpolating [[" + string + "]]");
+                                       }
+                                       else
+                                       {
+                                               // Leave variable 
uninterpolated, allowing multiple
+                                               // interpolators to
+                                               // do their work on the same 
string
+                                               buffer.append("${" + 
variableName + "}");
+                                       }
                                }
                                else
                                {

Added: 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java?view=auto&rev=515082
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
 (added)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
 Tue Mar  6 03:37:40 2007
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package wicket.util.string.interpolator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+import wicket.util.string.interpolator.MapVariableInterpolator;
+
+/**
+ * Tests [EMAIL PROTECTED] MapVariableInterpolator}
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jean-Baptiste Quenot</a>
+ */
+public class VariableInterpolatorTest extends TestCase
+{
+       public void testWithValue()
+       {
+               Map params = new HashMap();
+               params.put("key", "value");
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params);
+               assertEquals("value", in.toString());
+       }
+
+       public void testWithoutValue()
+       {
+               Map params = new HashMap();
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params);
+               assertEquals("${key}", in.toString());
+       }
+
+       public void testWithoutValueAndException()
+       {
+               Map params = new HashMap();
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params, true);
+               try
+               {
+                       in.toString();
+                       fail("Should throw an exception");
+               }
+               catch (Exception e)
+               {
+
+               }
+       }
+}

Propchange: 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java?view=diff&rev=515082&r1=515081&r2=515082
==============================================================================
--- 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
 (original)
+++ 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/MapVariableInterpolator.java
 Tue Mar  6 03:37:40 2007
@@ -18,6 +18,8 @@
 
 import java.util.Map;
 
+import wicket.util.string.Strings;
+
 /**
  * Interpolates variables into a string from a Map.
  * 
@@ -42,7 +44,6 @@
                this.variables = variables;
        }
 
-
        /**
         * Constructor
         * 
@@ -63,7 +64,6 @@
                this.variables = variables;
        }
 
-
        /**
         * Accessor to set variables
         * 
@@ -85,7 +85,7 @@
        @Override
        protected final String getValue(final String variableName)
        {
-               return variables.get(variableName).toString();
+               return Strings.toString(variables.get(variableName));
        }
 
        /**

Modified: 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java?view=diff&rev=515082&r1=515081&r2=515082
==============================================================================
--- 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
 (original)
+++ 
incubator/wicket/trunk/wicket/src/main/java/wicket/util/string/interpolator/VariableInterpolator.java
 Tue Mar  6 03:37:40 2007
@@ -65,7 +65,6 @@
                this.exceptionOnNullVarValue = exceptionOnNullVarValue;
        }
 
-
        /**
         * Gets a value for a variable name during interpolation
         * 

Added: 
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java?view=auto&rev=515082
==============================================================================
--- 
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
 (added)
+++ 
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
 Tue Mar  6 03:37:40 2007
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package wicket.util.string.interpolator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+import wicket.util.string.interpolator.MapVariableInterpolator;
+
+/**
+ * Tests [EMAIL PROTECTED] MapVariableInterpolator}
+ * 
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jean-Baptiste Quenot</a>
+ */
+public class VariableInterpolatorTest extends TestCase
+{
+       public void testWithValue()
+       {
+               Map params = new HashMap();
+               params.put("key", "value");
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params);
+               assertEquals("value", in.toString());
+       }
+
+       public void testWithoutValue()
+       {
+               Map params = new HashMap();
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params);
+               assertEquals("${key}", in.toString());
+       }
+
+       public void testWithoutValueAndException()
+       {
+               Map params = new HashMap();
+               MapVariableInterpolator in = new 
MapVariableInterpolator("${key}", params, true);
+               try
+               {
+                       in.toString();
+                       fail("Should throw an exception");
+               }
+               catch (Exception e)
+               {
+
+               }
+       }
+}

Propchange: 
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/wicket/trunk/wicket/src/test/java/wicket/util/string/interpolator/VariableInterpolatorTest.java
------------------------------------------------------------------------------
    svn:keywords = Id


Reply via email to