You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/11/16 23:04:29 UTC

svn commit: r718123 [7/10] - in /wicket/sandbox/knopp/experimental/wicket: ./ .settings/ src/main/java/org/apache/wicket/ src/main/java/org/apache/wicket/ajax/ src/main/java/org/apache/wicket/ajax/form/ src/main/java/org/apache/wicket/ajax/markup/html/...

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/PropertiesFactory.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/PropertiesFactory.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/PropertiesFactory.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/PropertiesFactory.java Sun Nov 16 14:04:19 2008
@@ -53,9 +53,7 @@
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(PropertiesFactory.class);
 
-	/**
-	 * Listeners will be invoked after changes to property file have been detected
-	 */
+	/** Listeners will be invoked after changes to property file have been detected */
 	private final List<IPropertiesChangeListener> afterReloadListeners = new ArrayList<IPropertiesChangeListener>();
 
 	/** Cache for all property files loaded */
@@ -64,7 +62,7 @@
 	/** Application */
 	private final Application application;
 
-	/** LIst of Properties Loader */
+	/** List of Properties Loader */
 	private final List<IPropertiesLoader> propertiesLoader;
 
 	/**
@@ -79,7 +77,7 @@
 
 		propertiesLoader = new ArrayList<IPropertiesLoader>();
 		propertiesLoader.add(new PropertiesFilePropertiesLoader());
-		propertiesLoader.add(new XmlFilePropertiesLoader());
+		propertiesLoader.add(new XmlFilePropertiesLoader("xml"));
 	}
 
 	/**
@@ -174,7 +172,7 @@
 		 * 
 		 * @param clazz
 		 * @param path
-		 * @return
+		 * @return Properties
 		 */
 		Properties load(final Class<?> clazz, final String path);
 	}
@@ -193,14 +191,14 @@
 
 		/**
 		 * 
-		 * @return
+		 * @return File extension
 		 */
 		abstract protected String getFileExtension();
 
 		/**
 		 * 
 		 * @param in
-		 * @return
+		 * @return java.util.Properties
 		 * @throws IOException
 		 */
 		abstract protected java.util.Properties loadProperties(BufferedInputStream in)
@@ -334,7 +332,7 @@
 		/**
 		 * 
 		 * @param in
-		 * @return
+		 * @return java.util.Properties
 		 * @throws IOException
 		 */
 		@Override
@@ -351,11 +349,16 @@
 	 */
 	public class XmlFilePropertiesLoader extends AbstractPropertiesLoader
 	{
+		private final String fileExtension;
+
 		/**
 		 * Construct.
+		 * 
+		 * @param fileExtension
 		 */
-		public XmlFilePropertiesLoader()
+		public XmlFilePropertiesLoader(final String fileExtension)
 		{
+			this.fileExtension = fileExtension;
 		}
 
 		/**
@@ -365,13 +368,13 @@
 		@Override
 		protected String getFileExtension()
 		{
-			return "xml";
+			return fileExtension;
 		}
 
 		/**
 		 * 
 		 * @param in
-		 * @return
+		 * @return java.util.Properties
 		 * @throws IOException
 		 */
 		@Override

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/PackageStringResourceLoader.java Sun Nov 16 14:04:19 2008
@@ -19,7 +19,6 @@
 import java.util.Locale;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.Component;
 import org.apache.wicket.resource.IPropertiesFactory;
 import org.apache.wicket.resource.Properties;
 import org.apache.wicket.util.resource.locator.ResourceNameIterator;
@@ -41,8 +40,9 @@
  * <p>
  * 
  * @author Juergen Donnerstag
+ * @author igor.vaynberg
  */
-public class PackageStringResourceLoader implements IStringResourceLoader
+public class PackageStringResourceLoader extends ComponentStringResourceLoader
 {
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(PackageStringResourceLoader.class);
@@ -62,6 +62,7 @@
 	 * @see org.apache.wicket.resource.loader.IStringResourceLoader#loadStringResource(java.lang.Class,
 	 *      java.lang.String, java.util.Locale, java.lang.String)
 	 */
+	@Override
 	public String loadStringResource(final Class<?> clazz, final String key, final Locale locale,
 		final String style)
 	{
@@ -114,24 +115,6 @@
 		return null;
 	}
 
-	/**
-	 * 
-	 * @see org.apache.wicket.resource.loader.IStringResourceLoader#loadStringResource(org.apache.wicket.Component,
-	 *      java.lang.String)
-	 */
-	public String loadStringResource(final Component component, final String key)
-	{
-		if (component == null)
-		{
-			return null;
-		}
-
-		// The return value
-		Locale locale = component.getLocale();
-		String style = component.getStyle();
-
-		return loadStringResource(component.getClass(), key, locale, style);
-	}
 
 	/**
 	 * Gets the properties file filename (without extension)

Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java?rev=718123&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/resource/loader/ValidatorStringResourceLoader.java Sun Nov 16 14:04:19 2008
@@ -0,0 +1,144 @@
+/*
+ * 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.resource.loader;
+
+import java.util.Locale;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.resource.IPropertiesFactory;
+import org.apache.wicket.resource.Properties;
+import org.apache.wicket.util.resource.locator.ResourceNameIterator;
+import org.apache.wicket.validation.IValidator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This is one of Wicket's default string resource loaders.
+ * <p>
+ * The validator string resource loader checks resource bundles attached to validators (eg
+ * MinimumValidator.properties). The validator list is pulled from the form component in error.
+ * <p>
+ * This implementation is fully aware of both locale and style values when trying to obtain the
+ * appropriate resources.
+ * <p>
+ * 
+ * @author igor.vaynberg
+ */
+public class ValidatorStringResourceLoader implements IStringResourceLoader
+{
+	private static final Logger log = LoggerFactory.getLogger(ValidatorStringResourceLoader.class);
+
+	/**
+	 * Create and initialize the resource loader.
+	 */
+	public ValidatorStringResourceLoader()
+	{
+	}
+
+	/**
+	 * @see org.apache.wicket.resource.loader.IStringResourceLoader#loadStringResource(java.lang.Class,
+	 *      java.lang.String, java.util.Locale, java.lang.String)
+	 */
+	public String loadStringResource(Class<?> clazz, final String key, final Locale locale,
+		final String style)
+	{
+		// only care about IValidator subclasses
+		if (clazz == null || !IValidator.class.isAssignableFrom(clazz))
+		{
+			return null;
+		}
+
+		IPropertiesFactory propertiesFactory = Application.get()
+			.getResourceSettings()
+			.getPropertiesFactory();
+
+		while (true)
+		{
+			// figure out the base path for the class
+			String path = clazz.getName().replace('.', '/');
+
+			// iterate over all the combinations
+			ResourceNameIterator iter = new ResourceNameIterator(path, style, locale, null);
+			while (iter.hasNext())
+			{
+				String newPath = iter.next();
+
+				final Properties props = propertiesFactory.load(clazz, newPath);
+				if (props != null)
+				{
+					// Lookup the value
+					String value = props.getString(key);
+					if (value != null)
+					{
+						if (log.isDebugEnabled())
+						{
+							log.debug("Found resource from: " + props + "; key: " + key);
+						}
+
+						return value;
+					}
+				}
+			}
+
+			// Move to the next superclass
+			clazz = clazz.getSuperclass();
+
+			if (clazz == null || Object.class.equals(clazz))
+			{
+				// nothing more to search, done
+				break;
+			}
+		}
+
+		// not found
+		return null;
+	}
+
+	/**
+	 * 
+	 * @see org.apache.wicket.resource.loader.IStringResourceLoader#loadStringResource(org.apache.wicket.Component,
+	 *      java.lang.String)
+	 */
+	public String loadStringResource(final Component component, final String key)
+	{
+		if (component == null || !(component instanceof FormComponent))
+		{
+			return null;
+		}
+
+		FormComponent<?> fc = (FormComponent<?>)component;
+
+		Locale locale = component.getLocale();
+		String style = component.getStyle();
+
+		for (IValidator<?> validator : fc.getValidators())
+		{
+			String resource = loadStringResource(validator.getClass(), key, locale, style);
+			if (resource != null)
+			{
+				return resource;
+			}
+		}
+
+		// not found
+		return null;
+	}
+
+}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/session/pagemap/AbstractPageMapEntry.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/session/pagemap/AbstractPageMapEntry.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/session/pagemap/AbstractPageMapEntry.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/session/pagemap/AbstractPageMapEntry.java Sun Nov 16 14:04:19 2008
@@ -52,10 +52,9 @@
 	 * 
 	 * @see org.apache.wicket.session.pagemap.IPageMapEntry#getPageClass()
 	 */
-	@SuppressWarnings("unchecked")
 	public Class<? extends Page> getPageClass()
 	{
-		return (Class<? extends Page>)getPage().getClass();
+		return getPage().getClass();
 	}
 
 	/**

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IDebugSettings.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IDebugSettings.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IDebugSettings.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IDebugSettings.java Sun Nov 16 14:04:19 2008
@@ -32,6 +32,21 @@
 public interface IDebugSettings
 {
 	/**
+	 * If set to <code>true</code> wicket will output component path in a <code>wicket:path</code>
+	 * attribute of the component tag. This can be useful for debugging and automating tests.
+	 * 
+	 * @param enabled
+	 */
+	void setOutputComponentPath(boolean enabled);
+
+	/**
+	 * @see #setOutputComponentPath(boolean)
+	 * @return <code>true</code> if output component path feature is enabled, <code>false</code>
+	 *         otherwise
+	 */
+	boolean isOutputComponentPath();
+
+	/**
 	 * @return true if componentUseCheck is enabled
 	 */
 	boolean getComponentUseCheck();

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IMarkupSettings.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IMarkupSettings.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IMarkupSettings.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/IMarkupSettings.java Sun Nov 16 14:04:19 2008
@@ -27,7 +27,7 @@
  * removed. Whitespace stripping is not HTML or JavaScript savvy and can conceivably break pages,
  * but should provide significant performance improvements.
  * <p>
- * <i>stripComments </i> (defaults to false) - Set to true to strip HTML comments during markup
+ * <i>stripComments</i> (defaults to false) - Set to true to strip HTML comments during markup
  * loading
  * 
  * @author Igor Vaynberg (ivaynberg)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/Settings.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/Settings.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/Settings.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/settings/Settings.java Sun Nov 16 14:04:19 2008
@@ -50,6 +50,7 @@
 import org.apache.wicket.resource.loader.ComponentStringResourceLoader;
 import org.apache.wicket.resource.loader.IStringResourceLoader;
 import org.apache.wicket.resource.loader.PackageStringResourceLoader;
+import org.apache.wicket.resource.loader.ValidatorStringResourceLoader;
 import org.apache.wicket.session.DefaultPageFactory;
 import org.apache.wicket.session.pagemap.IPageMapEvictionStrategy;
 import org.apache.wicket.session.pagemap.LeastRecentlyAccessedEvictionStrategy;
@@ -92,6 +93,8 @@
 		IFrameworkSettings,
 		IRequestLoggerSettings
 {
+	private boolean outputComponentPath = false;
+
 	/** Class of access denied page. */
 	private WeakReference<Class<? extends Page>> accessDeniedPage;
 
@@ -329,6 +332,7 @@
 		stringResourceLoaders.add(new ComponentStringResourceLoader());
 		stringResourceLoaders.add(new PackageStringResourceLoader());
 		stringResourceLoaders.add(new ClassStringResourceLoader(this.application.getClass()));
+		stringResourceLoaders.add(new ValidatorStringResourceLoader());
 	}
 
 	/**
@@ -1421,4 +1425,19 @@
 	{
 		parentFolderPlaceholder = sequence;
 	}
+
+
+	/** @see IDebugSettings#isOutputComponentPath() */
+	public boolean isOutputComponentPath()
+	{
+		return outputComponentPath;
+	}
+
+	/** @see IDebugSettings#setOutputComponentPath() */
+	public void setOutputComponentPath(boolean outputComponentPath)
+	{
+		this.outputComponentPath = outputComponentPath;
+	}
+
+
 }

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConversionException.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConversionException.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConversionException.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConversionException.java Sun Nov 16 14:04:19 2008
@@ -35,7 +35,7 @@
 	private static final long serialVersionUID = 1L;
 
 	/** The converter that was used. */
-	private IConverter< ? > converter;
+	private IConverter converter;
 
 	/** Pattern that was used for conversion. */
 	private Format format;
@@ -95,7 +95,7 @@
 	 * 
 	 * @return the used converter.
 	 */
-	public final IConverter< ? > getConverter()
+	public final IConverter getConverter()
 	{
 		return converter;
 	}
@@ -135,7 +135,7 @@
 	 * 
 	 * @return the target property type.
 	 */
-	public final Class< ? > getTargetType()
+	public final Class<?> getTargetType()
 	{
 		return Classes.resolveClass(targetTypeName);
 	}
@@ -147,7 +147,7 @@
 	 *            the converter.
 	 * @return This
 	 */
-	public final ConversionException setConverter(IConverter< ? > converter)
+	public final ConversionException setConverter(IConverter converter)
 	{
 		this.converter = converter;
 		return this;
@@ -199,7 +199,7 @@
 	 *            sets the target property type
 	 * @return This
 	 */
-	public final ConversionException setTargetType(Class< ? > targetType)
+	public final ConversionException setTargetType(Class<?> targetType)
 	{
 		targetTypeName = targetType.getName();
 		return this;

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConverterLocator.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConverterLocator.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConverterLocator.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/ConverterLocator.java Sun Nov 16 14:04:19 2008
@@ -58,33 +58,33 @@
 	 * @param <X>
 	 *            The converter object type
 	 */
-	private class DefaultConverter<X> implements IConverter<X>
+	private class DefaultConverter implements IConverter
 	{
 		private static final long serialVersionUID = 1L;
 
-		private final WeakReference<Class<X>> type;
+		private final WeakReference<Class<?>> type;
 
 		/**
 		 * Construct.
 		 * 
 		 * @param type
 		 */
-		private DefaultConverter(Class<X> type)
+		private DefaultConverter(Class<?> type)
 		{
-			this.type = new WeakReference<Class<X>>(type);
+			this.type = new WeakReference<Class<?>>(type);
 		}
 
 		/**
 		 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,
 		 *      java.util.Locale)
 		 */
-		public X convertToObject(String value, Locale locale)
+		public Object convertToObject(String value, Locale locale)
 		{
 			if (value == null)
 			{
 				return null;
 			}
-			Class<X> theType = type.get();
+			Class<?> theType = type.get();
 			if ("".equals(value))
 			{
 				if (theType.equals(String.class))
@@ -117,7 +117,7 @@
 		 * @see org.apache.wicket.util.convert.IConverter#convertToString(java.lang.Object,
 		 *      java.util.Locale)
 		 */
-		public String convertToString(X value, Locale locale)
+		public String convertToString(Object value, Locale locale)
 		{
 			if (value == null || "".equals(value))
 			{
@@ -131,7 +131,7 @@
 	private static final long serialVersionUID = 1L;
 
 	/** Maps Classes to ITypeConverters. */
-	private final Map<String, IConverter<?>> classToConverter = new HashMap<String, IConverter<?>>();
+	private final Map<String, IConverter> classToConverter = new HashMap<String, IConverter>();
 
 	/**
 	 * Constructor
@@ -173,9 +173,9 @@
 	 *         registered for class c
 	 */
 	@SuppressWarnings("unchecked")
-	public final <T> IConverter<T> get(Class<T> c)
+	public final IConverter get(Class<?> c)
 	{
-		return (IConverter<T>)classToConverter.get(c.getName());
+		return classToConverter.get(c.getName());
 	}
 
 	/**
@@ -189,20 +189,20 @@
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(String, java.util.Locale)
 	 */
 	@SuppressWarnings("unchecked")
-	public final <T> IConverter<T> getConverter(Class<T> type)
+	public final IConverter getConverter(Class<?> type)
 	{
 		// Null is always converted to null
 		if (type == null)
 		{
-			return (IConverter<T>)new DefaultConverter<String>(String.class);
+			return new DefaultConverter(String.class);
 		}
 
 
 		// Get type converter for class
-		final IConverter<T> converter = get(type);
+		final IConverter converter = get(type);
 		if (converter == null)
 		{
-			return new DefaultConverter<T>(type);
+			return new DefaultConverter(type);
 		}
 		return converter;
 	}
@@ -210,24 +210,24 @@
 	/**
 	 * Removes the type converter currently registered for class c.
 	 * 
-	 * @param <C>
-	 *            The type of the converter
+	 * @param The
+	 *            type of the converter
 	 * @param c
 	 *            The class for which the converter registration should be removed
 	 * @return The converter that was registered for class c before removal or null if none was
 	 *         registered
 	 */
 	@SuppressWarnings("unchecked")
-	public final <C> IConverter<C> remove(Class<C> c)
+	public final IConverter remove(Class<?> c)
 	{
-		return (IConverter<C>)classToConverter.remove(c.getName());
+		return classToConverter.remove(c.getName());
 	}
 
 	/**
 	 * Registers a converter for use with class c.
 	 * 
-	 * @param <C>
-	 *            The type of the converter
+	 * @param The
+	 *            type of the converter
 	 * 
 	 * @param converter
 	 *            The converter to add
@@ -237,7 +237,7 @@
 	 *         class c
 	 */
 	@SuppressWarnings("unchecked")
-	public final <C> IConverter<C> set(final Class<C> c, final IConverter<C> converter)
+	public final IConverter set(final Class c, final IConverter converter)
 	{
 		if (converter == null)
 		{
@@ -247,6 +247,6 @@
 		{
 			throw new IllegalArgumentException("Class cannot be null");
 		}
-		return (IConverter<C>)classToConverter.put(c.getName(), converter);
+		return classToConverter.put(c.getName(), converter);
 	}
 }

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/IConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/IConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/IConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/IConverter.java Sun Nov 16 14:04:19 2008
@@ -43,10 +43,8 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  * 
- * @param <T>
- *            The converter object type
  */
-public interface IConverter<T> extends IClusterable
+public interface IConverter extends IClusterable
 {
 	/**
 	 * Converts the given {@link String} value
@@ -57,7 +55,7 @@
 	 *            The locale used to convert the value
 	 * @return The converted value
 	 */
-	T convertToObject(String value, Locale locale);
+	Object convertToObject(String value, Locale locale);
 
 	/**
 	 * Converts the given value to a string.
@@ -69,5 +67,5 @@
 	 * 
 	 * @return The converted string value
 	 */
-	String convertToString(T value, Locale locale);
+	String convertToString(Object value, Locale locale);
 }
\ No newline at end of file

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/MaskConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/MaskConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/MaskConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/MaskConverter.java Sun Nov 16 14:04:19 2008
@@ -37,11 +37,9 @@
  * <tr>
  * <th>Character&nbsp;</th>
  * <th>
- * <p align="left">
- * Description
+ * <p align="left"> Description
  * </p>
- * </th>
- * </tr>
+ * </th> </tr>
  * <tr>
  * <td>#</td>
  * <td>Any valid number, uses <code>Character.isDigit</code>.</td>
@@ -52,25 +50,24 @@
  * </tr>
  * <tr>
  * <td>U</td>
- * <td>Any character (<code>Character.isLetter</code>). All lowercase letters are mapped to
- * upper case.</td>
+ * <td>Any character (<code>Character.isLetter</code>). All lowercase letters are mapped to upper
+ * case.</td>
  * </tr>
  * <tr>
  * <td>L</td>
- * <td>Any character (<code>Character.isLetter</code>). All upper case letters are mapped to
- * lower case.</td>
+ * <td>Any character (<code>Character.isLetter</code>). All upper case letters are mapped to lower
+ * case.</td>
  * </tr>
  * <tr>
  * <td>A</td>
- * <td>Any character or number (<code>Character.isLetter</code> or
- * <code>Character.isDigit</code>)</td>
+ * <td>Any character or number (<code>Character.isLetter</code> or <code>Character.isDigit</code>)</td>
  * </tr>
  * <tr>
  * <td>?</td>
  * <td>Any character (<code>Character.isLetter</code>).</td>
  * </tr>
  * <tr>
- * <td>*</td>
+ * <td></td>
  * <td>Anything.</td>
  * </tr>
  * <tr>
@@ -90,7 +87,7 @@
  * 
  * @author Eelco Hillenius
  */
-public class MaskConverter<T> implements IConverter<T>
+public class MaskConverter implements IConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -155,11 +152,11 @@
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String, Locale)
 	 */
 	@SuppressWarnings("unchecked")
-	public T convertToObject(String value, Locale locale)
+	public Object convertToObject(String value, Locale locale)
 	{
 		try
 		{
-			return (T)maskFormatter.stringToValue(value);
+			return maskFormatter.stringToValue(value);
 		}
 		catch (ParseException e)
 		{
@@ -172,7 +169,7 @@
 	 * 
 	 * @see org.apache.wicket.util.convert.IConverter#convertToString(java.lang.Object, Locale)
 	 */
-	public String convertToString(T value, Locale locale)
+	public String convertToString(Object value, Locale locale)
 	{
 		try
 		{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractConverter.java Sun Nov 16 14:04:19 2008
@@ -29,10 +29,8 @@
  * 
  * @author Eelco Hillenius
  * 
- * @param <T>
- *            The converter object type
  */
-public abstract class AbstractConverter<T> implements IConverter<T>
+public abstract class AbstractConverter implements IConverter
 {
 	/**
 	 * 
@@ -88,12 +86,12 @@
 	/**
 	 * @return The target type of this type converter
 	 */
-	protected abstract Class<T> getTargetType();
+	protected abstract Class<?> getTargetType();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToString(java.lang.Object, Locale)
 	 */
-	public String convertToString(T value, Locale locale)
+	public String convertToString(Object value, Locale locale)
 	{
 		if (value == null)
 		{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java Sun Nov 16 14:04:19 2008
@@ -27,10 +27,8 @@
  * 
  * @author Jonathan Locke
  * 
- * @param <T>
- *            The converter object type
  */
-public abstract class AbstractDecimalConverter<T extends Number> extends AbstractNumberConverter<T>
+public abstract class AbstractDecimalConverter extends AbstractNumberConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -57,6 +55,18 @@
 	}
 
 	/**
+	 * Creates a new {@link NumberFormat} for the given locale. The instance is later cached and is
+	 * accessible through {@link #getNumberFormat(Locale)}
+	 * 
+	 * @param locale
+	 * @return number format
+	 */
+	protected NumberFormat newNumberFormat(Locale locale)
+	{
+		return NumberFormat.getInstance(locale);
+	}
+
+	/**
 	 * @param locale
 	 *            The Locale that was used for this NumberFormat
 	 * @param numberFormat

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractIntegerConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractIntegerConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractIntegerConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractIntegerConverter.java Sun Nov 16 14:04:19 2008
@@ -26,10 +26,8 @@
  * 
  * @author Jonathan Locke
  * 
- * @param <T>
- *            The converter object type
  */
-public abstract class AbstractIntegerConverter<T extends Number> extends AbstractNumberConverter<T>
+public abstract class AbstractIntegerConverter extends AbstractNumberConverter
 {
 	private static final long serialVersionUID = 1L;
 

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractNumberConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractNumberConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractNumberConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractNumberConverter.java Sun Nov 16 14:04:19 2008
@@ -27,11 +27,8 @@
  * 
  * @author Jonathan Locke
  * 
- * @param <T>
- *            The converter object type
- * 
  */
-public abstract class AbstractNumberConverter<T extends Number> extends AbstractConverter<T>
+public abstract class AbstractNumberConverter extends AbstractConverter
 {
 	/**
 	 * 
@@ -106,7 +103,7 @@
 	 * @see org.apache.wicket.util.convert.IConverter#convertToString(java.lang.Object, Locale)
 	 */
 	@Override
-	public String convertToString(final T value, Locale locale)
+	public String convertToString(final Object value, Locale locale)
 	{
 		NumberFormat fmt = getNumberFormat(locale);
 		if (fmt != null)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java Sun Nov 16 14:04:19 2008
@@ -25,12 +25,12 @@
  * see IConverter
  * 
  */
-public class BigDecimalConverter extends AbstractDecimalConverter<BigDecimal>
+public class BigDecimalConverter extends AbstractDecimalConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	@Override
-	protected Class<BigDecimal> getTargetType()
+	protected Class<?> getTargetType()
 	{
 		return BigDecimal.class;
 	}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BooleanConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BooleanConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BooleanConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/BooleanConverter.java Sun Nov 16 14:04:19 2008
@@ -29,19 +29,19 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class BooleanConverter extends AbstractConverter<Boolean>
+public class BooleanConverter extends AbstractConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a boolean converter
 	 */
-	public static final IConverter<Boolean> INSTANCE = new BooleanConverter();
+	public static final IConverter INSTANCE = new BooleanConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)
 	 */
-	public Boolean convertToObject(final String value, Locale locale)
+	public Object convertToObject(final String value, Locale locale)
 	{
 		try
 		{
@@ -57,7 +57,7 @@
 	 * @see org.apache.wicket.util.convert.converters.AbstractConverter#getTargetType()
 	 */
 	@Override
-  protected Class<Boolean> getTargetType()
+	protected Class<?> getTargetType()
 	{
 		return Boolean.class;
 	}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ByteConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ByteConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ByteConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ByteConverter.java Sun Nov 16 14:04:19 2008
@@ -27,19 +27,19 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class ByteConverter extends AbstractIntegerConverter<Byte>
+public class ByteConverter extends AbstractIntegerConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a byte converter
 	 */
-	public static final IConverter<Byte> INSTANCE = new ByteConverter();
+	public static final IConverter INSTANCE = new ByteConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)
 	 */
-	public Byte convertToObject(final String value, Locale locale)
+	public Object convertToObject(final String value, Locale locale)
 	{
 		final Number number = parse(value, Byte.MIN_VALUE, Byte.MAX_VALUE, locale);
 
@@ -55,7 +55,7 @@
 	 * @see org.apache.wicket.util.convert.converters.AbstractConverter#getTargetType()
 	 */
 	@Override
-	protected Class<Byte> getTargetType()
+	protected Class<?> getTargetType()
 	{
 		return Byte.class;
 	}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/CharacterConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/CharacterConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/CharacterConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/CharacterConverter.java Sun Nov 16 14:04:19 2008
@@ -27,19 +27,19 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class CharacterConverter extends AbstractConverter<Character>
+public class CharacterConverter extends AbstractConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a character converter
 	 */
-	public static final IConverter<Character> INSTANCE = new CharacterConverter();
+	public static final IConverter INSTANCE = new CharacterConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)
 	 */
-	public Character convertToObject(final String value, Locale locale)
+	public Object convertToObject(final String value, Locale locale)
 	{
 		int length = value.length();
 		if (length == 0)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DateConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DateConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DateConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DateConverter.java Sun Nov 16 14:04:19 2008
@@ -27,7 +27,7 @@
  * 
  * @author Eelco Hillenius
  */
-public class DateConverter extends AbstractConverter<Date>
+public class DateConverter extends AbstractConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -50,7 +50,7 @@
 	 * @see org.apache.wicket.util.convert.IConverter#convertToString(Object, java.util.Locale)
 	 */
 	@Override
-	public String convertToString(final Date value, Locale locale)
+	public String convertToString(final Object value, Locale locale)
 	{
 		final DateFormat dateFormat = getDateFormat(locale);
 		if (dateFormat != null)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DoubleConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DoubleConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DoubleConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/DoubleConverter.java Sun Nov 16 14:04:19 2008
@@ -27,14 +27,14 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class DoubleConverter extends AbstractDecimalConverter<Double>
+public class DoubleConverter extends AbstractDecimalConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a double converter
 	 */
-	public static final IConverter<Double> INSTANCE = new DoubleConverter();
+	public static final IConverter INSTANCE = new DoubleConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(String, java.util.Locale)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/FloatConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/FloatConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/FloatConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/FloatConverter.java Sun Nov 16 14:04:19 2008
@@ -27,14 +27,14 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class FloatConverter extends AbstractDecimalConverter<Float>
+public class FloatConverter extends AbstractDecimalConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a float converter
 	 */
-	public static final IConverter<Float> INSTANCE = new FloatConverter();
+	public static final IConverter INSTANCE = new FloatConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/IntegerConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/IntegerConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/IntegerConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/IntegerConverter.java Sun Nov 16 14:04:19 2008
@@ -27,14 +27,14 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class IntegerConverter extends AbstractIntegerConverter<Integer>
+public class IntegerConverter extends AbstractIntegerConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a integer converter
 	 */
-	public static final IConverter<Integer> INSTANCE = new IntegerConverter();
+	public static final IConverter INSTANCE = new IntegerConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/LongConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/LongConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/LongConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/LongConverter.java Sun Nov 16 14:04:19 2008
@@ -27,14 +27,14 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class LongConverter extends AbstractIntegerConverter<Long>
+public class LongConverter extends AbstractIntegerConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a long converter
 	 */
-	public static final IConverter<Long> INSTANCE = new LongConverter();
+	public static final IConverter INSTANCE = new LongConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ShortConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ShortConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ShortConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ShortConverter.java Sun Nov 16 14:04:19 2008
@@ -27,14 +27,14 @@
  * @author Eelco Hillenius
  * @author Jonathan Locke
  */
-public final class ShortConverter extends AbstractIntegerConverter<Short>
+public class ShortConverter extends AbstractIntegerConverter
 {
 	private static final long serialVersionUID = 1L;
 
 	/**
 	 * The singleton instance for a short converter
 	 */
-	public static final IConverter<Short> INSTANCE = new ShortConverter();
+	public static final IConverter INSTANCE = new ShortConverter();
 
 	/**
 	 * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,Locale)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlDateConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlDateConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlDateConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlDateConverter.java Sun Nov 16 14:04:19 2008
@@ -25,7 +25,7 @@
 /**
  * Converts to {@link java.sql.Date}.
  */
-public class SqlDateConverter extends AbstractConverter<Date>
+public class SqlDateConverter extends AbstractConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -49,7 +49,7 @@
 	 *      java.util.Locale)
 	 */
 	@Override
-	public String convertToString(final Date value, Locale locale)
+	public String convertToString(final Object value, Locale locale)
 	{
 		final DateFormat dateFormat = getDateFormat(locale);
 		if (dateFormat != null)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimeConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimeConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimeConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimeConverter.java Sun Nov 16 14:04:19 2008
@@ -27,7 +27,7 @@
 /**
  * Converts to {@link Time}.
  */
-public class SqlTimeConverter extends AbstractConverter<Time>
+public class SqlTimeConverter extends AbstractConverter
 {
 
 	private static final long serialVersionUID = 1L;
@@ -56,13 +56,13 @@
 	}
 
 	@Override
-	public String convertToString(final Time value, Locale locale)
+	public String convertToString(final Object value, Locale locale)
 	{
 		if (value == null)
 			return null;
 		if (locale == null)
 			locale = Locale.getDefault();
-		Time time = value;
+		Time time = (Time)value;
 		DateFormat format = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
 		return format.format(time);
 	}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimestampConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimestampConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimestampConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/SqlTimestampConverter.java Sun Nov 16 14:04:19 2008
@@ -29,7 +29,7 @@
  * 
  * @author eelcohillenius
  */
-public class SqlTimestampConverter extends AbstractConverter<Timestamp>
+public class SqlTimestampConverter extends AbstractConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -57,13 +57,13 @@
 	}
 
 	@Override
-	public String convertToString(final Timestamp value, Locale locale)
+	public String convertToString(final Object value, Locale locale)
 	{
 		if (value == null)
 			return null;
 		if (locale == null)
 			locale = Locale.getDefault();
-		Timestamp timestamp = value;
+		Timestamp timestamp = (Timestamp)value;
 		DateFormat format = DateFormat.getTimeInstance(DateFormat.SHORT, locale);
 		return format.format(timestamp);
 	}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ZeroPaddingIntegerConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ZeroPaddingIntegerConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ZeroPaddingIntegerConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/convert/converters/ZeroPaddingIntegerConverter.java Sun Nov 16 14:04:19 2008
@@ -25,7 +25,7 @@
  * @author Jonathan Locke
  * @author Al Maw
  */
-public final class ZeroPaddingIntegerConverter extends AbstractIntegerConverter<Integer>
+public class ZeroPaddingIntegerConverter extends AbstractIntegerConverter
 {
 	private static final long serialVersionUID = 1L;
 
@@ -47,7 +47,7 @@
 	 *      java.util.Locale)
 	 */
 	@Override
-	public String convertToString(Integer value, Locale locale)
+	public String convertToString(Object value, Locale locale)
 	{
 		String result = super.convertToString(value, locale);
 

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/crypt/AbstractCrypt.java Sun Nov 16 14:04:19 2008
@@ -68,7 +68,7 @@
 		}
 		catch (UnsupportedEncodingException ex)
 		{
-			throw new WicketRuntimeException(ex.getMessage());
+			throw new WicketRuntimeException("Error decoding text: " + text, ex);
 		}
 	}
 
@@ -125,7 +125,7 @@
 	 * @throws GeneralSecurityException
 	 */
 	protected abstract byte[] crypt(final byte[] input, final int mode)
-			throws GeneralSecurityException;
+		throws GeneralSecurityException;
 
 	/**
 	 * Decrypts an encrypted, but Base64 decoded byte array into a byte array.
@@ -142,8 +142,8 @@
 		}
 		catch (GeneralSecurityException e)
 		{
-			throw new WicketRuntimeException("Unable to decrypt the text '" + encrypted.toString() +
-					"'", e);
+			throw new WicketRuntimeException("Unable to decrypt the text '" +
+				new String(encrypted) + "'", e);
 		}
 	}
 
@@ -156,7 +156,7 @@
 	 * @throws GeneralSecurityException
 	 */
 	private final byte[] encryptStringToByteArray(final String plainText)
-			throws GeneralSecurityException
+		throws GeneralSecurityException
 	{
 		try
 		{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/file/Files.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/file/Files.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/file/Files.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/file/Files.java Sun Nov 16 14:04:19 2008
@@ -76,7 +76,7 @@
 	public static String filename(final String path)
 	{
 		return Strings.lastPathComponent(path.replace('/', java.io.File.separatorChar),
-				java.io.File.separatorChar);
+			java.io.File.separatorChar);
 	}
 
 	/**
@@ -92,7 +92,8 @@
 		if (!file.delete())
 		{
 			// NOTE: fix for java/win bug. see:
-			// http://forum.java.sun.com/thread.jsp?forum=4&thread=158689&tstart=0&trange=15
+			// http://forum.java.sun.com/thread.jsp?forum=4&thread=158689&tstart=
+			// 0&trange=15
 			System.gc();
 			try
 			{
@@ -119,7 +120,7 @@
 	 * @throws IOException
 	 */
 	public static final int writeTo(final java.io.File file, final InputStream input)
-			throws IOException
+		throws IOException
 	{
 		final FileOutputStream out = new FileOutputStream(file);
 		try
@@ -132,10 +133,32 @@
 		}
 	}
 
+	private static String FORBIDDEN_IN_NAME = new String("\"*/:<>?\\|,");
+
+	/**
+	 * <p>
+	 * Replaces commonly unsupported characters with '_'
+	 * </p>
+	 * 
+	 * @param filename
+	 *            to be cleaned
+	 * @return cleaned filename
+	 */
+	public static final String cleanupFilename(final String filename)
+	{
+		String name = filename;
+		for (int i = 0; i < FORBIDDEN_IN_NAME.length(); i++)
+		{
+			name = name.replace(FORBIDDEN_IN_NAME.charAt(i), '_');
+		}
+		return name;
+	}
+
 	/**
 	 * Private constructor to prevent instantiation.
 	 */
 	private Files()
 	{
 	}
+
 }

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/io/WicketObjectOutputStream.java Sun Nov 16 14:04:19 2008
@@ -625,6 +625,7 @@
 	/**
 	 * @see java.io.ObjectOutputStream#writeFields()
 	 */
+	@SuppressWarnings("deprecation")
 	@Override
 	public void writeFields() throws IOException
 	{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolver.java Sun Nov 16 14:04:19 2008
@@ -36,23 +36,27 @@
  * NOTE: THIS CLASS IS NOT PART OF THE WICKET PUBLIC API, DO NOT USE IT UNLESS YOU KNOW WHAT YOU ARE
  * DOING.
  * <p>
- * This class parses expressions to lookup or set a value on the object that is given. <br/> The
- * supported expressions are:
+ * This class parses expressions to lookup or set a value on the object that is given. <br/>
+ * The supported expressions are:
  * <p>
  * "property": This can can then be a bean property with get and set method. Or if a map is given as
  * an object it will be lookup with the property as a key when there is not get method for that
- * property. <p/>
+ * property.
+ * <p/>
  * <p>
  * "property1.property2": Both properties are lookup as written above. If property1 evaluates to
  * null then if there is a setMethod (or if it is a map) and the Class of the property has a default
- * constructor then the object will be constructed and set on the object. <p/>
+ * constructor then the object will be constructed and set on the object.
+ * <p/>
  * <p>
  * "property.index": If the property is a List or Array then the second property can be a index on
  * that list like: 'mylist.0' this expression will also map on a getProperty(index) or
  * setProperty(index,value) methods. If the object is a List then the list will grow automatically
- * if the index is greater then the size <p/>
+ * if the index is greater then the size
+ * <p/>
  * <p>
- * Index or map properties can also be written as: "property[index]" or "property[key]" <p/>
+ * Index or map properties can also be written as: "property[index]" or "property[key]"
+ * <p/>
  * 
  * @author jcompagner
  */
@@ -721,7 +725,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		@SuppressWarnings("unchecked")
@@ -759,7 +763,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		@SuppressWarnings("unchecked")
@@ -816,7 +820,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		public void setValue(Object object, Object value, PropertyResolverConverter converter)
@@ -869,7 +873,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		public void setValue(Object object, Object value, PropertyResolverConverter converter)
@@ -946,7 +950,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		public void setValue(Object object, Object value, PropertyResolverConverter converter)
@@ -1106,7 +1110,8 @@
 			else
 			{
 				throw new WicketRuntimeException("no set method defined for value: " + value +
-					" on object: " + object);
+					" on object: " + object + " while respective getMethod being " +
+					getMethod.getName());
 			}
 		}
 
@@ -1274,7 +1279,7 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue( Object, Object,
+		 * @see org.apache.wicket.util.lang.PropertyResolver.IGetAndSet#setValue(Object, Object,
 		 *      PropertyResolverConverter)
 		 */
 		public void setValue(Object object, Object value, PropertyResolverConverter converter)

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java Sun Nov 16 14:04:19 2008
@@ -51,7 +51,8 @@
 	 * @param clz
 	 * @return The converted object
 	 */
-	public Object convert(Object object, Class/* <?> */clz)
+	@SuppressWarnings("unchecked")
+	public Object convert(Object object, Class<?> clz)
 	{
 		if (object == null)
 		{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/JavascriptStripper.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/JavascriptStripper.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/JavascriptStripper.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/JavascriptStripper.java Sun Nov 16 14:04:19 2008
@@ -19,7 +19,7 @@
 
 /**
  * Strips comments and whitespace from javascript
- * 
+ *
  * @author Matej Knopp
  */
 public class JavascriptStripper
@@ -68,7 +68,7 @@
 
 	/**
 	 * Removes javascript comments and whitespace from specified string.
-	 * 
+	 *
 	 * @param original
 	 *            Source string
 	 * @return String with removed comments and whitespace
@@ -122,7 +122,8 @@
 							idx--;
 							continue;
 						}
-						if (tmp == '=' || tmp == '(' || tmp == '{' || tmp == ':' || tmp == ',')
+						if (tmp == '=' || tmp == '(' || tmp == '{' || tmp == ':' || tmp == ',' ||
+							tmp == '[')
 						{
 							state = REG_EXP;
 							break;

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/Strings.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/Strings.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/Strings.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/Strings.java Sun Nov 16 14:04:19 2008
@@ -889,6 +889,13 @@
 		if (ixSemiColon != -1)
 		{
 			int ixEnd = path.indexOf("?");
+
+			if (ixEnd <= ixSemiColon)
+			{
+				// ? is before ; - no jsessionid in the url
+				return url.toString();
+			}
+
 			if (ixEnd == -1)
 			{
 				ixEnd = path.length();

Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/UrlUtils.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/UrlUtils.java?rev=718123&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/UrlUtils.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/string/UrlUtils.java Sun Nov 16 14:04:19 2008
@@ -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.util.string;
+
+import org.apache.wicket.Request;
+
+/**
+ * Various url utilities
+ * 
+ * @author igor.vaynberg
+ */
+public class UrlUtils
+{
+	/**
+	 * Constructor
+	 */
+	private UrlUtils()
+	{
+
+	}
+
+	/**
+	 * Checks if the url is relative or absolute
+	 * 
+	 * @param url
+	 * @return <code>true</code> if url is relative, <code>false</code> otherwise
+	 */
+	public static boolean isRelative(String url)
+	{
+		if ((url != null) && (url.startsWith("/") == false) && (url.indexOf("://") < 0) &&
+			!(url.startsWith("#")))
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+	/**
+	 * Rewrites a relative url to be context relative, leaves absolute urls same.
+	 * 
+	 * @param url
+	 * @param request
+	 * @return rewritten url
+	 */
+	public static String rewriteToContextRelative(String url, Request request)
+	{
+		if (isRelative(url))
+		{
+			final String prefix = request.getRelativePathPrefixToContextRoot();
+			return prefix + url;
+		}
+		else
+		{
+			return url;
+		}
+	}
+}

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/template/TextTemplateLink.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/template/TextTemplateLink.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/template/TextTemplateLink.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/template/TextTemplateLink.java Sun Nov 16 14:04:19 2008
@@ -26,9 +26,11 @@
  * useful for creating dynamic JNLP descriptors, among other things.
  * 
  * @author Jonathan Locke
+ * @param <T>
+ *            type of model object
  * @since 1.2.6
  */
-public class TextTemplateLink extends ResourceLink
+public class TextTemplateLink<T> extends ResourceLink<T>
 {
 	private static final long serialVersionUID = 1L;
 

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Sun Nov 16 14:04:19 2008
@@ -72,8 +72,8 @@
 
 /**
  * A helper class to ease unit testing of Wicket applications without the need for a servlet
- * container. See javadoc of <code>WicketTester</code> for example usage. This class can be used
- * as is, but JUnit users should use derived class <code>WicketTester</code>.
+ * container. See javadoc of <code>WicketTester</code> for example usage. This class can be used as
+ * is, but JUnit users should use derived class <code>WicketTester</code>.
  * 
  * @see WicketTester
  * 
@@ -139,8 +139,8 @@
 	}
 
 	/**
-	 * Creates <code>WicketTester</code> and automatically create a <code>WebApplication</code>,
-	 * but the tester will have no home page.
+	 * Creates <code>WicketTester</code> and automatically create a <code>WebApplication</code>, but
+	 * the tester will have no home page.
 	 */
 	public BaseWicketTester()
 	{
@@ -202,8 +202,8 @@
 	 * @param application
 	 *            a <code>WicketTester</code> <code>WebApplication</code> object
 	 * @param path
-	 *            the absolute path on disk to the <code>WebApplication</code>'s contents (e.g.
-	 *            war root) - may be <code>null</code>
+	 *            the absolute path on disk to the <code>WebApplication</code>'s contents (e.g. war
+	 *            root) - may be <code>null</code>
 	 * 
 	 * @see org.apache.wicket.protocol.http.MockWebApplication#MockWebApplication(org.apache.wicket.protocol.http.WebApplication,
 	 *      String)
@@ -214,9 +214,9 @@
 	}
 
 	/**
-	 * Renders a <code>Page</code> defined in <code>TestPageSource</code>. This is usually used
-	 * when a page does not have default constructor. For example, a <code>ViewBook</code> page
-	 * requires a <code>Book</code> instance:
+	 * Renders a <code>Page</code> defined in <code>TestPageSource</code>. This is usually used when
+	 * a page does not have default constructor. For example, a <code>ViewBook</code> page requires
+	 * a <code>Book</code> instance:
 	 * 
 	 * <pre>
 	 * tester.startPage(new TestPageSource()
@@ -350,9 +350,9 @@
 	}
 
 	/**
-	 * Renders a <code>Panel</code> defined in <code>TestPanelSource</code>. The usage is
-	 * similar to {@link #startPage(ITestPageSource)}. Please note that testing <code>Panel</code>
-	 * must use the supplied <code>panelId<code> as a <code>Component</code> id.
+	 * Renders a <code>Panel</code> defined in <code>TestPanelSource</code>. The usage is similar to
+	 * {@link #startPage(ITestPageSource)}. Please note that testing <code>Panel</code> must use the
+	 * supplied <code>panelId<code> as a <code>Component</code> id.
 	 * 
 	 * <pre>
 	 * tester.startPanel(new TestPanelSource()
@@ -523,7 +523,7 @@
 	 */
 	public <C extends Page> Result isPageLink(String path, Class<C> expectedPageClass)
 	{
-		PageLink pageLink = (PageLink)getComponentFromLastRenderedPage(path);
+		PageLink<?> pageLink = (PageLink<?>)getComponentFromLastRenderedPage(path);
 		try
 		{
 			Field iPageLinkField = pageLink.getClass().getDeclaredField("pageLink");
@@ -677,7 +677,7 @@
 					"not be invoked when AJAX (javascript) is disabled.");
 			}
 
-			AjaxLink link = (AjaxLink)linkComponent;
+			AjaxLink<?> link = (AjaxLink<?>)linkComponent;
 
 			setupRequestAndResponse(true);
 			WebRequestCycle requestCycle = createRequestCycle();
@@ -695,7 +695,7 @@
 		// Link.
 		else if (linkComponent instanceof AjaxFallbackLink && isAjax)
 		{
-			AjaxFallbackLink link = (AjaxFallbackLink)linkComponent;
+			AjaxFallbackLink<?> link = (AjaxFallbackLink<?>)linkComponent;
 
 			setupRequestAndResponse(true);
 			WebRequestCycle requestCycle = createRequestCycle();
@@ -769,7 +769,7 @@
 			 */
 			if (link instanceof BookmarkablePageLink)
 			{
-				BookmarkablePageLink bookmarkablePageLink = (BookmarkablePageLink)link;
+				BookmarkablePageLink<?> bookmarkablePageLink = (BookmarkablePageLink<?>)link;
 				try
 				{
 					Field parametersField = BookmarkablePageLink.class.getDeclaredField("parameters");
@@ -810,8 +810,8 @@
 	}
 
 	/**
-	 * Sets a parameter for the <code>Component</code> with the given path to be used with the
-	 * next request.
+	 * Sets a parameter for the <code>Component</code> with the given path to be used with the next
+	 * request.
 	 * <p>
 	 * NOTE: this method only works when a <code>Page</code> was rendered first.
 	 * 
@@ -875,8 +875,8 @@
 	/**
 	 * Asserts last rendered <code>Page</code> against an expected HTML document.
 	 * <p>
-	 * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the
-	 * expected output file.
+	 * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected
+	 * output file.
 	 * </p>
 	 * 
 	 * @param pageClass
@@ -978,8 +978,8 @@
 	}
 
 	/**
-	 * Dumps the <code>Component</code> trees to log. Show only the <code>Component</code>s
-	 * whose paths contain the filter <code>String</code>.
+	 * Dumps the <code>Component</code> trees to log. Show only the <code>Component</code>s whose
+	 * paths contain the filter <code>String</code>.
 	 * 
 	 * @param filter
 	 *            a filter <code>String</code>
@@ -999,13 +999,13 @@
 	}
 
 	/**
-	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>,
-	 * using {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
+	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using
+	 * {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
 	 * <code>Component</code> is on the Ajax response sent back to the client.
 	 * <p>
-	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client
-	 * DOM tree, using Javascript. But it shouldn't be needed because you have to trust that the
-	 * Wicket Ajax Javascript just works.
+	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM
+	 * tree, using Javascript. But it shouldn't be needed because you have to trust that the Wicket
+	 * Ajax Javascript just works.
 	 * 
 	 * @param component
 	 *            the <code>Component</code> to test
@@ -1092,8 +1092,8 @@
 	 *     ...
 	 * </pre>
 	 * 
-	 * You can then test that the code inside <code>onEvent</code> actually does what it's
-	 * supposed to, using the <code>WicketTester</code>:
+	 * You can then test that the code inside <code>onEvent</code> actually does what it's supposed
+	 * to, using the <code>WicketTester</code>:
 	 * 
 	 * <pre>
 	 *     ...
@@ -1105,17 +1105,16 @@
 	 * This also works with <code>AjaxFormSubmitBehavior</code>, where it will "submit" the
 	 * <code>Form</code> before executing the command.
 	 * <p>
-	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client
-	 * DOM tree, using Javascript.
+	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM
+	 * tree, using Javascript.
 	 * 
 	 * 
 	 * @param component
-	 *            the <code>Component</code> that has the <code>AjaxEventBehavior</code> we want
-	 *            to test. If the <code>Component</code> is <code>null</code>, the test will
-	 *            fail.
+	 *            the <code>Component</code> that has the <code>AjaxEventBehavior</code> we want to
+	 *            test. If the <code>Component</code> is <code>null</code>, the test will fail.
 	 * @param event
-	 *            the event to simulate being fired. If <code>event</code> is <code>null</code>,
-	 *            the test will fail.
+	 *            the event to simulate being fired. If <code>event</code> is <code>null</code>, the
+	 *            test will fail.
 	 */
 	public void executeAjaxEvent(Component component, String event)
 	{
@@ -1148,19 +1147,8 @@
 		failMessage = "No AjaxEventBehavior found on component: " + component.getId() +
 			" which matches the event: " + event;
 		notNull(failMessage, ajaxEventBehavior);
+		WebRequestCycle requestCycle = resolveRequestCycle();
 
-		// initialize the request only if needed to allow the user to pass
-		// request parameters, see
-		// WICKET-254
-		WebRequestCycle requestCycle;
-		if (RequestCycle.get() == null)
-		{
-			requestCycle = setupRequestAndResponse(true);
-		}
-		else
-		{
-			requestCycle = (WebRequestCycle)RequestCycle.get();
-		}
 		// when the requestcycle is not created via setupRequestAndResponse(true), it can happen
 		// that the request is not an ajax request -> we have to set the header manually
 		if (!requestCycle.getWebRequest().isAjax())
@@ -1185,10 +1173,27 @@
 		processRequestCycle(requestCycle);
 	}
 
+	protected WebRequestCycle resolveRequestCycle()
+	{
+		// initialize the request only if needed to allow the user to pass
+		// request parameters, see
+		// WICKET-254
+		WebRequestCycle requestCycle;
+		if (RequestCycle.get() == null)
+		{
+			requestCycle = setupRequestAndResponse(true);
+		}
+		else
+		{
+			requestCycle = (WebRequestCycle)RequestCycle.get();
+		}
+		return requestCycle;
+	}
+
 	/**
 	 * Retrieves a <code>TagTester</code> based on a <code>wicket:id</code>. If more
-	 * <code>Component</code>s exist with the same <code>wicket:id</code> in the markup, only
-	 * the first one is returned.
+	 * <code>Component</code>s exist with the same <code>wicket:id</code> in the markup, only the
+	 * first one is returned.
 	 * 
 	 * @param wicketId
 	 *            the <code>wicket:id</code> to search for
@@ -1201,8 +1206,8 @@
 	}
 
 	/**
-	 * Retrieves a <code>TagTester</code> based on an DOM id. If more <code>Component</code>s
-	 * exist with the same id in the markup, only the first one is returned.
+	 * Retrieves a <code>TagTester</code> based on an DOM id. If more <code>Component</code>s exist
+	 * with the same id in the markup, only the first one is returned.
 	 * 
 	 * @param id
 	 *            the DOM id to search for.

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/DummyHomePage.java Sun Nov 16 14:04:19 2008
@@ -31,7 +31,7 @@
 
 	private transient ITestPageSource testPageSource;
 
-	private final Link testPageLink;
+	private final Link<?> testPageLink;
 
 	/**
 	 * Constructor.
@@ -59,7 +59,7 @@
 	 * 
 	 * @return the test page <code>Link</code>
 	 */
-	public Link getTestPageLink()
+	public Link<?> getTestPageLink()
 	{
 		return testPageLink;
 	}
@@ -67,7 +67,7 @@
 	/**
 	 * <code>TestLink</code> class.
 	 */
-	public class TestLink extends Link
+	public class TestLink extends Link<Void>
 	{
 		private static final long serialVersionUID = 1L;
 

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java Sun Nov 16 14:04:19 2008
@@ -36,7 +36,6 @@
 import org.apache.wicket.protocol.http.HttpSessionStore;
 import org.apache.wicket.protocol.http.MockHttpServletResponse;
 import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore;
-import org.apache.wicket.protocol.http.UnitTestSettings;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WebResponse;
 import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore.IPageStore;
@@ -114,8 +113,8 @@
  * </pre>
  * 
  * <code>tester.clickLink(path);</code> will simulate user click on the component (in this case,
- * it's a <code>Link</code>) and render the response page <code>YourPage</code>. Ok, unit test
- * of <code>MyPage</code> is completed. Now we test <code>YourPage</code> standalone:
+ * it's a <code>Link</code>) and render the response page <code>YourPage</code>. Ok, unit test of
+ * <code>MyPage</code> is completed. Now we test <code>YourPage</code> standalone:
  * 
  * <pre>
  * //test code
@@ -140,8 +139,8 @@
  * {@link org.apache.wicket.util.tester.ITestPageSource} to provide testing page instance for
  * <code>WicketTester</code>. This is necessary because <code>YourPage</code> uses a custom
  * constructor, which is very common for transferring model data, but cannot be instantiated by
- * reflection. Finally, we use <code>assertInfoMessages</code> to assert there is a feedback
- * message "Wicket Rocks ;-)" at the INFO level.
+ * reflection. Finally, we use <code>assertInfoMessages</code> to assert there is a feedback message
+ * "Wicket Rocks ;-)" at the INFO level.
  * 
  * TODO General: Example usage of FormTester
  * 
@@ -310,16 +309,12 @@
 	 *            the absolute path on disk to the web application's contents (e.g. war root) - may
 	 *            be <code>null</code>
 	 * 
-	 * @see org.apache.wicket.protocol.http.MockWebApplication#MockWebApplication(
-	 *      org.apache.wicket.protocol.http.WebApplication, String)
+	 * @see org.apache.wicket.protocol.http.MockWebApplication#MockWebApplication(org.apache.wicket.protocol.http.WebApplication,
+	 *      String)
 	 */
 	public WicketTester(final WebApplication application, final String path)
 	{
 		super(application, path);
-
-		// We need to turn this on for unit testing so that url encoding will be
-		// done on sorted maps of parameters and they will string compare
-		UnitTestSettings.setSortUrlParameters(true);
 	}
 
 
@@ -361,13 +356,13 @@
 	}
 
 	/**
-	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>,
-	 * using {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
+	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using
+	 * {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
 	 * <code>Component</code> is on the Ajax response sent back to the client.
 	 * <p>
-	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client
-	 * DOM tree, using Javascript. But it shouldn't be needed because you just have to trust that
-	 * Wicket Ajax Javascript works.
+	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM
+	 * tree, using Javascript. But it shouldn't be needed because you just have to trust that Wicket
+	 * Ajax Javascript works.
 	 * 
 	 * @param component
 	 *            a <code>Component</code> to be tested
@@ -379,13 +374,13 @@
 	}
 
 	/**
-	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>,
-	 * using {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
+	 * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using
+	 * {@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a
 	 * <code>Component</code> is on the Ajax response sent back to the client.
 	 * <p>
-	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client
-	 * DOM tree, using Javascript. But it shouldn't be needed because you just have to trust that
-	 * Wicket Ajax Javascript works.
+	 * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM
+	 * tree, using Javascript. But it shouldn't be needed because you just have to trust that Wicket
+	 * Ajax Javascript works.
 	 * 
 	 * @param componentPath
 	 *            a <code>Component</code> path to test
@@ -485,7 +480,7 @@
 	@Override
 	public void assertListView(String path, List<?> expectedList)
 	{
-		ListView listView = (ListView)getComponentFromLastRenderedPage(path);
+		ListView<?> listView = (ListView<?>)getComponentFromLastRenderedPage(path);
 		WicketTesterHelper.assertEquals(expectedList, listView.getList());
 	}
 
@@ -494,7 +489,7 @@
 	 */
 	public void assertNoErrorMessage()
 	{
-		List messages = getMessages(FeedbackMessage.ERROR);
+		List<Serializable> messages = getMessages(FeedbackMessage.ERROR);
 		Assert.assertTrue("expect no error message, but contains\n" +
 			WicketTesterHelper.asLined(messages), messages.isEmpty());
 	}
@@ -504,7 +499,7 @@
 	 */
 	public void assertNoInfoMessage()
 	{
-		List messages = getMessages(FeedbackMessage.INFO);
+		List<Serializable> messages = getMessages(FeedbackMessage.INFO);
 		Assert.assertTrue("expect no info message, but contains\n" +
 			WicketTesterHelper.asLined(messages), messages.isEmpty());
 	}
@@ -517,7 +512,7 @@
 	 * @param expectedPageClass
 	 *            expected <code>Page</code> class to link
 	 */
-	public void assertPageLink(String path, Class expectedPageClass)
+	public void assertPageLink(String path, Class<? extends Page> expectedPageClass)
 	{
 		assertResult(isPageLink(path, expectedPageClass));
 	}
@@ -528,7 +523,7 @@
 	 * @param expectedRenderedPageClass
 	 *            expected class of last rendered <code>Page</code>
 	 */
-	public void assertRenderedPage(Class expectedRenderedPageClass)
+	public void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass)
 	{
 		assertResult(isRenderedPage(expectedRenderedPageClass));
 	}
@@ -536,18 +531,17 @@
 	/**
 	 * Asserts last-rendered <code>Page</code> against an expected HTML document.
 	 * <p>
-	 * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the
-	 * expected output file.
+	 * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected
+	 * output file.
 	 * 
 	 * @param clazz
-	 *            <code>Class</code> used to load the file (relative to <code>clazz</code>
-	 *            package)
+	 *            <code>Class</code> used to load the file (relative to <code>clazz</code> package)
 	 * @param filename
 	 *            expected output filename <code>String</code>
 	 * @throws Exception
 	 */
 	@Override
-	public void assertResultPage(final Class clazz, final String filename) throws Exception
+	public void assertResultPage(final Class<?> clazz, final String filename) throws Exception
 	{
 		String document = getServletResponse().getDocument();
 		setupRequestAndResponse();

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java?rev=718123&r1=718122&r2=718123&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java Sun Nov 16 14:04:19 2008
@@ -67,11 +67,11 @@
 	 */
 	public static List<WicketTesterHelper.ComponentData> getComponentData(final Page page)
 	{
-		final List data = new ArrayList();
+		final List<ComponentData> data = new ArrayList<ComponentData>();
 
 		if (page != null)
 		{
-			page.visitChildren(new IVisitor()
+			page.visitChildren(new IVisitor<Component>()
 			{
 				public Object component(final Component component)
 				{
@@ -114,7 +114,7 @@
 	 * @param actuals
 	 *            a <code>Collection</code> object
 	 */
-	public static void assertEquals(final Collection expects, final Collection actuals)
+	public static void assertEquals(final Collection<?> expects, final Collection<?> actuals)
 	{
 		if (!expects.containsAll(actuals) || !actuals.containsAll(expects))
 		{
@@ -130,7 +130,8 @@
 	 * @param actuals
 	 *            a <code>Collection</code> object
 	 */
-	public static void failWithVerboseMessage(final Collection expects, final Collection actuals)
+	public static void failWithVerboseMessage(final Collection<?> expects,
+		final Collection<?> actuals)
 	{
 		Assert.fail("\nexpect (" + expects.size() + "):\n" + asLined(expects) + "\nbut was (" +
 			actuals.size() + "):\n" + asLined(actuals));
@@ -143,10 +144,10 @@
 	 *            a <code>Collection</code> object
 	 * @return a <code>String</code> representation of the <code>Collection</code>
 	 */
-	public static String asLined(final Collection objects)
+	public static String asLined(final Collection<?> objects)
 	{
 		StringBuffer lined = new StringBuffer();
-		for (Iterator iter = objects.iterator(); iter.hasNext();)
+		for (Iterator<?> iter = objects.iterator(); iter.hasNext();)
 		{
 			String objectString = iter.next().toString();
 			lined.append("   ");