You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jb...@apache.org on 2007/03/06 12:37:51 UTC

svn commit: r515082 - in /incubator/wicket: branches/wicket-1.x/wicket/src/main/java/wicket/util/string/interpolator/ branches/wicket-1.x/wicket/src/test/java/wicket/util/string/interpolator/ trunk/wicket/src/main/java/wicket/util/string/interpolator/ ...

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 {@link IllegalStateException} will be thrown if a
+	 *            {@link #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 {@link IllegalStateException} will be thrown if a
+	 *            {@link #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 {@link MapVariableInterpolator}
+ * 
+ * @author <a href="mailto:jbq@apache.org">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 {@link MapVariableInterpolator}
+ * 
+ * @author <a href="mailto:jbq@apache.org">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