You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/08/22 20:03:47 UTC

git commit: extracted conversion into new class; Locale and IConverterLocator now determined once only

Updated Branches:
  refs/heads/master 53e7e235c -> 9249b3e6d


extracted conversion into new class; Locale and IConverterLocator now determined once only


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/9249b3e6
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/9249b3e6
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/9249b3e6

Branch: refs/heads/master
Commit: 9249b3e6d1dedf1835505b0bb79bd9c92ea43136
Parents: 53e7e23
Author: svenmeier <sv...@apache.org>
Authored: Wed Aug 22 20:03:12 2012 +0200
Committer: svenmeier <sv...@apache.org>
Committed: Wed Aug 22 20:03:12 2012 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/Localizer.java |   56 +++++-------
 .../ConvertingPropertyVariableInterpolator.java    |   74 +++++++++++++++
 .../interpolator/PropertyVariableInterpolator.java |   27 +++---
 3 files changed, 110 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/9249b3e6/wicket-core/src/main/java/org/apache/wicket/Localizer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Localizer.java b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
index 313702d..0594233 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Localizer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
@@ -25,12 +25,11 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator;
+import org.apache.wicket.core.util.string.interpolator.ConvertingPropertyVariableInterpolator;
 import org.apache.wicket.markup.repeater.AbstractRepeater;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
 import org.apache.wicket.settings.IResourceSettings;
-import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.slf4j.Logger;
@@ -516,11 +515,11 @@ public class Localizer
 		}
 	}
 
-	/**
+/**
 	 * Helper method to handle property variable substitution in strings.
 	 * 
 	 * @param component
-	 *            The component requesting a model value
+	 *            The component requesting a model value or {@code null]
 	 * @param string
 	 *            The string to substitute into
 	 * @param model
@@ -532,38 +531,29 @@ public class Localizer
 	{
 		if ((string != null) && (model != null))
 		{
-			return new PropertyVariableInterpolator(string, model.getObject())
+			final IConverterLocator locator;
+			final Locale locale;
+			if (component == null)
 			{
-				@SuppressWarnings({ "rawtypes", "unchecked" })
-				@Override
-				protected String toString(Object value)
+				locator = Application.get().getConverterLocator();
+
+				if (Session.exists())
+				{
+					locale = Session.get().getLocale();
+				}
+				else
 				{
-					IConverter converter;
-					Locale locale;
-					if (component == null)
-					{
-						converter = Application.get()
-							.getConverterLocator()
-							.getConverter(value.getClass());
-
-						if (Session.exists())
-						{
-							locale = Session.get().getLocale();
-						}
-						else
-						{
-							locale = Locale.getDefault();
-						}
-					}
-					else
-					{
-						converter = component.getConverter(value.getClass());
-						locale = component.getLocale();
-					}
-
-					return converter.convertToString(value, locale);
+					locale = Locale.getDefault();
 				}
-			}.toString();
+			}
+			else
+			{
+				locator = component;
+				locale = component.getLocale();
+			}
+
+			return new ConvertingPropertyVariableInterpolator(string, model.getObject(), locator,
+				locale).toString();
 		}
 		return string;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/9249b3e6/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/ConvertingPropertyVariableInterpolator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/ConvertingPropertyVariableInterpolator.java b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/ConvertingPropertyVariableInterpolator.java
new file mode 100644
index 0000000..5e8cc37
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/ConvertingPropertyVariableInterpolator.java
@@ -0,0 +1,74 @@
+/*
+ * 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 org.apache.wicket.core.util.string.interpolator;
+
+import java.util.Locale;
+
+import org.apache.wicket.IConverterLocator;
+import org.apache.wicket.util.convert.IConverter;
+
+/**
+ * A {@link PropertyVariableInterpolator} converting values with {@link IConverter}s.
+ * 
+ * @author svenmeier
+ */
+public class ConvertingPropertyVariableInterpolator extends PropertyVariableInterpolator
+{
+	private static final long serialVersionUID = 1L;
+
+	private IConverterLocator locator;
+
+	private Locale locale;
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param string
+	 *            a <code>String</code> to interpolate into
+	 * @param object
+	 *            the object to apply property expressions to
+	 * @param locator
+	 *            the locator of converters
+	 * @param locale
+	 *            the locale for conversion
+	 */
+	public ConvertingPropertyVariableInterpolator(final String string, final Object object,
+		IConverterLocator locator, Locale locale)
+	{
+		super(string, object);
+
+		this.locator = locator;
+		this.locale = locale;
+	}
+
+	/**
+	 * Use an {@link IConverter} to convert the given value to a String.
+	 * 
+	 * @param value
+	 *            the value, never {@code null}
+	 * 
+	 * @return converted value
+	 */
+	@Override
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	protected String toString(Object value)
+	{
+		IConverter converter = locator.getConverter(value.getClass());
+
+		return converter.convertToString(value, locale);
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/9249b3e6/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java
index 40d8461..19889fc 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolator.java
@@ -22,15 +22,14 @@ import org.apache.wicket.util.string.interpolator.VariableInterpolator;
 
 /**
  * Interpolates values into <code>String</code>s that are produced by interpreting property
- * expressions against a beans model.
+ * expressions against an object.
  * <p>
- * The <code>interpolate(String string, Object model)</code> method takes a string such as "
- * <code>My name is ${name}</code>" and a beans model such as a <code>Person</code>, and reflects on
- * the object using any property expressions found inside <code>${}</code> markers in the
- * <code>String</code>. In this case, if the <code>Person</code> model has a <code>getName()</code>
- * method. The results of calling that method would be substituted for <code>${name}</code>. If
- * <code>getName()</code> returned <code>"Jonathan"</code>, then <code>interpolate()</code> would
- * return <code>"My name is Jonathan"</code>.
+ * Takes a string such as "<code>My name is ${name}</code>" and a bean such as a <code>Person</code>
+ * , and reflects on the object using any property expressions found inside <code>${}</code> markers
+ * in the <code>String</code>. In this case, if the <code>Person</code> model has a
+ * <code>getName()</code> method. The results of calling that method would be substituted for
+ * <code>${name}</code>. If <code>getName()</code> returned <code>"Jonathan"</code>, then the result
+ * would return <code>"My name is Jonathan"</code>.
  * <p>
  * "$" is the escape char. Thus "$${text}" can be used to escape it (ignore interpretation). If
  * '$3.24' is needed then '$$${amount}' should be used. The first $ sign escapes the second, and the
@@ -43,27 +42,27 @@ public class PropertyVariableInterpolator extends VariableInterpolator
 {
 	private static final long serialVersionUID = 1L;
 
-	/** The model to introspect on */
-	private final Object model;
+	/** The object to introspect on */
+	private final Object oject;
 
 	/**
 	 * Constructor.
 	 * 
 	 * @param string
 	 *            a <code>String</code> to interpolate into
-	 * @param model
+	 * @param object
 	 *            the model to apply property expressions to
 	 */
-	public PropertyVariableInterpolator(final String string, final Object model)
+	public PropertyVariableInterpolator(final String string, final Object object)
 	{
 		super(string);
-		this.model = model;
+		oject = object;
 	}
 
 	@Override
 	protected String getValue(final String variableName)
 	{
-		Object value = PropertyResolver.getValue(variableName, model);
+		Object value = PropertyResolver.getValue(variableName, oject);
 
 		if (value != null)
 		{