You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/03/13 20:41:23 UTC

[1/3] wicket git commit: Remove deprecated component iterators

Repository: wicket
Updated Branches:
  refs/heads/master bad3aa708 -> 62e6be756


Remove deprecated component iterators


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

Branch: refs/heads/master
Commit: 3cc60fff83e28cfc6b5c39543986ddce17157f3f
Parents: bad3aa7
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Mar 13 19:49:07 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Mar 13 19:49:07 2016 +0100

----------------------------------------------------------------------
 .../iterator/AbstractHierarchyIterator.java     | 466 --------------
 .../AbstractHierarchyIteratorWithFilter.java    | 215 -------
 .../iterator/ComponentHierarchyIterator.java    | 246 -------
 .../GenericComponentHierarchyIterator.java      | 208 ------
 .../wicket/util/iterator/IteratorFilter.java    |  34 -
 .../iterator/AbstractHierarchyIteratorTest.java | 339 ----------
 .../util/iterator/ComponentIteratorTest.java    | 636 -------------------
 7 files changed, 2144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java b/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
deleted file mode 100644
index fd8be61..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * 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.iterator;
-
-import java.util.Iterator;
-
-import org.apache.wicket.util.collections.ArrayListStack;
-import org.apache.wicket.util.lang.Args;
-
-/**
- * This is a basic iterator for hierarchical structures such as Component hierarchies or HTML
- * markup. It supports child first and parent first traversal and intercepts while moving down or up
- * the hierarchy.
- * <p>
- * It assumes the container class implements <code>Iterable</code>. The leaf nodes don't need to.
- * <p>
- * Consecutive calls to <code>hasNext()</code> without <code>next()</code> in between, don't move
- * the cursor, but return the same value until <code>next()</code> is called.
- * <p>
- * Every call to <code>next()</code>, with or without <code>hasNext()</code>, will move the cursor
- * to the next element.
- * 
- * @TODO Replace ChildFirst with a strategy
- * 
- * @author Juergen Donnerstag
- * @param <I>
- *            The type relevant for the iterator. What you expect to get back from next(), e.g.
- *            Form.
- * @param <N>
- *            The base type of all nodes, e.g. Component
- * @deprecated Hierarchy iterators are deprecated because they have problems with pages with
- *      deep component tree. Use {@link org.apache.wicket.util.visit.IVisitor} instead.
- * @see org.apache.wicket.MarkupContainer#visitChildren(org.apache.wicket.util.visit.IVisitor)
- * @see org.apache.wicket.MarkupContainer#visitChildren(Class, org.apache.wicket.util.visit.IVisitor)
- */
-@Deprecated
-public abstract class AbstractHierarchyIterator<N, I extends N> implements Iterator<I>, Iterable<I>
-{
-	// An iterator for each level we are down from root
-	private ArrayListStack<LevelIterator<N>> stack = new ArrayListStack<>();
-
-	// The current level iterator
-	private LevelIterator<N> data;
-
-	// Whether we need to traverse into the next level with the next invocation of hasNext()
-	private boolean traverse;
-
-	// An easy way to configure child or parent first iterations
-	private boolean childFirst;
-
-	// If remaining siblings shall be ignored
-	private boolean skipRemainingSiblings;
-
-	// True, if hasNext() was called last or next()
-	private boolean hasNextWasLast;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param root
-	 */
-	public AbstractHierarchyIterator(final N root)
-	{
-		Args.notNull(root, "root");
-
-		if (hasChildren(root))
-		{
-			data = new LevelIterator<>(root, newIterator(root));
-		}
-	}
-
-	/**
-	 * 
-	 * @param childFirst
-	 *            If true, than children are visited before their parent is.
-	 */
-	public final void setChildFirst(final boolean childFirst)
-	{
-		this.childFirst = childFirst;
-	}
-
-	/**
-	 * 
-	 * @param node
-	 * @return True, if node is a container and has at least one child.
-	 */
-	abstract protected boolean hasChildren(final N node);
-
-	/**
-	 * If node is a container than return an iterator for its children.
-	 * <p>
-	 * Gets only called if {@link #hasChildren(Object)} return true.
-	 * 
-	 * @param node
-	 * @return container iterator
-	 */
-	abstract protected Iterator<N> newIterator(final N node);
-
-	@Override
-	public boolean hasNext()
-	{
-		// Did we reach the end already?
-		if (data == null)
-		{
-			return false;
-		}
-
-		// We did not yet reach the end. Has next() been called already?
-		if (hasNextWasLast == true)
-		{
-			// next() has not yet been called.
-			return true;
-		}
-
-		// Remember that the last call was a hasNext()
-		hasNextWasLast = true;
-
-		//
-		if (skipRemainingSiblings == true)
-		{
-			skipRemainingSiblings = false;
-			return moveUp();
-		}
-
-		// Do we need to traverse into the next level?
-		if (!childFirst && traverse)
-		{
-			// Try to find the next element
-			if (moveDown(data.lastNode) == false)
-			{
-				// No more elements
-				return false;
-			}
-
-			// Found the next element in one the next levels
-			hasNextWasLast = true;
-			return true;
-		}
-
-		// Get the next node on the current level. If it's a container, than move downwards. If
-		// there are no more elements, than move up again.
-		return nextNode();
-	}
-
-	/**
-	 * Move down into the next level
-	 * 
-	 * @param node
-	 * @return False if no more elements were found
-	 */
-	private boolean moveDown(final N node)
-	{
-		// Remember all details of the current level
-		stack.push(data);
-
-		// Initialize the data for the next level
-		data = new LevelIterator<>(node, newIterator(node));
-
-		// Get the next node on the current level. If it's a container, than move downwards. If
-		// there are no more elements, than move up again.
-		return nextNode();
-	}
-
-	/**
-	 * Gets called for each element within the hierarchy (nodes and leafs)
-	 * 
-	 * @param node
-	 * @return if false, than skip (filter) the element. It'll not stop the iterator from traversing
-	 *         into children though.
-	 */
-	protected boolean onFilter(final N node)
-	{
-		return true;
-	}
-
-	/**
-	 * Gets called for each element where {@link #hasChildren(Object)} return true.
-	 * 
-	 * @param node
-	 * @return if false, than do not traverse into the children and grand-children.
-	 */
-	protected boolean onTraversalFilter(final N node)
-	{
-		return true;
-	}
-
-	/**
-	 * Get the next node from the underlying iterator and handle it.
-	 * 
-	 * @return true, if one more element was found
-	 */
-	private boolean nextNode()
-	{
-		// Get the next element
-		while (data.hasNext())
-		{
-			data.lastNode = data.next();
-
-			// Does it have children?
-			traverse = hasChildren(data.lastNode);
-			if (traverse)
-			{
-				traverse = onTraversalFilter(data.lastNode);
-			}
-
-			// If it does and we do childFirst, than try to find the next child
-			if (childFirst && traverse)
-			{
-				if (moveDown(data.lastNode) == false)
-				{
-					// No more elements
-					return false;
-				}
-			}
-
-			// The user interested in the node?
-			if (onFilter(data.lastNode))
-			{
-				// Yes
-				return true;
-			}
-
-			// If we are parent first but the user is not interested in the current node, than move
-			// down.
-			if (!childFirst && traverse)
-			{
-				if (moveDown(data.lastNode) == false)
-				{
-					// No more elements
-					return false;
-				}
-
-				if (data == null)
-				{
-					return false;
-				}
-
-				hasNextWasLast = true;
-				return true;
-			}
-
-			if (skipRemainingSiblings == true)
-			{
-				skipRemainingSiblings = false;
-				break;
-			}
-		}
-
-		// Nothing found. Move up and try to find the next element there
-		return moveUp();
-	}
-
-	/**
-	 * Move up until we found the next element
-	 * 
-	 * @return false, if no more elements are found
-	 */
-	private boolean moveUp()
-	{
-		if (data == null)
-		{
-			return false;
-		}
-
-		// Are we back at the root node?
-		if (stack.isEmpty())
-		{
-			data = null;
-			return false;
-		}
-
-		// Move up one level
-		data = stack.pop();
-
-		// If we are on childFirst, then it's now time to handle the parent
-		if (childFirst)
-		{
-			hasNextWasLast = true;
-			if (onFilter(data.lastNode) == true)
-			{
-				return true;
-			}
-			return nextNode();
-		}
-		// If we are on parent first, then get the next element
-		else if (data.hasNext())
-		{
-			return nextNode();
-		}
-		else
-		{
-			// No more elements on the current level. Move up.
-			return moveUp();
-		}
-	}
-
-	/**
-	 * Traverse the hierarchy and get the next element
-	 */
-	@Override
-	@SuppressWarnings("unchecked")
-	public I next()
-	{
-		// Did we reach the end already?
-		if (data == null)
-		{
-			return null;
-		}
-
-		// hasNext() is responsible to get the next element
-		if (hasNextWasLast == false)
-		{
-			if (hasNext() == false)
-			{
-				// No more elements
-				return null;
-			}
-		}
-
-		// Remember that we need to call hasNext() to get the next element
-		hasNextWasLast = false;
-
-		return (I)data.lastNode;
-	}
-
-	@Override
-	public void remove()
-	{
-		if (data == null)
-		{
-			throw new IllegalStateException("Already reached the end of the iterator.");
-		}
-
-		data.remove();
-	}
-
-	/**
-	 * Skip all remaining siblings and return to the parent node.
-	 * <p>
-	 * Can as well be called within {@link IteratorFilter#onFilter(Object)}.
-	 */
-	public void skipRemainingSiblings()
-	{
-		skipRemainingSiblings = true;
-		traverse = false;
-	}
-
-	/**
-	 * Assuming we are currently at a container, than ignore all its children and grand-children and
-	 * continue with the next sibling.
-	 * <p>
-	 * Can as well be called within {@link IteratorFilter#onFilter(Object)}.
-	 */
-	public void dontGoDeeper()
-	{
-		traverse = false;
-	}
-
-	@Override
-	public final Iterator<I> iterator()
-	{
-		return this;
-	}
-
-	@Override
-	public String toString()
-	{
-		StringBuilder msg = new StringBuilder(500);
-		msg.append("traverse=")
-			.append(traverse)
-			.append("; childFirst=")
-			.append(childFirst)
-			.append("; hasNextWasLast=")
-			.append(hasNextWasLast)
-			.append('\n');
-
-		msg.append("data.node=")
-			.append(data.node)
-			.append('\n')
-			.append("data.lastNode=")
-			.append(data.lastNode)
-			.append('\n');
-
-		msg.append("stack.size=").append(stack.size());
-
-		return msg.toString();
-	}
-
-	/**
-	 * We need a little helper to store the iterator of the level and the last node returned by
-	 * next().
-	 * 
-	 * @param <N>
-	 */
-	private static class LevelIterator<N> implements Iterator<N>
-	{
-		private final N node;
-
-		private final Iterator<N> iter;
-
-		private N lastNode;
-
-		/**
-		 * Construct.
-		 * 
-		 * @param node
-		 *            For debugging purposes only
-		 * @param iter
-		 *            The iterator for 'node'
-		 */
-		public LevelIterator(final N node, final Iterator<N> iter)
-		{
-			Args.notNull(iter, "iter");
-
-			this.node = node;
-			this.iter = iter;
-		}
-
-		@Override
-		public boolean hasNext()
-		{
-			return iter.hasNext();
-		}
-
-		@Override
-		public N next()
-		{
-			lastNode = iter.next();
-			return lastNode;
-		}
-
-		@Override
-		public void remove()
-		{
-			iter.remove();
-		}
-
-		@Override
-		public String toString()
-		{
-			StringBuilder msg = new StringBuilder(500);
-			msg.append("node=")
-				.append(node)
-				.append('\n')
-				.append("lastNode=")
-				.append(lastNode)
-				.append('\n');
-
-			return msg.toString();
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorWithFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorWithFilter.java b/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorWithFilter.java
deleted file mode 100644
index 25a4c81..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorWithFilter.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.iterator;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.wicket.util.lang.Args;
-import org.apache.wicket.util.lang.Generics;
-
-/**
- * Extend {@link AbstractHierarchyIterator} and add support for filters.
- * 
- * @author Juergen Donnerstag
- * @param <N>
- * @param <I>
- * @deprecated Hierarchy iterators are deprecated because they have problems with pages with
- *      deep component tree. Use {@link org.apache.wicket.util.visit.IVisitor} instead.
- * @see org.apache.wicket.MarkupContainer#visitChildren(org.apache.wicket.util.visit.IVisitor)
- * @see org.apache.wicket.MarkupContainer#visitChildren(Class, org.apache.wicket.util.visit.IVisitor)
- */
-@Deprecated
-public abstract class AbstractHierarchyIteratorWithFilter<N, I extends N> extends
-	AbstractHierarchyIterator<N, I>
-{
-	// The list of user provided filters
-	private List<IteratorFilter<N>> filters;
-
-	// List of traversal filters
-	private List<IteratorFilter<N>> traverseFilter;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param root
-	 */
-	public AbstractHierarchyIteratorWithFilter(final N root)
-	{
-		super(root);
-	}
-
-	/**
-	 * Apply all registered filters
-	 * 
-	 * @param node
-	 * @return False, to filter the component. True, to continue processing the component.
-	 */
-	@Override
-	protected final boolean onFilter(final N node)
-	{
-		if (filters != null)
-		{
-			for (IteratorFilter<N> filter : filters)
-			{
-				if (filter.onFilter(node) == false)
-				{
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * @return Gets the List of all registered filters. A new list will be created if no filter has
-	 *         been registered yet (never return null).
-	 */
-	public final List<IteratorFilter<N>> getFilters()
-	{
-		if (filters == null)
-		{
-			filters = Generics.newArrayList();
-		}
-
-		return filters;
-	}
-
-	/**
-	 * Add a filter (fluent API)
-	 * 
-	 * @param filter
-	 * @return this
-	 */
-	public AbstractHierarchyIteratorWithFilter<N, I> addFilter(final IteratorFilter<N> filter)
-	{
-		Args.notNull(filter, "filter");
-
-		getFilters().add(filter);
-		return this;
-	}
-
-	/**
-	 * Replace the current set of filters. Sometimes you need to first find X to than start
-	 * searching for Y.
-	 * 
-	 * @param filters
-	 *            New filter set. May be null to remove all filters.
-	 * @return Old filter set. Null, if no filter was registered.
-	 */
-	public Collection<IteratorFilter<N>> replaceFilterSet(
-		final Collection<IteratorFilter<N>> filters)
-	{
-		List<IteratorFilter<N>> old = this.filters;
-
-		this.filters = null;
-		if ((filters != null) && !filters.isEmpty())
-		{
-			for (IteratorFilter<N> filter : filters)
-			{
-				addFilter(filter);
-			}
-		}
-
-		return old;
-	}
-
-	/**
-	 * @param throwException
-	 *            If true, an exception is thrown if no matching element was found.
-	 * @return Find the the first element matching all filters
-	 */
-	public final I getFirst(final boolean throwException)
-	{
-		if (hasNext())
-		{
-			return next();
-		}
-
-		if (throwException)
-		{
-			throw new IllegalStateException("Iterator did not match any component");
-		}
-
-		return null;
-	}
-
-	/**
-	 * 
-	 * @return Gets all elements matching the filters in a list
-	 */
-	public final List<I> toList()
-	{
-		List<I> list = Generics.newArrayList();
-		for (I component : this)
-		{
-			list.add(component);
-		}
-
-		return list;
-	}
-
-	/**
-	 * @return Gets the List of all registered traversal filters. A new list will be created if no
-	 *         traversal filter has been registered yet (never return null).
-	 */
-	public final List<IteratorFilter<N>> getTraverseFilters()
-	{
-		if (traverseFilter == null)
-		{
-			traverseFilter = Generics.newArrayList();
-		}
-
-		return traverseFilter;
-	}
-
-	/**
-	 * Add a filter to the traversal filter list (fluent API).
-	 * 
-	 * @param filter
-	 * @return this
-	 */
-	public AbstractHierarchyIteratorWithFilter<N, I> addTraverseFilters(
-		final IteratorFilter<N> filter)
-	{
-		getTraverseFilters().add(filter);
-		return this;
-	}
-
-	/**
-	 * Apply all registered traversal filters
-	 * 
-	 * @param node
-	 * @return False, to filter the element. True, to continue processing the component.
-	 */
-	@Override
-	protected boolean onTraversalFilter(final N node)
-	{
-		if (traverseFilter != null)
-		{
-			for (IteratorFilter<N> filter : traverseFilter)
-			{
-				if (filter.onFilter(node) == false)
-				{
-					return false;
-				}
-			}
-		}
-
-		return true;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/main/java/org/apache/wicket/util/iterator/ComponentHierarchyIterator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/iterator/ComponentHierarchyIterator.java b/wicket-core/src/main/java/org/apache/wicket/util/iterator/ComponentHierarchyIterator.java
deleted file mode 100644
index 66a60ba..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/iterator/ComponentHierarchyIterator.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * 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.iterator;
-
-import java.util.Iterator;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.util.lang.Args;
-
-/**
- * Iterator over the complete Component hierarchy. The implementation is parent first, meaning that
- * first the parent gets returned upon next() and only than it's children.
- * <p>
- * A fluent or builder type of API is provided to configure the iterator with filters.
- * 
- * @author Juergen Donnerstag
- * @deprecated Hierarchy iterators are deprecated because they have problems with pages with
- *      deep component tree. Use {@link org.apache.wicket.util.visit.IVisitor} instead.
- * @see org.apache.wicket.MarkupContainer#visitChildren(org.apache.wicket.util.visit.IVisitor)
- * @see org.apache.wicket.MarkupContainer#visitChildren(Class, org.apache.wicket.util.visit.IVisitor)
- */
-@Deprecated
-public class ComponentHierarchyIterator extends
-	AbstractHierarchyIteratorWithFilter<Component, Component>
-{
-	/**
-	 * Construct.
-	 * 
-	 * @param component
-	 *            Iterate over the containers children
-	 */
-	public ComponentHierarchyIterator(final Component component)
-	{
-		super(component);
-	}
-
-	/**
-	 * Convenience Constructor
-	 * 
-	 * @param component
-	 *            Iterate over the containers children
-	 * @param clazz
-	 *            Add filter by class
-	 * @param visible
-	 *            Add filter by visibility
-	 * @param enabled
-	 *            Add filter by "enabled"
-	 */
-	public ComponentHierarchyIterator(final Component component, Class<?> clazz, boolean visible,
-		boolean enabled)
-	{
-		this(component);
-
-		if (clazz != null)
-		{
-			filterByClass(clazz);
-		}
-
-		if (visible)
-		{
-			filterByVisibility();
-		}
-
-		if (enabled)
-		{
-			filterEnabled();
-		}
-	}
-
-	/**
-	 * Convenience Constructor
-	 * 
-	 * @param component
-	 *            Iterate over the containers children
-	 * @param clazz
-	 *            Add filter by class
-	 */
-	public ComponentHierarchyIterator(final Component component, Class<?> clazz)
-	{
-		this(component, clazz, false, false);
-	}
-
-	/**
-	 * The component must be a MarkupContainer to contain children
-	 */
-	@Override
-	protected Iterator<Component> newIterator(final Component node)
-	{
-		return ((MarkupContainer)node).iterator();
-	}
-
-	/**
-	 * Only MarkupContainer's might have children
-	 */
-	@Override
-	protected boolean hasChildren(Component elem)
-	{
-		if (elem instanceof MarkupContainer)
-		{
-			return ((MarkupContainer)elem).size() > 0;
-		}
-		return false;
-	}
-
-	/**
-	 * Add a filter which returns only leaf components.
-	 * 
-	 * @return this
-	 */
-	public final ComponentHierarchyIterator filterLeavesOnly()
-	{
-		getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(final Component component)
-			{
-				if (component instanceof MarkupContainer)
-				{
-					return ((MarkupContainer)component).size() == 0;
-				}
-				return true;
-			}
-		});
-
-		return this;
-	}
-
-	/**
-	 * Ignore components which don't implement (instanceof) the class provided.
-	 * 
-	 * @param clazz
-	 * @return this
-	 */
-	public ComponentHierarchyIterator filterByClass(final Class<?> clazz)
-	{
-		if (clazz != null)
-		{
-			getFilters().add(new IteratorFilter<Component>()
-			{
-				@Override
-				protected boolean onFilter(Component component)
-				{
-					return clazz.isInstance(component);
-				}
-			});
-		}
-
-		return this;
-	}
-
-	/**
-	 * Ignore all Components which not visible.
-	 * 
-	 * @return this
-	 */
-	public ComponentHierarchyIterator filterByVisibility()
-	{
-		IteratorFilter<Component> filter = new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.isVisibleInHierarchy();
-			}
-		};
-
-		addFilter(filter);
-		addTraverseFilters(filter);
-
-		return this;
-	}
-
-	/**
-	 * Ignore all Components which not enabled (disabled) in the hierarchy
-	 * 
-	 * @return this
-	 */
-	public ComponentHierarchyIterator filterEnabled()
-	{
-		IteratorFilter<Component> filter = new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.isEnabledInHierarchy();
-			}
-		};
-
-		addFilter(filter);
-		addTraverseFilters(filter);
-
-		return this;
-	}
-
-	/**
-	 * Ignore all components which don't match the id (regex).
-	 * 
-	 * @param match
-	 *            Regex to find Components matching
-	 * @return this
-	 */
-	public ComponentHierarchyIterator filterById(final String match)
-	{
-		Args.notEmpty(match, "match");
-
-		getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.getId().matches(match);
-			}
-		});
-
-		return this;
-	}
-
-	@Override
-	public ComponentHierarchyIterator addFilter(final IteratorFilter<Component> filter)
-	{
-		super.addFilter(filter);
-		return this;
-	}
-
-	@Override
-	public ComponentHierarchyIterator addTraverseFilters(IteratorFilter<Component> filter)
-	{
-		super.addTraverseFilters(filter);
-		return this;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/main/java/org/apache/wicket/util/iterator/GenericComponentHierarchyIterator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/iterator/GenericComponentHierarchyIterator.java b/wicket-core/src/main/java/org/apache/wicket/util/iterator/GenericComponentHierarchyIterator.java
deleted file mode 100644
index 2f623d8..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/iterator/GenericComponentHierarchyIterator.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * 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.iterator;
-
-import java.util.Iterator;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.util.lang.Args;
-
-/**
- * Iterator over the complete Component hierarchy. The implementation is parent first, meaning that
- * first the parent gets returned upon next() and only than it's children.
- * <p>
- * A fluent or builder type of API is provided to configure the iterator with filters.
- * 
- * @author Juergen Donnerstag
- * @param <I>
- *            The type which next() should return (the iterator type)
- * @deprecated Hierarchy iterators are deprecated because they have problems with pages with
- *      deep component tree. Use {@link org.apache.wicket.util.visit.IVisitor} instead.
- * @see org.apache.wicket.MarkupContainer#visitChildren(org.apache.wicket.util.visit.IVisitor)
- * @see org.apache.wicket.MarkupContainer#visitChildren(Class, org.apache.wicket.util.visit.IVisitor)
- */
-@Deprecated
-public class GenericComponentHierarchyIterator<I extends Component> extends
-	AbstractHierarchyIteratorWithFilter<Component, I>
-{
-	/**
-	 * Construct.
-	 * 
-	 * @param component
-	 *            Iterate over the containers children
-	 * @param clazz
-	 *            Must be the same as the iterator type provided
-	 */
-	public GenericComponentHierarchyIterator(final Component component,
-		final Class<? extends I> clazz)
-	{
-		super(component);
-
-		Args.notNull(clazz, "clazz");
-		filterByClass(clazz);
-	}
-
-	/**
-	 * The component must be a MarkupContainer to contain children
-	 */
-	@Override
-	protected Iterator<Component> newIterator(final Component node)
-	{
-		return ((MarkupContainer)node).iterator();
-	}
-
-	/**
-	 * Only MarkupContainer's might have children
-	 */
-	@Override
-	protected boolean hasChildren(Component elem)
-	{
-		if (elem instanceof MarkupContainer)
-		{
-			return ((MarkupContainer)elem).size() > 0;
-		}
-		return false;
-	}
-
-	/**
-	 * Add a filter which returns only leaf components.
-	 * 
-	 * @return this
-	 */
-	public final GenericComponentHierarchyIterator<I> filterLeavesOnly()
-	{
-		getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(final Component component)
-			{
-				if (component instanceof MarkupContainer)
-				{
-					return ((MarkupContainer)component).size() == 0;
-				}
-				return true;
-			}
-		});
-
-		return this;
-	}
-
-	/**
-	 * Ignore components which don't implement (instanceof) the class provided.
-	 * 
-	 * @param clazz
-	 * @return this
-	 */
-	public GenericComponentHierarchyIterator<I> filterByClass(final Class<?> clazz)
-	{
-		if (clazz != null)
-		{
-			getFilters().add(new IteratorFilter<Component>()
-			{
-				@Override
-				protected boolean onFilter(Component component)
-				{
-					return clazz.isInstance(component);
-				}
-			});
-		}
-
-		return this;
-	}
-
-	/**
-	 * Ignore all Components which not visible.
-	 * 
-	 * @return this
-	 */
-	public GenericComponentHierarchyIterator<I> filterByVisibility()
-	{
-		IteratorFilter<Component> filter = new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.isVisibleInHierarchy();
-			}
-		};
-
-		addFilter(filter);
-		addTraverseFilters(filter);
-
-		return this;
-	}
-
-	/**
-	 * Ignore all Components which not enabled (disabled) in the hierarchy
-	 * 
-	 * @return this
-	 */
-	public GenericComponentHierarchyIterator<I> filterEnabled()
-	{
-		IteratorFilter<Component> filter = new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.isEnabledInHierarchy();
-			}
-		};
-
-		addFilter(filter);
-		addTraverseFilters(filter);
-
-		return this;
-	}
-
-	/**
-	 * Ignore all components which don't match the id (regex).
-	 * 
-	 * @param match
-	 *            Regex to find Components matching
-	 * @return this
-	 */
-	public GenericComponentHierarchyIterator<I> filterById(final String match)
-	{
-		Args.notEmpty(match, "match");
-
-		getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.getId().matches(match);
-			}
-		});
-
-		return this;
-	}
-
-	@Override
-	public GenericComponentHierarchyIterator<I> addFilter(final IteratorFilter<Component> filter)
-	{
-		super.addFilter(filter);
-		return this;
-	}
-
-	@Override
-	public GenericComponentHierarchyIterator<I> addTraverseFilters(IteratorFilter<Component> filter)
-	{
-		super.addTraverseFilters(filter);
-		return this;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/main/java/org/apache/wicket/util/iterator/IteratorFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/iterator/IteratorFilter.java b/wicket-core/src/main/java/org/apache/wicket/util/iterator/IteratorFilter.java
deleted file mode 100644
index 1037f73..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/util/iterator/IteratorFilter.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.iterator;
-
-
-/**
- * A simple filter interface for the hierarchy iterator.
- * 
- * @author Juergen Donnerstag
- * @param <S>
- */
-public abstract class IteratorFilter<S>
-{
-	/**
-	 * 
-	 * @param node
-	 * @return false, to filter the component. True, to continue processing the node.
-	 */
-	abstract protected boolean onFilter(S node);
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java b/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
deleted file mode 100644
index dd31779..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * 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.iterator;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.Test;
-
-/**
- * 
- */
-public class AbstractHierarchyIteratorTest extends WicketTestCase
-{
-	/** */
-	@Test(expected = IllegalArgumentException.class)
-	public void nullParent()
-	{
-		new ComponentHierarchyIterator(null);
-	}
-
-	/** */
-	@Test
-	public void emptyParent()
-	{
-		Page page = new MyPage();
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void withComponent()
-	{
-		WebComponent comp = new WebComponent("id");
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(comp);
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void multipleRemoves()
-	{
-	}
-
-	/** */
-	@Test
-	public void multipleHasNext()
-	{
-	}
-
-	/** */
-	@Test
-	public void multipleNext()
-	{
-	}
-
-	/** */
-	@Test
-	public void parentWithSomeClients()
-	{
-		Page page = new MyPage();
-		page.add(new WebComponent("1"));
-		page.add(new WebMarkupContainer("2"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("2", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachy()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b21;
-		b2.add(b21 = new WebMarkupContainer("b21"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b21", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachyDifferentOrder()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b12", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b121", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void skip()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		iter.skipRemainingSiblings();
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void skip2()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-		WebComponent c;
-		page.add(c = new WebComponent("c"));
-
-		// Filter leaf components only
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		iter.skipRemainingSiblings();
-		assertTrue(iter.hasNext());
-		assertEquals("c", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void foreach()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		int count = 0;
-		String buf = "";
-		for (Component component : new ComponentHierarchyIterator(page))
-		{
-			count += 1;
-			buf += component.getId();
-		}
-
-		assertEquals(6, count);
-		assertEquals("abb1b12b121b2", buf);
-	}
-
-	/** */
-	@Test
-	public void foreachDontGoDeeper()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		int count = 0;
-		String buf = "";
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		while (iter.hasNext())
-		{
-			Component component = iter.next();
-			count += 1;
-			buf += component.getId();
-			if ("b1".equals(component.getId()))
-			{
-				iter.dontGoDeeper();
-			}
-		}
-
-		assertEquals(4, count);
-		assertEquals("abb1b2", buf);
-	}
-
-	/** */
-	@Test
-	public void childFirst()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		int count = 0;
-		StringBuilder buf = new StringBuilder();
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		iter.setChildFirst(true);
-		while (iter.hasNext())
-		{
-			Component component = iter.next();
-			count += 1;
-			if (buf.length() > 0)
-			{
-				buf.append(Component.PATH_SEPARATOR);
-			}
-			buf.append(component.getId());
-		}
-
-		assertEquals(6, count);
-		assertEquals("a:b121:b12:b1:b2:b", buf.toString());
-	}
-
-	/** */
-	public static class MyPage extends WebPage
-	{
-		private static final long serialVersionUID = 1L;
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3cc60fff/wicket-core/src/test/java/org/apache/wicket/util/iterator/ComponentIteratorTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/iterator/ComponentIteratorTest.java b/wicket-core/src/test/java/org/apache/wicket/util/iterator/ComponentIteratorTest.java
deleted file mode 100644
index cafd396..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/util/iterator/ComponentIteratorTest.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * 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.iterator;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.Test;
-
-/**
- * 
- */
-public class ComponentIteratorTest extends WicketTestCase
-{
-	/** */
-	public static class MyPage extends WebPage
-	{
-		private static final long serialVersionUID = 1L;
-	}
-
-	/** */
-	@Test(expected = IllegalArgumentException.class)
-	public void nullParent()
-	{
-		new ComponentHierarchyIterator(null);
-	}
-
-	/** */
-	@Test
-	public void emptyParent()
-	{
-		Page page = new MyPage();
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void withComponent()
-	{
-		WebComponent comp = new WebComponent("id");
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(comp);
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void multipleRemoves()
-	{
-	}
-
-	/** */
-	@Test
-	public void multipleHasNext()
-	{
-	}
-
-	/** */
-	@Test
-	public void multipleNext()
-	{
-	}
-
-	/** */
-	@Test
-	public void parentWithSomeClients()
-	{
-		Page page = new MyPage();
-		page.add(new WebComponent("1"));
-		page.add(new WebMarkupContainer("2"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("2", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void parentWithSomeClientsAndSimpleClassFilterFluent()
-	{
-		Page page = new MyPage();
-		page.add(new WebComponent("1"));
-		page.add(new WebMarkupContainer("2"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).filterByClass(MarkupContainer.class);
-		assertTrue(iter.hasNext());
-		assertEquals("2", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void checkIsVisibleFluent()
-	{
-		Page page = new MyPage();
-		page.add(new WebComponent("1"));
-		page.add(new WebMarkupContainer("2").setVisible(false));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).filterByVisibility();
-		assertTrue(iter.hasNext());
-		assertEquals("1", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void userFilter()
-	{
-		Page page = new MyPage();
-		page.add(new WebComponent("a"));
-		page.add(new WebMarkupContainer("2").setVisible(false));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).addFilter(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component comp)
-			{
-				return comp.getId().startsWith("a");
-			}
-		});
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachy()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b21;
-		b2.add(b21 = new WebMarkupContainer("b21"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b21", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachyDifferentOrder()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b12", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b121", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachyWithFilter()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		iter.addFilter(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component component)
-			{
-				return component.getId().endsWith("2");
-			}
-		});
-
-		assertTrue(iter.hasNext());
-		assertEquals("b12", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachyWithFilterAndNoMatch()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		iter.addFilter(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component component)
-			{
-				return component.getId().endsWith("x");
-			}
-		});
-
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void simpleHierachyWithLeafFilter()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).filterLeavesOnly();
-		iter.getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component component)
-			{
-				return component.getId().endsWith("2");
-			}
-		});
-
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void traversalFilter()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		b1.setVisible(false);
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).filterByVisibility();
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void traversalFilterChain()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		b1.setVisible(false);
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page).filterLeavesOnly()
-			.filterByVisibility();
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void skip()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		final ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		iter.getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component component)
-			{
-				if ("b1".equals(component.getId()))
-				{
-					iter.skipRemainingSiblings();
-					// fall through and return true => available via next()
-				}
-				return true;
-			}
-		});
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void skip2()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		final ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		iter.getFilters().add(new IteratorFilter<Component>()
-		{
-			@Override
-			protected boolean onFilter(Component component)
-			{
-				if ("b1".equals(component.getId()))
-				{
-					iter.skipRemainingSiblings();
-					// return false => not available via next()
-					return false;
-				}
-				return true;
-			}
-		});
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void skip3()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-
-		assertTrue(iter.hasNext());
-		assertEquals("a", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		iter.skipRemainingSiblings();
-		assertFalse(iter.hasNext());
-	}
-
-	/** */
-	@Test
-	public void foreach()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		int count = 0;
-		String buf = "";
-		for (Component component : new ComponentHierarchyIterator(page))
-		{
-			count += 1;
-			buf += component.getId();
-		}
-
-		assertEquals(6, count);
-		assertEquals("abb1b12b121b2", buf);
-	}
-
-	/** */
-	@Test
-	public void foreachDontGoDeeper()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebMarkupContainer b121;
-		b12.add(b121 = new WebMarkupContainer("b121"));
-
-		// Filter leaf components only
-		int count = 0;
-		String buf = "";
-		ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
-		while (iter.hasNext())
-		{
-			Component component = iter.next();
-			count += 1;
-			buf += component.getId();
-			if ("b1".equals(component.getId()))
-			{
-				iter.dontGoDeeper();
-			}
-		}
-
-		assertEquals(4, count);
-		assertEquals("abb1b2", buf);
-	}
-
-	/** */
-	@Test
-	public void classFilter()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebComponent b121;
-		b12.add(b121 = new WebComponent("b121"));
-
-		GenericComponentHierarchyIterator<MarkupContainer> iter = new GenericComponentHierarchyIterator<MarkupContainer>(
-			page, MarkupContainer.class);
-
-		assertTrue(iter.hasNext());
-		assertEquals("b", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b1", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b12", iter.next().getId());
-		assertTrue(iter.hasNext());
-		assertEquals("b2", iter.next().getId());
-		assertFalse(iter.hasNext());
-		assertNull(iter.next());
-	}
-
-	/** */
-	@Test
-	public void classFilterWithForeach()
-	{
-		Page page = new MyPage();
-		WebComponent a;
-		page.add(a = new WebComponent("a"));
-		WebMarkupContainer b;
-		page.add(b = new WebMarkupContainer("b"));
-		WebMarkupContainer b1;
-		b.add(b1 = new WebMarkupContainer("b1"));
-		WebMarkupContainer b2;
-		b.add(b2 = new WebMarkupContainer("b2"));
-		WebMarkupContainer b12;
-		b1.add(b12 = new WebMarkupContainer("b12"));
-		WebComponent b121;
-		b12.add(b121 = new WebComponent("b121"));
-
-		String buf = "";
-		for (MarkupContainer container : new GenericComponentHierarchyIterator<MarkupContainer>(
-			page, MarkupContainer.class))
-		{
-			buf += container.getId();
-		}
-
-		assertEquals("bb1b12b2", buf);
-	}
-
-	/** */
-	@Test
-	public void classFilterWrongClass()
-	{
-		Page page = new MyPage();
-
-		// This is ok. It'll return only Form components, though the next() return type is
-		// MarkupContainer
-		new GenericComponentHierarchyIterator<MarkupContainer>(page, Form.class);
-
-		// Compile Time error
-		// new GenericComponentHierarchyIterator<Form>(page, MarkupContainer.class);
-	}
-}


[2/3] wicket git commit: Remove obsolete javadoc. #convertInput() is no more final

Posted by mg...@apache.org.
Remove obsolete javadoc. #convertInput() is no more final


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

Branch: refs/heads/master
Commit: 588e51d2926cc245deb108248d6052a86573abb3
Parents: 3cc60ff
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Mar 13 20:09:24 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Mar 13 20:09:24 2016 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/markup/html/form/CheckBox.java | 6 ------
 1 file changed, 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/588e51d2/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
index 310ccc9..64d298f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
@@ -184,12 +184,6 @@ public class CheckBox extends FormComponent<Boolean> implements IOnChangeListene
 		super.onComponentTag(tag);
 	}
 
-	/**
-	 * Final because we made {@link #convertInput()} final and it no longer delegates to
-	 * {@link #getConverter(Class)}
-	 * 
-	 * @see org.apache.wicket.Component#getConverter(java.lang.Class)
-	 */
 	@Override
 	public final <C> IConverter<C> getConverter(Class<C> type)
 	{


[3/3] wicket git commit: Replace usage of AbstractReadOnlyModel with IModel to reduce the number of compilation warnings.

Posted by mg...@apache.org.
Replace usage of AbstractReadOnlyModel with IModel to reduce the number of compilation warnings.

Explicitly override #setObject() in non-anonymous classes to make it 'final'


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

Branch: refs/heads/master
Commit: 62e6be7569e0ab9912b930e80fae9a62c162bace
Parents: 588e51d
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Mar 13 20:39:22 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Mar 13 20:39:22 2016 +0100

----------------------------------------------------------------------
 .../html/form/upload/MultiFileUploadField.java  |  7 +-----
 .../wicket/markup/html/list/ListItemModel.java  | 10 +++++++--
 .../markup/html/pages/BrowserInfoPage.java      |  3 +--
 .../wicket/markup/html/panel/FeedbackPanel.java |  3 +--
 .../wicket/model/ComponentPropertyModel.java    | 16 +++++++-------
 .../org/apache/wicket/model/ResourceModel.java  | 22 ++++++-------------
 .../wicket/model/lambda/SupplierModel.java      | 10 +++++++--
 .../java/org/apache/wicket/ajax/HomePage.java   |  4 ++--
 .../wicket/dontstoreunrendered/BasePage.java    |  4 ++--
 .../innerfeedback/LocalizedFeedbackBorder.java  |  6 ++---
 .../markup/html/link/DownloadLinkTest.java      |  6 ++---
 .../apache/wicket/model/ModelToStringTest.java  |  5 +----
 .../WicketTesterLazyIsPageStatelessBase.java    |  4 ++--
 .../extensions/yui/calendar/DatesPage1.java     |  6 ++---
 .../wicket/devutils/debugbar/DebugBar.java      |  4 ++--
 .../devutils/debugbar/PageSizeDebugPanel.java   |  5 ++---
 .../debugbar/SessionSizeDebugPanel.java         |  4 +---
 .../debugbar/VersionDebugContributor.java       |  4 ++--
 .../devutils/inspector/LiveSessionsPage.java    |  5 ++---
 .../wicket/devutils/inspector/RequestsPage.java | 10 ++++-----
 .../devutils/inspector/SessionSizeModel.java    |  4 ++--
 .../examples/ajax/builtin/ChoicePage.java       |  5 ++---
 .../wicket/examples/ajax/builtin/Clock.java     |  9 +++-----
 .../ajax/builtin/EditableLabelPage.java         | 17 +++++----------
 .../examples/ajax/builtin/FileUploadPage.java   |  4 ++--
 .../ajaxhellobrowser/AjaxHelloBrowser.java      |  5 ++---
 .../apache/wicket/examples/dates/DatesPage.java |  6 ++---
 .../apache/wicket/examples/guice/HomePage.java  | 18 +++++----------
 .../examples/hellobrowser/HelloBrowser.java     |  6 +----
 .../wicket/examples/homepage/HomePage.java      |  9 ++------
 .../apache/wicket/examples/linkomatic/Home.java | 13 +++++------
 .../wicket/examples/repeater/OIRPage.java       |  3 +--
 .../wicket/examples/repeater/PagingPage.java    |  4 ++--
 .../examples/repeater/RefreshingPage.java       |  3 +--
 .../wicket/examples/repeater/RepeatingPage.java |  4 ++--
 .../wicket/examples/repeater/SimplePage.java    |  4 ++--
 .../wicket/examples/repeater/SortingPage.java   |  4 ++--
 .../wicket/examples/source/SourcesPage.java     |  6 ++---
 .../wicket/examples/stateless/SessionModel.java | 10 ++-------
 .../examples/stockquote/StockQuoteLabel2.java   |  6 ++---
 .../wicket/examples/tree/AdvancedTreePage.java  |  3 +--
 .../tree/content/MultiLineLabelContent.java     |  5 ++---
 .../markup/html/AjaxEditableChoiceLabel.java    |  5 +----
 .../markup/html/AjaxEditableMultiLineLabel.java | 23 ++------------------
 .../captcha/kittens/KittenCaptchaPanel.java     | 19 +++++++---------
 .../repeater/data/table/NavigationToolbar.java  |  6 ++---
 .../repeater/data/table/NoRecordsToolbar.java   |  3 +--
 .../data/table/export/ExportToolbar.java        |  4 ++--
 .../data/table/filter/FilterToolbar.java        |  3 +--
 .../markup/html/repeater/tree/NestedTree.java   |  3 +--
 .../html/repeater/util/ProviderSubset.java      |  7 ++----
 .../markup/html/tabs/TabbedPanel.java           |  5 ++---
 .../wicket/extensions/wizard/WizardStep.java    | 23 ++------------------
 .../src/docs/guide/i18n/i18n_2.gdoc             |  4 ++--
 54 files changed, 142 insertions(+), 249 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
index 97accf4..7138c75 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.java
@@ -34,7 +34,6 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.http.IMultipartWebRequest;
@@ -371,14 +370,10 @@ public class MultiFileUploadField extends FormComponentPanel<Collection<FileUplo
 	 * 
 	 * @author ivaynberg
 	 */
-	private class CaptionModel extends AbstractReadOnlyModel<String>
+	private class CaptionModel implements IModel<String>
 	{
-
 		private static final long serialVersionUID = 1L;
 
-		/**
-		 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-		 */
 		@Override
 		public String getObject()
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java
index 173c2e5..42d8969 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListItemModel.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.markup.html.list;
 
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * Model for list items.
@@ -25,7 +25,7 @@ import org.apache.wicket.model.AbstractReadOnlyModel;
  * @param <T>
  *            Model object type
  */
-public class ListItemModel<T> extends AbstractReadOnlyModel<T>
+public class ListItemModel<T> implements IModel<T>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -54,4 +54,10 @@ public class ListItemModel<T> extends AbstractReadOnlyModel<T>
 	{
 		return listView.getModelObject().get(index);
 	}
+
+	@Override
+	public final void setObject(T object)
+	{
+		IModel.super.setObject(object);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
index 29c3f51..e7143d7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/pages/BrowserInfoPage.java
@@ -21,7 +21,6 @@ import org.apache.wicket.markup.head.MetaDataHeaderItem;
 import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.ClientProperties;
 import org.apache.wicket.protocol.http.WebSession;
@@ -76,7 +75,7 @@ public class BrowserInfoPage extends WebPage
 	 */
 	private void initComps()
 	{
-		IModel<ClientProperties> properties = new AbstractReadOnlyModel<ClientProperties>()
+		IModel<ClientProperties> properties = new IModel<ClientProperties>()
 		{
 			@Override
 			public ClientProperties getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java
index d17ba9f..3567cbe 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FeedbackPanel.java
@@ -31,7 +31,6 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 
 
@@ -66,7 +65,7 @@ public class FeedbackPanel extends Panel implements IFeedback
 		protected IModel<FeedbackMessage> getListItemModel(
 			final IModel<? extends List<FeedbackMessage>> listViewModel, final int index)
 		{
-			return new AbstractReadOnlyModel<FeedbackMessage>()
+			return new IModel<FeedbackMessage>()
 			{
 				private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/model/ComponentPropertyModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/ComponentPropertyModel.java b/wicket-core/src/main/java/org/apache/wicket/model/ComponentPropertyModel.java
index 51eeda7..545e480 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/ComponentPropertyModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/ComponentPropertyModel.java
@@ -28,9 +28,7 @@ import org.apache.wicket.core.util.lang.PropertyResolver;
  * @param <T>
  *            The Model object
  */
-public class ComponentPropertyModel<T> extends AbstractReadOnlyModel<T>
-	implements
-		IComponentAssignedModel<T>
+public class ComponentPropertyModel<T> implements IComponentAssignedModel<T>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -48,15 +46,18 @@ public class ComponentPropertyModel<T> extends AbstractReadOnlyModel<T>
 		this.propertyName = propertyName;
 	}
 
-	/**
-	 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-	 */
 	@Override
 	public T getObject()
 	{
 		throw new IllegalStateException("Wrapper should have been called");
 	}
 
+	@Override
+	public final void setObject(T object)
+	{
+		IComponentAssignedModel.super.setObject(object);
+	}
+
 	/**
 	 * @see org.apache.wicket.model.IComponentAssignedModel#wrapOnAssignment(org.apache.wicket.Component)
 	 */
@@ -72,7 +73,7 @@ public class ComponentPropertyModel<T> extends AbstractReadOnlyModel<T>
 	 * @param <P>
 	 *            The Model Object
 	 */
-	private class AssignmentWrapper<P> extends AbstractReadOnlyModel<P> implements IWrapModel<P>
+	private class AssignmentWrapper<P> implements IWrapModel<P>
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -112,7 +113,6 @@ public class ComponentPropertyModel<T> extends AbstractReadOnlyModel<T>
 		@Override
 		public void detach()
 		{
-			super.detach();
 			ComponentPropertyModel.this.detach();
 		}
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/model/ResourceModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/ResourceModel.java b/wicket-core/src/main/java/org/apache/wicket/model/ResourceModel.java
index 85ec0db..4aac37a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/ResourceModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/ResourceModel.java
@@ -30,9 +30,7 @@ import org.apache.wicket.Component;
  * @author Igor Vaynberg (ivaynberg)
  * 
  */
-public class ResourceModel extends AbstractReadOnlyModel<String>
-	implements
-		IComponentAssignedModel<String>
+public class ResourceModel implements IComponentAssignedModel<String>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -71,9 +69,6 @@ public class ResourceModel extends AbstractReadOnlyModel<String>
 		this.defaultValue = defaultValue;
 	}
 
-	/**
-	 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-	 */
 	@Override
 	public String getObject()
 	{
@@ -84,18 +79,18 @@ public class ResourceModel extends AbstractReadOnlyModel<String>
 			.getString(resourceKey, null, null, null, null, defaultValue);
 	}
 
-	/**
-	 * @see org.apache.wicket.model.IComponentAssignedModel#wrapOnAssignment(org.apache.wicket.Component)
-	 */
+	@Override
+	public final void setObject(String object)
+	{
+		IComponentAssignedModel.super.setObject(object);
+	}
+
 	@Override
 	public IWrapModel<String> wrapOnAssignment(final Component component)
 	{
 		return new AssignmentWrapper(component);
 	}
 
-	/**
-	 * 
-	 */
 	private class AssignmentWrapper extends LoadableDetachableModel<String>
 		implements
 			IWrapModel<String>
@@ -114,9 +109,6 @@ public class ResourceModel extends AbstractReadOnlyModel<String>
 			this.component = component;
 		}
 
-		/**
-		 * @see org.apache.wicket.model.IWrapModel#getWrappedModel()
-		 */
 		@Override
 		public IModel<String> getWrappedModel()
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
index 9b4d0bd..68866d8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/model/lambda/SupplierModel.java
@@ -18,7 +18,7 @@ package org.apache.wicket.model.lambda;
 
 import java.util.Objects;
 
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -27,7 +27,7 @@ import org.apache.wicket.util.lang.Args;
  * @param <T>
  *            - type of the model object
  */
-public class SupplierModel<T> extends AbstractReadOnlyModel<T>
+public class SupplierModel<T> implements IModel<T>
 {
 	/**
 	 * Supplies the model object.
@@ -53,6 +53,12 @@ public class SupplierModel<T> extends AbstractReadOnlyModel<T>
 	}
 
 	@Override
+	public final void setObject(T object)
+	{
+		IModel.super.setObject(object);
+	}
+
+	@Override
 	public int hashCode()
 	{
 		return org.apache.wicket.util.lang.Objects.hashCode(getter);

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
index 190b0af..ecff530 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
@@ -29,7 +29,7 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 /**
@@ -73,7 +73,7 @@ public class HomePage extends WebPage
 
 		final ListView<Object> listView;
 		listViewContainer.add(listView = new ListView<Object>("listView",
-			new AbstractReadOnlyModel<List<Object>>()
+			new IModel<List<Object>>()
 			{
 				@Override
 				public List<Object> getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/BasePage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/BasePage.java b/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/BasePage.java
index 23d16b5..93cde7d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/BasePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/dontstoreunrendered/BasePage.java
@@ -18,7 +18,7 @@ package org.apache.wicket.dontstoreunrendered;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * A base page that provides the markup for PageA, PageB and PageC
@@ -28,7 +28,7 @@ class BasePage extends WebPage {
 
 	public BasePage() {
 
-		add(new Label("className", new AbstractReadOnlyModel<String>() {
+		add(new Label("className", new IModel<String>() {
 
 			@Override
 			public String getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/innerfeedback/LocalizedFeedbackBorder.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/innerfeedback/LocalizedFeedbackBorder.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/innerfeedback/LocalizedFeedbackBorder.java
index b683628..aed1bcd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/innerfeedback/LocalizedFeedbackBorder.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/innerfeedback/LocalizedFeedbackBorder.java
@@ -17,13 +17,13 @@
 package org.apache.wicket.markup.html.form.validation.innerfeedback;
 
 import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.FeedbackCollector;
+import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.IFeedbackMessageFilter;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.validation.FormComponentFeedbackBorder;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 @SuppressWarnings("serial")
 class LocalizedFeedbackBorder extends FormComponentFeedbackBorder
@@ -36,7 +36,7 @@ class LocalizedFeedbackBorder extends FormComponentFeedbackBorder
 		WebMarkupContainer brdr = new WebMarkupContainer("border");
 		brdr.add(feedback = new FeedbackPanel("feedback", getMessagesFilter()));
 		brdr.add(getBodyContainer());
-		brdr.add(AttributeModifier.replace("style", new AbstractReadOnlyModel<String>()
+		brdr.add(AttributeModifier.replace("style", new IModel<String>()
 		{
 			@Override
 			public String getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/markup/html/link/DownloadLinkTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/DownloadLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/DownloadLinkTest.java
index cf48b34..4248bb9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/DownloadLinkTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/DownloadLinkTest.java
@@ -20,7 +20,6 @@ import java.io.File;
 import java.io.IOException;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IComponentAssignedModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.IWrapModel;
@@ -113,7 +112,7 @@ public class DownloadLinkTest extends WicketTestCase
 
 		FileNameModel fileNameModel = new FileNameModel();
 
-		DownloadLink link = new DownloadLink("test", new AbstractReadOnlyModel<File>()
+		DownloadLink link = new DownloadLink("test", new IModel<File>()
 		{
 			@Override
 			public File getObject()
@@ -129,8 +128,7 @@ public class DownloadLinkTest extends WicketTestCase
 		assertTrue(fileNameModel.detachCalled);
 	}
 
-	private class FileNameModel extends AbstractReadOnlyModel<String>
-		implements
+	private class FileNameModel implements IModel<String>,
 			IComponentAssignedModel<String>,
 			IWrapModel<String>
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/model/ModelToStringTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/model/ModelToStringTest.java b/wicket-core/src/test/java/org/apache/wicket/model/ModelToStringTest.java
index 3cd6a14..05d2d07 100644
--- a/wicket-core/src/test/java/org/apache/wicket/model/ModelToStringTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/model/ModelToStringTest.java
@@ -46,9 +46,6 @@ public class ModelToStringTest extends WicketTestCase
 	{
 		private static final long serialVersionUID = 1L;
 
-		/**
-		 * @see AbstractReadOnlyModel#getObject()
-		 */
 		@Override
 		public String getObject()
 		{
@@ -73,7 +70,7 @@ public class ModelToStringTest extends WicketTestCase
 	@Test
 	public void abstractReadOnlyModel()
 	{
-		AbstractReadOnlyModel<String> model = new MyAbstractReadOnlyModel();
+		MyAbstractReadOnlyModel model = new MyAbstractReadOnlyModel();
 		String expected = "Model:classname=[" + model.getClass().getName() + "]";
 		assertEquals(expected, model.toString());
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
index 394c783..18ef601 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
@@ -24,7 +24,7 @@ import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.junit.Test;
@@ -67,7 +67,7 @@ public abstract class WicketTesterLazyIsPageStatelessBase extends WicketTestCase
 					c.setVisible(false);
 				}
 			}));
-			add(new Label("isPageStateless", new AbstractReadOnlyModel<Boolean>()
+			add(new Label("isPageStateless", new IModel<Boolean>()
 			{
 				@Override
 				public Boolean getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java
index e9ada95..da0d26d 100644
--- a/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java
+++ b/wicket-datetime/src/test/java/org/apache/wicket/extensions/yui/calendar/DatesPage1.java
@@ -33,7 +33,7 @@ import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
 
 /**
@@ -86,7 +86,7 @@ public class DatesPage1 extends WebPage
 		{
 			super(id);
 			// sort locales on strings of selected locale
-			setChoices(new AbstractReadOnlyModel<List<Locale>>()
+			setChoices(new IModel<List<Locale>>()
 			{
 				private static final long serialVersionUID = 1L;
 
@@ -212,4 +212,4 @@ public class DatesPage1 extends WebPage
 	{
 		this.selectedLocale = selectedLocale;
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
index 46c4c87..41c14f3 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
@@ -32,7 +32,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.PackageResourceReference;
@@ -104,7 +104,7 @@ public class DebugBar extends DevUtilsPanel
 		super(id);
 		setMarkupId("wicketDebugBar");
 		setOutputMarkupId(true);
-		add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+		add(AttributeModifier.replace("class", new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/PageSizeDebugPanel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/PageSizeDebugPanel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/PageSizeDebugPanel.java
index b0925dd..f386783 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/PageSizeDebugPanel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/PageSizeDebugPanel.java
@@ -18,14 +18,13 @@ package org.apache.wicket.devutils.debugbar;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.lang.Bytes;
-import org.apache.wicket.core.util.lang.WicketObjects;
 
 /**
  * A panel for the debug bar that shows the size of the currently shown page.
@@ -85,7 +84,7 @@ public class PageSizeDebugPanel extends StandardDebugPanel
 	@Override
 	protected IModel<String> getDataModel()
 	{
-		return new AbstractReadOnlyModel<String>()
+		return new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/SessionSizeDebugPanel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/SessionSizeDebugPanel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/SessionSizeDebugPanel.java
index 712200b..0fe3c62 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/SessionSizeDebugPanel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/SessionSizeDebugPanel.java
@@ -20,7 +20,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.devutils.inspector.LiveSessionsPage;
 import org.apache.wicket.devutils.inspector.SessionSizeModel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -76,7 +75,7 @@ public class SessionSizeDebugPanel extends StandardDebugPanel
 	@Override
 	protected IModel<String> getDataModel()
 	{
-		return new AbstractReadOnlyModel<String>()
+		return new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -95,7 +94,6 @@ public class SessionSizeDebugPanel extends StandardDebugPanel
 			@Override
 			public void detach()
 			{
-				super.detach();
 				size.detach();
 			}
 		};

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/VersionDebugContributor.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/VersionDebugContributor.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/VersionDebugContributor.java
index 637fdbe..702d1b8 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/VersionDebugContributor.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/VersionDebugContributor.java
@@ -20,7 +20,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * 
@@ -35,7 +35,7 @@ public class VersionDebugContributor implements IDebugBarContributor
 	@Override
 	public Component createComponent(final String id, final DebugBar debugBar)
 	{
-		Label label = new Label(id, new AbstractReadOnlyModel<String>()
+		Label label = new Label(id, new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/LiveSessionsPage.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/LiveSessionsPage.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/LiveSessionsPage.java
index 6ff3cce..14d3561 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/LiveSessionsPage.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/LiveSessionsPage.java
@@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.PageableListView;
 import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.http.IRequestLogger;
@@ -119,14 +118,14 @@ public class LiveSessionsPage extends DevUtilsPage
 			}
 		}));
 
-		IModel<List<SessionData>> sessionModel = new AbstractReadOnlyModel<List<SessionData>>()
+		IModel<List<SessionData>> sessionModel = new IModel<List<SessionData>>()
 		{
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public List<SessionData> getObject()
 			{
-				return new ArrayList<SessionData>(
+				return new ArrayList<>(
 					Arrays.asList(getRequestLogger().getLiveSessions()));
 			}
 		};

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/RequestsPage.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/RequestsPage.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/RequestsPage.java
index a44c5f1..df5c4b2 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/RequestsPage.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/RequestsPage.java
@@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.image.NonCachingImage;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.PageableListView;
 import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.http.IRequestLogger;
@@ -69,10 +68,10 @@ public class RequestsPage extends DevUtilsPage
 		else
 		{
 			add(new Label("id", new Model<>(sessionData.getSessionId())));
-			add(new Label("sessionInfo", new Model<Serializable>(
+			add(new Label("sessionInfo", new Model<>(
 				(Serializable)sessionData.getSessionInfo())));
 			add(new Label("startDate", new Model<>(sdf.format(sessionData.getStartDate()))));
-			add(new Label("lastRequestTime", new Model<String>(
+			add(new Label("lastRequestTime", new Model<>(
 				sdf.format(sessionData.getLastActive()))));
 			add(new Label("numberOfRequests", new Model<>(sessionData.getNumberOfRequests())));
 			add(new Label("totalTimeTaken", new Model<>(sessionData.getTotalTimeTaken())));
@@ -80,7 +79,7 @@ public class RequestsPage extends DevUtilsPage
 			add(new WebMarkupContainer("sessionid").setVisible(false));
 		}
 
-		IModel<List<RequestData>> requestsModel = new AbstractReadOnlyModel<List<RequestData>>()
+		IModel<List<RequestData>> requestsModel = new IModel<List<RequestData>>()
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -124,8 +123,7 @@ public class RequestsPage extends DevUtilsPage
 					.getName() : "";
 				item.add(new Label("responseTarget", new Model<>(responseTarget)));
 				item.add(new Label("alteredObjects", new Model<>(rd.getAlteredObjects())).setEscapeModelStrings(false));
-				item.add(new Label("sessionSize", new Model<Bytes>(Bytes.bytes(rd.getSessionSize()
-					.longValue()))));
+				item.add(new Label("sessionSize", new Model<>(Bytes.bytes(rd.getSessionSize()))));
 			}
 		};
 		add(listView);

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/SessionSizeModel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/SessionSizeModel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/SessionSizeModel.java
index a1ae31a..14c7e80 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/SessionSizeModel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/SessionSizeModel.java
@@ -18,13 +18,13 @@ package org.apache.wicket.devutils.inspector;
 
 import org.apache.wicket.Session;
 import org.apache.wicket.core.util.lang.WicketObjects;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.lang.Bytes;
 
 /**
  * Calculates
  */
-public class SessionSizeModel extends AbstractReadOnlyModel<Bytes>
+public class SessionSizeModel implements IModel<Bytes>
 {
 	private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ChoicePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ChoicePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ChoicePage.java
index e2b5988..7230443 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ChoicePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/ChoicePage.java
@@ -29,7 +29,6 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
@@ -71,7 +70,7 @@ public class ChoicePage extends BasePage
 		modelsMap.put("CADILLAC", Arrays.asList("CTS", "DTS", "ESCALADE", "SRX", "DEVILLE"));
 		modelsMap.put("FORD", Arrays.asList("CROWN", "ESCAPE", "EXPEDITION", "EXPLORER", "F-150"));
 
-		IModel<List<String>> makeChoices = new AbstractReadOnlyModel<List<String>>()
+		IModel<List<String>> makeChoices = new IModel<List<String>>()
 		{
 			@Override
 			public List<String> getObject()
@@ -81,7 +80,7 @@ public class ChoicePage extends BasePage
 
 		};
 
-		IModel<List<String>> modelChoices = new AbstractReadOnlyModel<List<String>>()
+		IModel<List<String>> modelChoices = new IModel<List<String>>()
 		{
 			@Override
 			public List<String> getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/Clock.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/Clock.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/Clock.java
index 7cd8cc4..edef7f0 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/Clock.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/Clock.java
@@ -21,7 +21,7 @@ import java.util.Date;
 import java.util.TimeZone;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 
 /**
@@ -50,7 +50,7 @@ public class Clock extends Label
 	 * 
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
-	private static class ClockModel extends AbstractReadOnlyModel<String>
+	private static class ClockModel implements IModel<String>
 	{
 		private final DateFormat df;
 
@@ -63,13 +63,10 @@ public class Clock extends Label
 			df.setTimeZone(tz);
 		}
 
-		/**
-		 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-		 */
 		@Override
 		public String getObject()
 		{
 			return df.format(new Date());
 		}
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
index ec1652e..52a1de5 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
@@ -25,8 +25,8 @@ import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableMultiLineLabel;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
 
 
 /**
@@ -50,24 +50,17 @@ public class EditableLabelPage extends BasePage
 	 */
 	public EditableLabelPage()
 	{
-		Form form = new Form("form", new CompoundPropertyModel<>(this));
+		Form form = new Form<>("form", new CompoundPropertyModel<>(this));
 		add(form);
 
 		form.add(new AjaxEditableLabel("text1"));
 		form.add(new AjaxEditableLabel("text2"));
 		form.add(new AjaxEditableMultiLineLabel("text3"));
-		form.add(new AjaxEditableChoiceLabel("site", SITES));
+		form.add(new AjaxEditableChoiceLabel<>("site", SITES));
 
-		form.add(new Label("refresh-counter", new AbstractReadOnlyModel<String>()
-		{
-			@Override
-			public String getObject()
-			{
-				return "" + refreshCounter;
-			}
-		}));
+		form.add(new Label("refresh-counter", (IModel<String>) () -> "" + refreshCounter));
 
-		form.add(new Link("refresh-link")
+		form.add(new Link<Void>("refresh-link")
 		{
 			@Override
 			public void onClick()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
index 1d1c69b..0908f97 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
@@ -26,7 +26,7 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.validation.validator.StringValidator;
@@ -88,7 +88,7 @@ public class FileUploadPage extends BasePage
 		// create the file upload field
 		form.add(file = new FileUploadField("file"));
 
-		form.add(new Label("max", new AbstractReadOnlyModel<String>()
+		form.add(new Label("max", new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java
index ee95cca..abbe541 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajaxhellobrowser/AjaxHelloBrowser.java
@@ -26,7 +26,6 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.basic.MultiLineLabel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.ClientProperties;
 import org.apache.wicket.protocol.http.request.WebClientInfo;
@@ -43,7 +42,7 @@ public class AjaxHelloBrowser extends WicketExamplePage
 	 */
 	public AjaxHelloBrowser()
 	{
-		final MultiLineLabel clientInfo = new MultiLineLabel("clientinfo", new AbstractReadOnlyModel<String>()
+		final MultiLineLabel clientInfo = new MultiLineLabel("clientinfo", new IModel<String>()
 		{
 			@Override
 			public String getObject()
@@ -55,7 +54,7 @@ public class AjaxHelloBrowser extends WicketExamplePage
 		clientInfo.setOutputMarkupPlaceholderTag(true);
 		clientInfo.setVisible(false);
 
-		IModel<String> clientTimeModel = new AbstractReadOnlyModel<String>()
+		IModel<String> clientTimeModel = new IModel<String>()
 		{
 			@Override
 			public String getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java
index 30bc937..d08b99b 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/dates/DatesPage.java
@@ -36,7 +36,7 @@ import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
 
 /**
@@ -83,7 +83,7 @@ public class DatesPage extends WicketExamplePage
 		{
 			super(id);
 			// sort locales on strings of selected locale
-			setChoices(new AbstractReadOnlyModel<List<Locale>>()
+			setChoices(new IModel<List<Locale>>()
 			{
 				@Override
 				public List<Locale> getObject()
@@ -231,4 +231,4 @@ public class DatesPage extends WicketExamplePage
 	{
 		this.selectedLocale = selectedLocale;
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/guice/HomePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/guice/HomePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/guice/HomePage.java
index 00dc7ac..7c987a7 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/guice/HomePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/guice/HomePage.java
@@ -16,12 +16,13 @@
  */
 package org.apache.wicket.examples.guice;
 
-import com.google.inject.Inject;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.examples.guice.service.IMyService;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
+
+import com.google.inject.Inject;
 
 /**
  * Everybody's favorite example (Hello World), modified to use Guice.
@@ -51,15 +52,6 @@ public class HomePage extends WicketExamplePage
 				labelValue = service.getHelloWorldText();
 			}
 		});
-		add(new Label("message", new AbstractReadOnlyModel<String>()
-		{
-
-			@Override
-			public String getObject()
-			{
-				return labelValue;
-			}
-
-		}));
+		add(new Label("message", (IModel<String>) () -> labelValue));
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/hellobrowser/HelloBrowser.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/hellobrowser/HelloBrowser.java b/wicket-examples/src/main/java/org/apache/wicket/examples/hellobrowser/HelloBrowser.java
index 12532c9..415dd06 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/hellobrowser/HelloBrowser.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/hellobrowser/HelloBrowser.java
@@ -25,7 +25,6 @@ import org.apache.wicket.Session;
 import org.apache.wicket.examples.WicketExamplePage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.basic.MultiLineLabel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.ClientProperties;
 import org.apache.wicket.protocol.http.request.WebClientInfo;
@@ -53,11 +52,8 @@ public class HelloBrowser extends WicketExamplePage
 
 		add(new MultiLineLabel("clientinfo", properties.toString()));
 
-		IModel<String> clientTimeModel = new AbstractReadOnlyModel<String>()
+		IModel<String> clientTimeModel = new IModel<String>()
 		{
-			/**
-			 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-			 */
 			@Override
 			public String getObject()
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/homepage/HomePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/homepage/HomePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/homepage/HomePage.java
index 310caa0..f771356 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/homepage/HomePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/homepage/HomePage.java
@@ -19,7 +19,7 @@ package org.apache.wicket.examples.homepage;
 import org.apache.wicket.Application;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * @author mocleiri
@@ -36,18 +36,13 @@ public class HomePage extends WebPage
 	{
 		super();
 
-		add(new Label("version", new AbstractReadOnlyModel<String>()
+		add(new Label("version", new IModel<String>()
 		{
-
-			/**
-			 * 
-			 */
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public String getObject()
 			{
-
 				/*
 				 * Read the specification version from the wicket-core MANIFEST.MF file.
 				 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java b/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
index 314eead..a966b1f 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/linkomatic/Home.java
@@ -37,11 +37,10 @@ import org.apache.wicket.markup.html.link.ResourceLink;
 import org.apache.wicket.markup.html.pages.RedirectPage;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.request.mapper.parameter.INamedParameters;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.SharedResourceReference;
 import org.apache.wicket.util.file.Files;
@@ -67,7 +66,7 @@ public class Home extends WicketExamplePage
 	public Home()
 	{
 		// Action link counts link clicks
-		final Link actionLink = new Link("actionLink")
+		final Link<Void> actionLink = new Link<Void>("actionLink")
 		{
 			@Override
 			public void onClick()
@@ -80,7 +79,7 @@ public class Home extends WicketExamplePage
 		add(actionLink);
 
 		// Action link counts link clicks on works with onclick handler
-		final Link actionOnClickLink = new Link("actionOnClickLink")
+		final Link<Void> actionOnClickLink = new Link<Void>("actionOnClickLink")
 		{
 			@Override
 			public void onClick()
@@ -154,7 +153,7 @@ public class Home extends WicketExamplePage
 		// Shared resource link
 		add(new ResourceLink<>("cancelButtonLink", new SharedResourceReference("cancelButton")));
 
-		add(new DownloadLink("downloadLink", new AbstractReadOnlyModel<File>()
+		add(new DownloadLink("downloadLink", new IModel<File>()
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -184,7 +183,7 @@ public class Home extends WicketExamplePage
 		add(feedbackPanel);
 		add(new RedirectForm("redirectForm"));
 
-		Link linkToAnchor = new Link("linkToAnchor")
+		Link<Void> linkToAnchor = new Link<Void>("linkToAnchor")
 		{
 			@Override
 			public void onClick()
@@ -192,7 +191,7 @@ public class Home extends WicketExamplePage
 			}
 		};
 		add(linkToAnchor);
-		Link anotherlinkToAnchor = new Link("anotherlinkToAnchor")
+		Link<Void> anotherlinkToAnchor = new Link<Void>("anotherlinkToAnchor")
 		{
 			@Override
 			public void onClick()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/OIRPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/OIRPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/OIRPage.java
index 1639c59..c145917 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/OIRPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/OIRPage.java
@@ -25,7 +25,6 @@ import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
 import org.apache.wicket.markup.repeater.data.DataView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 
 /**
@@ -107,7 +106,7 @@ public class OIRPage extends BasePage
 				item.add(new Label("homephone", contact.getHomePhone()));
 				item.add(new Label("cellphone", contact.getCellPhone()));
 
-				item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+				item.add(AttributeModifier.replace("class", new IModel<String>()
 				{
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/PagingPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/PagingPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/PagingPage.java
index ecf0a52..9827873 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/PagingPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/PagingPage.java
@@ -21,7 +21,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * Page that demonstrates a paging dataview
@@ -54,7 +54,7 @@ public class PagingPage extends BasePage
 				item.add(new Label("homephone", contact.getHomePhone()));
 				item.add(new Label("cellphone", contact.getCellPhone()));
 
-				item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+				item.add(AttributeModifier.replace("class", new IModel<String>()
 				{
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RefreshingPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RefreshingPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RefreshingPage.java
index 1c5d2f7..5175ac0 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RefreshingPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RefreshingPage.java
@@ -25,7 +25,6 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.RefreshingView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 
 
@@ -81,7 +80,7 @@ public class RefreshingPage extends BasePage
 				item.add(new Label("homephone", contact.getHomePhone()));
 				item.add(new Label("cellphone", contact.getCellPhone()));
 
-				item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+				item.add(AttributeModifier.replace("class", new IModel<String>()
 				{
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeatingPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeatingPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeatingPage.java
index cf399aa..a7feae4 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeatingPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/RepeatingPage.java
@@ -22,7 +22,7 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.AbstractItem;
 import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 
 /**
@@ -60,7 +60,7 @@ public class RepeatingPage extends BasePage
 			item.add(new Label("cellphone", contact.getCellPhone()));
 
 			final int idx = index;
-			item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+			item.add(AttributeModifier.replace("class", new IModel<String>()
 			{
 				private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SimplePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SimplePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SimplePage.java
index f0a2430..691b472 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SimplePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SimplePage.java
@@ -20,7 +20,7 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * Page that demonstrates a simple dataview.
@@ -51,7 +51,7 @@ public class SimplePage extends BasePage
 				item.add(new Label("homephone", contact.getHomePhone()));
 				item.add(new Label("cellphone", contact.getCellPhone()));
 
-				item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+				item.add(AttributeModifier.replace("class", new IModel<String>()
 				{
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortingPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortingPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortingPage.java
index f292c6d..f2ffac6 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortingPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortingPage.java
@@ -22,7 +22,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * page that demonstrates dataview and sorting
@@ -55,7 +55,7 @@ public class SortingPage extends BasePage
 				item.add(new Label("homephone", contact.getHomePhone()));
 				item.add(new Label("cellphone", contact.getCellPhone()));
 
-				item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>()
+				item.add(AttributeModifier.replace("class", new IModel<String>()
 				{
 					private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
index 8632e9d..1f93f44 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
@@ -47,7 +47,7 @@ import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.request.http.handler.ErrorCodeRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -74,7 +74,7 @@ public class SourcesPage extends WebPage
 	/**
 	 * Model for retrieving the source code from the classpath of a packaged resource.
 	 */
-	private class SourceModel extends AbstractReadOnlyModel<String>
+	private class SourceModel implements IModel<String>
 	{
 		/**
 		 * Returns the contents of the file loaded from the classpath.
@@ -413,7 +413,7 @@ public class SourcesPage extends WebPage
 	{
 		super(params);
 
-		filename = new Label("filename", new AbstractReadOnlyModel<String>()
+		filename = new Label("filename", new IModel<String>()
 		{
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/SessionModel.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/SessionModel.java b/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/SessionModel.java
index 88af500..a376ce2 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/SessionModel.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/stateless/SessionModel.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.examples.stateless;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.cycle.RequestCycle;
 
 /**
@@ -25,16 +25,10 @@ import org.apache.wicket.request.cycle.RequestCycle;
  * 
  * @author Eelco Hillenius
  */
-public class SessionModel extends AbstractReadOnlyModel<String>
+public class SessionModel implements IModel<String>
 {
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = 1L;
 
-	/**
-	 * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
-	 */
 	@Override
 	public String getObject()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/stockquote/StockQuoteLabel2.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/stockquote/StockQuoteLabel2.java b/wicket-examples/src/main/java/org/apache/wicket/examples/stockquote/StockQuoteLabel2.java
index 8bae00d..ace23bc 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/stockquote/StockQuoteLabel2.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/stockquote/StockQuoteLabel2.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.examples.stockquote;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * StockQuote example provided by Jonathan Locke. This component shows you how to reuse existing
@@ -37,7 +37,7 @@ public class StockQuoteLabel2 extends Label
 	 */
 	public StockQuoteLabel2(String id, final String symbol)
 	{
-		super(id, new AbstractReadOnlyModel<String>()
+		super(id, new IModel<String>()
 		{
 			/**
 			 * Gets the stockquote for the given symbol.
@@ -50,4 +50,4 @@ public class StockQuoteLabel2 extends Label
 			}
 		});
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/tree/AdvancedTreePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/AdvancedTreePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/AdvancedTreePage.java
index 7018b1f..c166e75 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/AdvancedTreePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/AdvancedTreePage.java
@@ -44,7 +44,6 @@ import org.apache.wicket.markup.html.form.ChoiceRenderer;
 import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
 
@@ -206,7 +205,7 @@ public abstract class AdvancedTreePage extends AbstractTreePage
 		return content.newContentComponent(id, tree, model);
 	}
 
-	private class FooExpansionModel extends AbstractReadOnlyModel<Set<Foo>>
+	private class FooExpansionModel implements IModel<Set<Foo>>
 	{
 		@Override
 		public Set<Foo> getObject()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiLineLabelContent.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiLineLabelContent.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiLineLabelContent.java
index d8eec49..8870546 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiLineLabelContent.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiLineLabelContent.java
@@ -20,7 +20,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.examples.tree.Foo;
 import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree;
 import org.apache.wicket.markup.html.basic.MultiLineLabel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 
 /**
@@ -37,7 +36,7 @@ public class MultiLineLabelContent extends Content
 	public Component newContentComponent(String id, final AbstractTree<Foo> tree,
 		final IModel<Foo> model)
 	{
-		return new MultiLineLabel(id, new AbstractReadOnlyModel<String>()
+		return new MultiLineLabel(id, new IModel<String>()
 		{
 			@Override
 			public String getObject()
@@ -46,4 +45,4 @@ public class MultiLineLabelContent extends Content
 			}
 		});
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
index 55e5f7a..2afe6cf 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableChoiceLabel.java
@@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.form.DropDownChoice;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
@@ -168,9 +167,8 @@ public class AjaxEditableChoiceLabel<T> extends AjaxEditableLabel<T>
 	protected FormComponent<T> newEditor(final MarkupContainer parent, final String componentId,
 		final IModel<T> model)
 	{
-		IModel<List<? extends T>> choiceModel = new AbstractReadOnlyModel<List<? extends T>>()
+		IModel<List<? extends T>> choiceModel = new IModel<List<? extends T>>()
 		{
-
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -178,7 +176,6 @@ public class AjaxEditableChoiceLabel<T> extends AjaxEditableLabel<T>
 			{
 				return choices.getObject();
 			}
-
 		};
 
 		DropDownChoice<T> editor = new DropDownChoice<T>(componentId, model, choiceModel, renderer)

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableMultiLineLabel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableMultiLineLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableMultiLineLabel.java
index 71edc2f..95c93e1 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableMultiLineLabel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableMultiLineLabel.java
@@ -26,7 +26,6 @@ import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.basic.MultiLineLabel;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.TextArea;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 
 /**
@@ -142,26 +141,8 @@ public class AjaxEditableMultiLineLabel<T> extends AjaxEditableLabel<T>
 				AjaxEditableMultiLineLabel.this.onModelChanging();
 			}
 		};
-		editor.add(new AttributeModifier("rows", new AbstractReadOnlyModel<Integer>()
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public Integer getObject()
-			{
-				return rows;
-			}
-		}));
-		editor.add(new AttributeModifier("cols", new AbstractReadOnlyModel<Integer>()
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public Integer getObject()
-			{
-				return cols;
-			}
-		}));
+		editor.add(new AttributeModifier("rows", (IModel<Integer>) () -> rows));
+		editor.add(new AttributeModifier("cols", (IModel<Integer>) () -> cols));
 		editor.setOutputMarkupId(true);
 		editor.setVisible(false);
 		editor.add(new EditorAjaxBehavior()

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
index c0a654e..f2d424b 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/captcha/kittens/KittenCaptchaPanel.java
@@ -43,7 +43,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.image.NonCachingImage;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.cycle.RequestCycle;
@@ -153,17 +153,14 @@ public class KittenCaptchaPanel extends Panel
 		setOutputMarkupId(true);
 
 		// Show how many animals have been selected
-		animalSelectionLabel = new Label("animalSelectionLabel",
-			new AbstractReadOnlyModel<String>()
+		animalSelectionLabel = new Label("animalSelectionLabel", new IModel<String>()
+		{
+			@Override
+			public String getObject()
 			{
-				private static final long serialVersionUID = 6792322972316712326L;
-
-				@Override
-				public String getObject()
-				{
-					return imageResource.selectString();
-				}
-			});
+				return imageResource.selectString();
+			}
+		});
 		animalSelectionLabel.setOutputMarkupId(true);
 		add(animalSelectionLabel);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
index 83aad70..70515de 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java
@@ -20,7 +20,7 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
-import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.IModel;
 
 /**
  * Toolbar that displays links used to navigate the pages of the datatable as well as a message
@@ -44,10 +44,8 @@ public class NavigationToolbar extends AbstractToolbar
 
 		WebMarkupContainer span = new WebMarkupContainer("span");
 		add(span);
-		span.add(AttributeModifier.replace("colspan", new AbstractReadOnlyModel<String>()
+		span.add(AttributeModifier.replace("colspan", new IModel<String>()
 		{
-			private static final long serialVersionUID = 1L;
-
 			@Override
 			public String getObject()
 			{

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
index ff06af0..bd89098 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java
@@ -19,7 +19,6 @@ package org.apache.wicket.extensions.markup.html.repeater.data.table;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 
@@ -65,7 +64,7 @@ public class NoRecordsToolbar extends AbstractToolbar
 		WebMarkupContainer td = new WebMarkupContainer("td");
 		add(td);
 
-		td.add(AttributeModifier.replace("colspan", new AbstractReadOnlyModel<String>()
+		td.add(AttributeModifier.replace("colspan", new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/export/ExportToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/export/ExportToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/export/ExportToolbar.java
index 999246e..aa71669 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/export/ExportToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/export/ExportToolbar.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.LinkedList;
 import java.util.List;
+
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractToolbar;
@@ -30,7 +31,6 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.ResourceLink;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.markup.repeater.data.IDataProvider;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.resource.IResource;
@@ -163,7 +163,7 @@ public class ExportToolbar extends AbstractToolbar
 		WebMarkupContainer td = new WebMarkupContainer("td");
 		add(td);
 
-		td.add(AttributeModifier.replace("colspan", new AbstractReadOnlyModel<String>()
+		td.add(AttributeModifier.replace("colspan", new IModel<String>()
 		{
 			private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
index f7222c3..d5e32c0 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java
@@ -28,7 +28,6 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IStyledColum
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.Strings;
@@ -66,7 +65,7 @@ public class FilterToolbar extends AbstractToolbar
 
 		Args.notNull(table, "table");
 		
-		IModel<List<IColumn<T, S>>> model = new AbstractReadOnlyModel<List<IColumn<T,S>>>() {
+		IModel<List<IColumn<T, S>>> model = new IModel<List<IColumn<T,S>>>() {
 			private static final long serialVersionUID = 1L;
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
index f41be80..4f75e19 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
@@ -23,7 +23,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.repeater.tree.nested.BranchItem;
 import org.apache.wicket.extensions.markup.html.repeater.tree.nested.Subtree;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.visit.IVisit;
 import org.apache.wicket.util.visit.IVisitor;
@@ -153,7 +152,7 @@ public abstract class NestedTree<T> extends AbstractTree<T>
 		});
 	}
 
-	private class RootsModel extends AbstractReadOnlyModel<T>
+	private class RootsModel implements IModel<T>
 	{
 		private static final long serialVersionUID = 1L;
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/ProviderSubset.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/ProviderSubset.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/ProviderSubset.java
index 912901b..1a731ef 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/ProviderSubset.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/ProviderSubset.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.IModel;
 
@@ -242,10 +241,8 @@ public class ProviderSubset<T> implements Set<T>, IDetachable
 	 */
 	public IModel<Set<T>> createModel()
 	{
-		return new AbstractReadOnlyModel<Set<T>>()
+		return new IModel<Set<T>>()
 		{
-			/**
-			 */
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -261,4 +258,4 @@ public class ProviderSubset<T> implements Set<T>, IDetachable
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
index 08bf3a7..a115cb4 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/tabs/TabbedPanel.java
@@ -28,7 +28,6 @@ import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.list.Loop;
 import org.apache.wicket.markup.html.list.LoopItem;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.lang.Args;
@@ -123,7 +122,7 @@ public class TabbedPanel<T extends ITab> extends Panel
 
 		this.tabs = Args.notNull(tabs, "tabs");
 
-		final IModel<Integer> tabCount = new AbstractReadOnlyModel<Integer>()
+		final IModel<Integer> tabCount = new IModel<Integer>()
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -532,4 +531,4 @@ public class TabbedPanel<T extends ITab> extends Panel
 			}
 		}
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardStep.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardStep.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardStep.java
index 136d2cb..2b0dc25 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardStep.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/wizard/WizardStep.java
@@ -29,7 +29,6 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.validation.IFormValidator;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -167,26 +166,8 @@ public class WizardStep extends Panel implements IWizardStep
 		{
 			super(id);
 			setDefaultModel(new CompoundPropertyModel<>(wizard));
-			add(new Label("title", new AbstractReadOnlyModel<String>()
-			{
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				public String getObject()
-				{
-					return getTitle();
-				}
-			}));
-			add(new Label("summary", new AbstractReadOnlyModel<String>()
-			{
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				public String getObject()
-				{
-					return getSummary();
-				}
-			}));
+			add(new Label("title", WizardStep.this::getTitle));
+			add(new Label("summary", WizardStep.this::getSummary));
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/62e6be75/wicket-user-guide/src/docs/guide/i18n/i18n_2.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/i18n/i18n_2.gdoc b/wicket-user-guide/src/docs/guide/i18n/i18n_2.gdoc
index 9866502..5781a12 100644
--- a/wicket-user-guide/src/docs/guide/i18n/i18n_2.gdoc
+++ b/wicket-user-guide/src/docs/guide/i18n/i18n_2.gdoc
@@ -81,10 +81,10 @@ Along with this file we can also find a bundle for German (WicketApplication_de.
 The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:
 
 {code}
-AbstractReadOnlyModel<String> model = new AbstractReadOnlyModel<String>() {			
+IModel<String> model = new AbstractReadOnlyModel<String>() {
 			@Override
 			public String getObject() {
-				return getString("greetingMessage");			
+				return getString("greetingMessage");
 			}
 };