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

svn commit: r649857 - /wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java

Author: knopp
Date: Sat Apr 19 14:54:29 2008
New Revision: 649857

URL: http://svn.apache.org/viewvc?rev=649857&view=rev
Log:
findparent shouldn't expect class that extends MarkupContainer, it should also work with arbitrary interfaces (e.g. IPageable)

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=649857&r1=649856&r2=649857&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Sat Apr 19 14:54:29 2008
@@ -59,16 +59,16 @@
 
 /**
  * Component serves as the highest level abstract base class for all components.
- * 
+ *
  * <ul>
  * <li><b>Identity </b>- All Components must have a non-null id which is retrieved by calling
  * getId(). The id must be unique within the MarkupContainer that holds the Component, but does not
  * have to be globally unique or unique within a Page's component hierarchy.
- * 
+ *
  * <li><b>Hierarchy </b>- A component has a parent which can be retrieved with {@link #getParent()}.
  * If a component is an instance of MarkupContainer, it may have children. In this way it has a
  * place in the hierarchy of components contained on a given page.
- * 
+ *
  * <li><b>Component Paths </b>- The path from the Page at the root of the component hierarchy to a
  * given Component is simply the concatenation with dot separators of each id along the way. For
  * example, the path "a.b.c" would refer to the component named "c" inside the MarkupContainer named
@@ -77,12 +77,12 @@
  * bear a PageMap/Session-relative identifier as their id, so each absolute path will begin with a
  * number, such as "0.a.b.c". To get a Component path relative to the page that contains it, you can
  * call getPageRelativePath().
- * 
+ *
  * <li><b>LifeCycle </b>- Components participate in the following lifecycle phases:
  * <ul>
  * <li><b>Construction </b>- A Component is constructed with the Java language new operator.
  * Children may be added during construction if the Component is a MarkupContainer.
- * 
+ *
  * <li><b>Request Handling </b>- An incoming request is processed by a protocol request handler
  * such as WicketServlet. An associated Application object creates Session, Request and Response
  * objects for use by a given Component in updating its model and rendering a response. These
@@ -90,7 +90,7 @@
  * {@link Component#getRequestCycle()}. The convenience methods {@link Component#getRequest()},
  * {@link Component#getResponse()} and {@link Component#getSession()} provide easy access to the
  * contents of this container.
- * 
+ *
  * <li><b>Listener Invocation </b>- If the request references a listener on an existing Component,
  * that listener is called, allowing arbitrary user code to handle events such as link clicks or
  * form submits. Although arbitrary listeners are supported in Wicket, the need to implement a new
@@ -103,24 +103,24 @@
  * interface methods in Java must be public). Instead, Form subclasses should override user-oriented
  * methods such as onValidate(), onSubmit() and onError() (although only the latter two are likely
  * to be overridden in practice).
- * 
+ *
  * <li><b>onBeginRequest </b>- The {@link Component#onBeginRequest()} method is called.
- * 
+ *
  * <li><b>Form Submit </b>- If a Form has been submitted and the Component is a FormComponent, the
  * component's model is validated by a call to FormComponent.validate().
- * 
+ *
  * <li><b>Form Model Update </b>- If a valid Form has been submitted and the Component is a
  * FormComponent, the component's model is updated by a call to FormComponent.updateModel().
- * 
+ *
  * <li><b>Rendering </b>- A markup response is generated by the Component via
  * {@link Component#render()}, which calls subclass implementation code contained in
  * {@link Component#onRender(org.apache.wicket.markup.MarkupStream)}. Once this phase begins, a
  * Component becomes immutable. Attempts to alter the Component will result in a
  * WicketRuntimeException.
- * 
+ *
  * <li><b>onEndRequest </b>() - The {@link Component#onEndRequest()} method is called.
  * </ul>
- * 
+ *
  * <li><b>Component Models </b>- The primary responsibility of a component is to use its model (an
  * object that implements IModel), which can be set via {@link Component#setModel(IModel model)} and
  * retrieved via {@link Component#getModel()}, to render a response in an appropriate markup
@@ -129,29 +129,29 @@
  * convenience method {@link Component#getModelObject()} is provided to retrieve the model Object
  * from its IModel wrapper. A further convenience method, {@link Component#getModelObjectAsString()},
  * is provided for the very common operation of converting the wrapped model Object to a String.
- * 
+ *
  * <li><b>Visibility </b>- Components which have setVisible(false) will return false from
  * isVisible() and will not render a response (nor will their children).
- * 
+ *
  * <li><b>Page </b>- The Page containing any given Component can be retrieved by calling
  * {@link Component#getPage()}. If the Component is not attached to a Page, an
  * IllegalStateException will be thrown. An equivalent method, {@link Component#findPage()} is
  * available for special circumstances where it might be desirable to get a null reference back
  * instead.
- * 
+ *
  * <li><b>Session </b>- The Page for a Component points back to the Session that contains the Page.
  * The Session for a component can be accessed with the convenience method getSession(), which
  * simply calls getPage().getSession().
- * 
+ *
  * <li><b>Locale </b>- The Locale for a Component is available through the convenience method
  * getLocale(), which is equivalent to getSession().getLocale().
- * 
+ *
  * <li><b>String Resources </b>- Components can have associated String resources via the
  * Application's Localizer, which is available through the method {@link Component#getLocalizer()}.
  * The convenience methods {@link Component#getString(String key)} and
  * {@link Component#getString(String key, IModel model)} wrap the identical methods on the
  * Application Localizer for easy access in Components.
- * 
+ *
  * <li><b>Style </b>- The style ("skin") for a component is available through
  * {@link Component#getStyle()}, which is equivalent to getSession().getStyle(). Styles are
  * intended to give a particular look to a Component or Resource that is independent of its Locale.
@@ -159,46 +159,46 @@
  * the design look of "ocean" to the user. If the Session's style is set to "ocean" and these
  * resources are given names suffixed with "_ocean", Wicket's resource management logic will prefer
  * these resources to other resources, such as default resources, which are not as good of a match.
- * 
+ *
  * <li><b>Variation </b>- Whereas Styles are Session (user) specific, variations are component
  * specific. E.g. if the Style is "ocean" and the Variation is "NorthSea", than the resources are
  * given the names suffixed with "_ocean_NorthSea".
- * 
+ *
  * <li><b>AttributeModifiers </b>- You can add one or more {@link AttributeModifier}s to any
  * component if you need to programmatically manipulate attributes of the markup tag to which a
  * Component is attached.
- * 
+ *
  * <li><b>Application, ApplicationSettings and ApplicationPages </b>- The getApplication() method
  * provides convenient access to the Application for a Component via getSession().getApplication().
  * The getApplicationSettings() method is equivalent to getApplication().getSettings(). The
  * getApplicationPages is equivalent to getApplication().getPages().
- * 
+ *
  * <li><b>Feedback Messages </b>- The {@link Component#debug(String)},
  * {@link Component#info(String)}, {@link Component#warn(String)},
  * {@link Component#error(java.io.Serializable)} and {@link Component#fatal(String)} methods
  * associate feedback messages with a Component. It is generally not necessary to use these methods
  * directly since Wicket validators automatically register feedback messages on Components. Any
  * feedback message for a given Component can be retrieved with {@link Component#getFeedbackMessage}.
- * 
+ *
  * <li><b>Page Factory </b>- It is possible to change the way that Pages are constructed by
  * overriding the {@link Component#getPageFactory()} method, returning your own implementation of
  * {@link org.apache.wicket.IPageFactory}.
- * 
+ *
  * <li><b>Versioning </b>- Pages are the unit of versioning in Wicket, but fine-grained control of
  * which Components should participate in versioning is possible via the
  * {@link Component#setVersioned(boolean)} method. The versioning participation of a given Component
  * can be retrieved with {@link Component#isVersioned()}.
- * 
+ *
  * <li><b>AJAX support</b>- Components can be re-rendered after the whole Page has been rendered
  * at least once by calling doRender().
- * 
+ *
  * @author Jonathan Locke
  * @author Chris Turner
  * @author Eelco Hillenius
  * @author Johan Compagner
  * @author Juergen Donnerstag
  * @author Igor Vaynberg (ivaynberg)
- * 
+ *
  * @param <T>
  *            Model object type
  */
@@ -216,7 +216,7 @@
 
 		/**
 		 * Construct.
-		 * 
+		 *
 		 * @param model
 		 */
 		public ComponentModelChange(IModel<T> model)
@@ -246,7 +246,7 @@
 
 	/**
 	 * Generic component visitor interface for component traversals.
-	 * 
+	 *
 	 * @param <T>
 	 *            The component
 	 */
@@ -270,7 +270,7 @@
 
 		/**
 		 * Called at each component in a traversal.
-		 * 
+		 *
 		 * @param component
 		 *            The component
 		 * @return CONTINUE_TRAVERSAL (null) if the traversal should continue, or a non-null return
@@ -282,7 +282,7 @@
 
 	/**
 	 * Change object for undoing addition of behavior
-	 * 
+	 *
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
 	private final class AddedBehaviorChange extends Change
@@ -294,7 +294,7 @@
 
 		/**
 		 * Construct.
-		 * 
+		 *
 		 * @param behavior
 		 */
 		public AddedBehaviorChange(IBehavior behavior)
@@ -318,7 +318,7 @@
 
 	/**
 	 * Undo change for component border property
-	 * 
+	 *
 	 * @author ivaynberg
 	 */
 	private class ComponentBorderChange extends Change
@@ -337,7 +337,7 @@
 
 	/**
 	 * Change object for undoing removal of behavior
-	 * 
+	 *
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
 	private final class RemovedBehaviorChange extends Change
@@ -349,7 +349,7 @@
 
 		/**
 		 * Construct.
-		 * 
+		 *
 		 * @param behavior
 		 */
 		public RemovedBehaviorChange(IBehavior behavior)
@@ -387,7 +387,7 @@
 
 		/**
 		 * Construct.
-		 * 
+		 *
 		 * @param component
 		 */
 		EnabledChange(final Component< ? > component)
@@ -430,7 +430,7 @@
 
 		/**
 		 * Construct.
-		 * 
+		 *
 		 * @param component
 		 */
 		VisibilityChange(final Component< ? > component)
@@ -471,12 +471,12 @@
 	 * When a component is not allowed to be enabled (in effect disabled through the implementation
 	 * of this interface), Wicket will try to prevent model updates too. This is not completely fail
 	 * safe, as constructs like:
-	 * 
+	 *
 	 * <pre>
 	 * User u = (User)getModelObject();
 	 * u.setName(&quot;got you there!&quot;);
 	 * </pre>
-	 * 
+	 *
 	 * can't be prevented. Indeed it can be argued that any model protection is best dealt with in
 	 * your model objects to be completely secured. Wicket will catch all normal framework-directed
 	 * use though.
@@ -880,7 +880,7 @@
 	/**
 	 * Constructor. All components have names. A component's id cannot be null. This is the minimal
 	 * constructor of component. It does not register a model.
-	 * 
+	 *
 	 * @param id
 	 *            The non-null id of this component
 	 * @throws WicketRuntimeException
@@ -902,12 +902,12 @@
 	/**
 	 * Constructor. All components have names. A component's id cannot be null. This constructor
 	 * includes a model.
-	 * 
+	 *
 	 * @param id
 	 *            The non-null id of this component
 	 * @param model
 	 *            The component's model
-	 * 
+	 *
 	 * @throws WicketRuntimeException
 	 *             Thrown if the component has been given a null id.
 	 */
@@ -919,13 +919,13 @@
 
 	/**
 	 * Adds an behavior modifier to the component.
-	 * 
+	 *
 	 * <p>
 	 * Note: this method is override to enable users to do things like discussed in <a
 	 * href="http://www.nabble.com/Why-add%28IBehavior%29-is-final--tf2598263.html#a7248198">this
 	 * thread</a>.
 	 * </p>
-	 * 
+	 *
 	 * @param behaviors
 	 *            The behavior modifier(s) to be added
 	 * @return this (to allow method call chaining)
@@ -958,7 +958,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param behavior
 	 */
 	private void addBehavior(final IBehavior behavior)
@@ -967,7 +967,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @return
 	 */
 	private List<IBehavior> getBehaviorsImpl()
@@ -1086,7 +1086,7 @@
 
 	/**
 	 * Redirects to any intercept page previously specified by a call to redirectToInterceptPage.
-	 * 
+	 *
 	 * @return True if an original destination was redirected to
 	 * @see Component#redirectToInterceptPage(Page)
 	 */
@@ -1097,7 +1097,7 @@
 
 	/**
 	 * Registers a debug feedback message for this component
-	 * 
+	 *
 	 * @param message
 	 *            The feedback message
 	 */
@@ -1147,7 +1147,7 @@
 
 	/**
 	 * THIS IS WICKET INTERNAL ONLY. DO NOT USE IT.
-	 * 
+	 *
 	 * Traverses all behaviors and calls detachModel() on them. This is needed to cleanup behavior
 	 * after render. This method is necessary for {@link AjaxRequestTarget} to be able to cleanup
 	 * component's behaviors after header contribution has been done (which is separated from
@@ -1191,7 +1191,7 @@
 
 	/**
 	 * Registers an error feedback message for this component
-	 * 
+	 *
 	 * @param message
 	 *            The feedback message
 	 */
@@ -1203,7 +1203,7 @@
 
 	/**
 	 * Registers an fatal error feedback message for this component
-	 * 
+	 *
 	 * @param message
 	 *            The feedback message
 	 */
@@ -1215,17 +1215,17 @@
 
 	/**
 	 * Finds the first container parent of this component of the given class.
-	 * 
+	 *
 	 * @param <Z>
 	 *            <code>class</code> of parent component
-	 * 
+	 *
 	 * @param c
 	 *            MarkupContainer class to search for
 	 * @return First container parent that is an instance of the given class, or null if none can be
 	 *         found
 	 */
 	@SuppressWarnings("unchecked")
-	public final <Z extends MarkupContainer< ? >> Z findParent(final Class<Z> c)
+	public final <Z> Z findParent(final Class<Z> c)
 	{
 		// Start with immediate parent
 		MarkupContainer< ? > current = parent;
@@ -1268,7 +1268,7 @@
 
 	/**
 	 * Gets interface to application that this component is a part of.
-	 * 
+	 *
 	 * @return The application associated with the session that this component is in.
 	 * @see Application
 	 */
@@ -1280,7 +1280,7 @@
 	/**
 	 * Gets the currently coupled {@link IBehavior}s as a unmodifiable list. Returns an empty list
 	 * rather than null if there are no behaviors coupled to this component.
-	 * 
+	 *
 	 * @return The currently coupled behaviors as a unmodifiable list
 	 */
 	public final List<IBehavior> getBehaviors()
@@ -1317,10 +1317,10 @@
 
 	/**
 	 * Gets the converter that should be used by this component.
-	 * 
+	 *
 	 * @param type
 	 *            The type to convert to
-	 * 
+	 *
 	 * @return The converter that should be used by this component
 	 */
 	public <Z> IConverter<Z> getConverter(Class<Z> type)
@@ -1330,7 +1330,7 @@
 
 	/**
 	 * Gets whether model strings should be escaped.
-	 * 
+	 *
 	 * @return Returns whether model strings should be escaped
 	 */
 	public final boolean getEscapeModelStrings()
@@ -1348,7 +1348,7 @@
 
 	/**
 	 * Gets the id of this component.
-	 * 
+	 *
 	 * @return The id of this component
 	 */
 	public String getId()
@@ -1367,7 +1367,7 @@
 	/**
 	 * Gets the locale for this component. By default, it searches its parents for a locale. If no
 	 * parents (it's a recursive search) returns a locale, it gets one from the session.
-	 * 
+	 *
 	 * @return The locale to be used for this component
 	 * @see Session#getLocale()
 	 */
@@ -1383,7 +1383,7 @@
 
 	/**
 	 * Convenience method to provide easy access to the localizer object within any component.
-	 * 
+	 *
 	 * @return The localizer object
 	 */
 	public final Localizer getLocalizer()
@@ -1393,14 +1393,14 @@
 
 	/**
 	 * THIS IS WICKET INTERNAL ONLY. DO NOT USE IT.
-	 * 
+	 *
 	 * Get a copy of the markup's attributes which are associated with the component.
 	 * <p>
 	 * Modifications to the map returned don't change the tags attributes. It is just a copy.
 	 * <p>
 	 * Note: The component must have been added (directly or indirectly) to a container with an
 	 * associated markup file (Page, Panel or Border).
-	 * 
+	 *
 	 * @return markup attributes
 	 */
 	public final ValueMap getMarkupAttributes()
@@ -1446,11 +1446,11 @@
 	 * <p>
 	 * Note: This method should only be called after the component or its parent have been added to
 	 * the page.
-	 * 
+	 *
 	 * @param createIfDoesNotExist
 	 *            When there is no existing markup id, determines whether it should be generated or
 	 *            whether <code>null</code> should be returned.
-	 * 
+	 *
 	 * @return markup id of the component
 	 */
 
@@ -1521,7 +1521,7 @@
 	 * <p>
 	 * Note: This method should only be called after the component or its parent have been added to
 	 * the page.
-	 * 
+	 *
 	 * @return markup id of the component
 	 */
 	public String getMarkupId()
@@ -1531,10 +1531,10 @@
 
 	/**
 	 * Gets metadata for this component using the given key.
-	 * 
+	 *
 	 * @param <M>
 	 *            The type of the metadata.
-	 * 
+	 *
 	 * @param key
 	 *            The key for the data
 	 * @return The metadata or null of no metadata was found for the given key
@@ -1572,7 +1572,7 @@
 
 	/**
 	 * Gets the model. It returns the object that wraps the backing model.
-	 * 
+	 *
 	 * @return The model
 	 */
 	public final IModel<T> getModel()
@@ -1591,7 +1591,7 @@
 
 	/**
 	 * Gets the backing model object; this is shorthand for getModel().getObject().
-	 * 
+	 *
 	 * @return The backing model object
 	 */
 	public final T getModelObject()
@@ -1614,10 +1614,10 @@
 	 * sensitive chars are escaped but not all none-ascii chars. Proper HTML encoding should be used
 	 * instead. In case you really need a fully escaped model string you may call
 	 * {@link Strings#escapeMarkup(String, boolean, boolean)} on the model string returned.
-	 * 
+	 *
 	 * @see Strings#escapeMarkup(String, boolean, boolean)
 	 * @see #getEscapeModelStrings()
-	 * 
+	 *
 	 * @return Model object for this component as a string
 	 */
 	public final String getModelObjectAsString()
@@ -1631,10 +1631,10 @@
 	 * sensitive chars are escaped but not all none-ascii chars. Proper HTML encoding should be used
 	 * instead. In case you really need a fully escaped model string you may call
 	 * {@link Strings#escapeMarkup(String, boolean, boolean)} on the model string returned.
-	 * 
+	 *
 	 * @see Strings#escapeMarkup(String, boolean, boolean)
 	 * @see #getEscapeModelStrings()
-	 * 
+	 *
 	 * @param modelObject
 	 *            Model object to convert to string
 	 * @return The string
@@ -1666,7 +1666,7 @@
 	/**
 	 * Gets whether or not component will output id attribute into the markup. id attribute will be
 	 * set to the value returned from {@link Component#getMarkupId()}.
-	 * 
+	 *
 	 * @return whether or not component will output id attribute into the markup
 	 */
 	public final boolean getOutputMarkupId()
@@ -1676,7 +1676,7 @@
 
 	/**
 	 * Gets whether or not an invisible component will render a placeholder tag.
-	 * 
+	 *
 	 * @return true if a placeholder tag should be rendered
 	 */
 	public final boolean getOutputMarkupPlaceholderTag()
@@ -1686,7 +1686,7 @@
 
 	/**
 	 * Gets the page holding this component.
-	 * 
+	 *
 	 * @return The page holding this component
 	 * @throws IllegalStateException
 	 *             Thrown if component is not yet attached to a Page.
@@ -1716,7 +1716,7 @@
 
 	/**
 	 * Gets the path to this component relative to the page it is in.
-	 * 
+	 *
 	 * @return The path to this component relative to the page it is in
 	 */
 	public final String getPageRelativePath()
@@ -1726,7 +1726,7 @@
 
 	/**
 	 * Gets any parent container, or null if there is none.
-	 * 
+	 *
 	 * @return Any parent container, or null if there is none
 	 */
 	public final MarkupContainer< ? > getParent()
@@ -1736,7 +1736,7 @@
 
 	/**
 	 * Gets this component's path.
-	 * 
+	 *
 	 * @return Colon separated path to this component in the component hierarchy
 	 */
 	public final String getPath()
@@ -1756,7 +1756,7 @@
 	/**
 	 * If false the component's tag will be printed as well as its body (which is default). If true
 	 * only the body will be printed, but not the component's tag.
-	 * 
+	 *
 	 * @return If true, the component tag will not be printed
 	 */
 	public final boolean getRenderBodyOnly()
@@ -1781,7 +1781,7 @@
 
 	/**
 	 * Gets the active request cycle for this component
-	 * 
+	 *
 	 * @return The request cycle
 	 */
 	public final RequestCycle getRequestCycle()
@@ -1799,7 +1799,7 @@
 
 	/**
 	 * Gets the current Session object.
-	 * 
+	 *
 	 * @return The Session that this component is in
 	 */
 	public Session getSession()
@@ -1869,9 +1869,9 @@
 
 	/**
 	 * Gets the style of this component (see {@link org.apache.wicket.Session}).
-	 * 
+	 *
 	 * @return The style of this component.
-	 * 
+	 *
 	 * @see org.apache.wicket.Session
 	 * @see org.apache.wicket.Session#getStyle()
 	 */
@@ -1897,7 +1897,7 @@
 	 * Gets the variation string of this component that will be used to look up markup for this
 	 * component. Subclasses can override this method to define by an instance what markup variation
 	 * should be picked up. By default it will return null or the value of a parent.
-	 * 
+	 *
 	 * @return The variation of this component.
 	 */
 	public String getVariation()
@@ -1912,7 +1912,7 @@
 
 	/**
 	 * Gets whether this component was rendered at least once.
-	 * 
+	 *
 	 * @return true if the component has been rendered before, false if it is merely constructed
 	 */
 	public final boolean hasBeenRendered()
@@ -1938,7 +1938,7 @@
 
 	/**
 	 * Registers an informational feedback message for this component
-	 * 
+	 *
 	 * @param message
 	 *            The feedback message
 	 */
@@ -1970,7 +1970,7 @@
 
 	/**
 	 * Authorizes an action for a component.
-	 * 
+	 *
 	 * @param action
 	 *            The action to authorize
 	 * @return True if the action is allowed
@@ -1989,7 +1989,7 @@
 
 	/**
 	 * Returns true if this component is an ancestor of the given component
-	 * 
+	 *
 	 * @param component
 	 *            The component to check
 	 * @return True if the given component has this component as an ancestor
@@ -2027,7 +2027,7 @@
 	 * Gets whether this component is enabled. Specific components may decide to implement special
 	 * behavior that uses this property, like web form components that add a disabled='disabled'
 	 * attribute when enabled is false.
-	 * 
+	 *
 	 * @return Whether this component is enabled.
 	 */
 	public boolean isEnabled()
@@ -2038,7 +2038,7 @@
 	/**
 	 * Checks the security strategy if the {@link Component#RENDER} action is allowed on this
 	 * component
-	 * 
+	 *
 	 * @return ture if {@link Component#RENDER} action is allowed, false otherwise
 	 */
 	public final boolean isRenderAllowed()
@@ -2050,7 +2050,7 @@
 	 * Returns if the component is stateless or not. It checks the stateless hint if that is false
 	 * it returns directly false. If that is still true it checks all its behaviors if they can be
 	 * stateless.
-	 * 
+	 *
 	 * @return whether the component is stateless.
 	 */
 	public final boolean isStateless()
@@ -2106,7 +2106,7 @@
 	 * method, it is a good idea to keep it cheap in terms of processing. Alternatively, you can
 	 * call {@link #setVisible(boolean)}.
 	 * <p>
-	 * 
+	 *
 	 * @return True if component and any children are visible
 	 */
 	public boolean isVisible()
@@ -2116,7 +2116,7 @@
 
 	/**
 	 * Checks if the component itself and all its parents are visible.
-	 * 
+	 *
 	 * @return true if the component and all its parents are visible.
 	 */
 	public final boolean isVisibleInHierarchy()
@@ -2174,7 +2174,7 @@
 
 	/**
 	 * Creates a new page using the component's page factory
-	 * 
+	 *
 	 * @param c
 	 *            The class of page to create
 	 * @return The new page
@@ -2186,7 +2186,7 @@
 
 	/**
 	 * Creates a new page using the component's page factory
-	 * 
+	 *
 	 * @param c
 	 *            The class of page to create
 	 * @param parameters
@@ -2200,7 +2200,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
-	 * 
+	 *
 	 * Prepares the component and it's children for rendering. On whole page render this method must
 	 * be called on the page. On AJAX request, this method must be called on updated component.
 	 */
@@ -2230,10 +2230,10 @@
 	 * is saved for future use by method continueToOriginalDestination(); Only use this method when
 	 * you plan to continue to the current url at some later time; otherwise just use
 	 * setResponsePage or - when you are in a constructor or checkAccessMethod, call redirectTo.
-	 * 
+	 *
 	 * @param page
 	 *            The sign in page
-	 * 
+	 *
 	 * @see Component#continueToOriginalDestination()
 	 */
 	public final void redirectToInterceptPage(final Page page)
@@ -2257,10 +2257,10 @@
 
 	/**
 	 * Removes behavior from component
-	 * 
+	 *
 	 * @param behavior
 	 *            behavior to remove
-	 * 
+	 *
 	 * @return this (to allow method call chaining)
 	 */
 	public Component<T> remove(final IBehavior behavior)
@@ -2325,7 +2325,7 @@
 	 * <p>
 	 * For component level re-render (e.g. AJAX) please call {@link #renderComponent(MarkupStream)}.
 	 * Though render() does seem to work, it will fail for panel children.
-	 * 
+	 *
 	 * @param markupStream
 	 */
 	public final void render(final MarkupStream markupStream)
@@ -2484,7 +2484,7 @@
 	 * Renders the component at the current position in the given markup stream. The method
 	 * onComponentTag() is called to allow the component to mutate the start tag. The method
 	 * onComponentTagBody() is then called to permit the component to render its body.
-	 * 
+	 *
 	 * @param markupStream
 	 *            The markup stream
 	 */
@@ -2590,7 +2590,7 @@
 	 * NOT intended for overriding by framework clients. Rather, use
 	 * {@link IHeaderContributor#renderHead(org.apache.wicket.markup.html.IHeaderResponse)}
 	 * </p>
-	 * 
+	 *
 	 * @param container
 	 *            The HtmlHeaderContainer
 	 */
@@ -2626,9 +2626,9 @@
 	 * as this component. This method serves as a shortcut to
 	 * <code>this.getParent().replace(replacement)</code> and provides a better context for
 	 * errors.
-	 * 
+	 *
 	 * @since 1.2.1
-	 * 
+	 *
 	 * @param replacement
 	 *            component to replace this one
 	 */
@@ -2685,7 +2685,7 @@
 	/**
 	 * Assigns a component border to this component. If called with <code>null</code> any previous
 	 * border will be cleared.
-	 * 
+	 *
 	 * @param border
 	 *            component border to assign, or <code>null</code> to clear any previous
 	 * @return component for chaining
@@ -2706,7 +2706,7 @@
 	 * attribute when enabled is false. If it is not enabled, it will not be allowed to call any
 	 * listener method on it (e.g. Link.onClick) and the model object will be protected (for the
 	 * common use cases, not for programmer's misuse)
-	 * 
+	 *
 	 * @param enabled
 	 *            whether this component is enabled
 	 * @return This
@@ -2734,7 +2734,7 @@
 
 	/**
 	 * Sets whether model strings should be escaped.
-	 * 
+	 *
 	 * @param escapeMarkup
 	 *            True is model strings should be escaped
 	 * @return This
@@ -2771,9 +2771,9 @@
 	 * <p>
 	 * If null is passed in the user defined value is cleared and markup id value will fall back on
 	 * automatically generated value
-	 * 
+	 *
 	 * @see #getMarkupId()
-	 * 
+	 *
 	 * @param markupId
 	 *            markup id value or null to clear any previous user defined value
 	 */
@@ -2795,10 +2795,10 @@
 	 * Sets the metadata for this component using the given key. If the metadata object is not of
 	 * the correct type for the metadata key, an IllegalArgumentException will be thrown. For
 	 * information on creating MetaDataKeys, see {@link MetaDataKey}.
-	 * 
+	 *
 	 * @param <M>
 	 *            The type of the metadata
-	 * 
+	 *
 	 * @param key
 	 *            The singleton key for the metadata
 	 * @param object
@@ -2839,7 +2839,7 @@
 	 * WARNING: DO NOT OVERRIDE THIS METHOD UNLESS YOU HAVE A VERY GOOD REASON FOR IT. OVERRIDING
 	 * THIS MIGHT OPEN UP SECURITY LEAKS AND BREAK BACK-BUTTON SUPPORT.
 	 * </p>
-	 * 
+	 *
 	 * @param model
 	 *            The model
 	 * @return This
@@ -2875,8 +2875,8 @@
 	}
 
 	/**
-	 * 
-	 * 
+	 *
+	 *
 	 * @return
 	 */
 	@SuppressWarnings("unchecked")
@@ -2893,7 +2893,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param model
 	 */
 	void setModelImpl(IModel<T> model)
@@ -2922,7 +2922,7 @@
 
 	/**
 	 * Sets the backing model object; shorthand for getModel().setObject(object).
-	 * 
+	 *
 	 * @param object
 	 *            The object to set
 	 * @return This
@@ -2958,13 +2958,13 @@
 	/**
 	 * Sets whether or not component will output id attribute into the markup. id attribute will be
 	 * set to the value returned from {@link Component#getMarkupId()}.
-	 * 
+	 *
 	 * @param output
 	 *            True if the component will out the id attribute into markup. Please note that the
 	 *            default behavior is to use the same id as the component. This means that your
 	 *            component must begin with [a-zA-Z] in order to generate a valid markup id
 	 *            according to: http://www.w3.org/TR/html401/types.html#type-name
-	 * 
+	 *
 	 * @return this for chaining
 	 */
 	public final Component<T> setOutputMarkupId(final boolean output)
@@ -2977,15 +2977,15 @@
 	 * Render a placeholder tag when the component is not visible. The tag is of form:
 	 * &lt;componenttag style="display:none;" id="componentid"/&gt;. This method will also call
 	 * <code>setOutputMarkupId(true)</code>.
-	 * 
+	 *
 	 * This is useful, for example, in ajax situations where the component starts out invisible and
 	 * then becomes visible through an ajax update. With a placeholder tag already in the markup you
 	 * do not need to repaint this component's parent, instead you can repaint the component
 	 * directly.
-	 * 
+	 *
 	 * When this method is called with parameter <code>false</code> the outputmarkupid flag is not
 	 * reverted to false.
-	 * 
+	 *
 	 * @param outputTag
 	 * @return this for chaining
 	 */
@@ -3021,7 +3021,7 @@
 	/**
 	 * If false the component's tag will be printed as well as its body (which is default). If true
 	 * only the body will be printed, but not the component's tag.
-	 * 
+	 *
 	 * @param renderTag
 	 *            If true, the component tag will not be printed
 	 * @return This
@@ -3034,7 +3034,7 @@
 
 	/**
 	 * Sets the page that will respond to this request
-	 * 
+	 *
 	 * @param cls
 	 *            The response page class
 	 * @see RequestCycle#setResponsePage(Class)
@@ -3047,7 +3047,7 @@
 
 	/**
 	 * Sets the page class and its parameters that will respond to this request
-	 * 
+	 *
 	 * @param cls
 	 *            The response page class
 	 * @param parameters
@@ -3061,7 +3061,7 @@
 
 	/**
 	 * Sets the page that will respond to this request
-	 * 
+	 *
 	 * @param page
 	 *            The response page
 	 * @see RequestCycle#setResponsePage(Page)
@@ -3085,7 +3085,7 @@
 
 	/**
 	 * Sets whether this component and any children are visible.
-	 * 
+	 *
 	 * @param visible
 	 *            True if this component and any children should be visible
 	 * @return This
@@ -3106,7 +3106,7 @@
 
 	/**
 	 * Gets the string representation of this component.
-	 * 
+	 *
 	 * @return The path to this component
 	 */
 	@Override
@@ -3158,9 +3158,9 @@
 	 * Returns a bookmarkable URL that references a given page class using a given set of page
 	 * parameters. Since the URL which is returned contains all information necessary to instantiate
 	 * and render the page, it can be stored in a user's browser as a stable bookmark.
-	 * 
+	 *
 	 * @see RequestCycle#urlFor(IPageMap, Class, PageParameters)
-	 * 
+	 *
 	 * @param pageClass
 	 *            Class of page
 	 * @param parameters
@@ -3176,7 +3176,7 @@
 	/**
 	 * Gets a URL for the listener interface on a behavior (e.g. IBehaviorListener on
 	 * AjaxPagingNavigationBehavior).
-	 * 
+	 *
 	 * @param behaviour
 	 *            The behavior that the URL should point to
 	 * @param listener
@@ -3193,17 +3193,17 @@
 	 * Returns a bookmarkable URL that references a given page class using a given set of page
 	 * parameters. Since the URL which is returned contains all information necessary to instantiate
 	 * and render the page, it can be stored in a user's browser as a stable bookmark.
-	 * 
+	 *
 	 * @see RequestCycle#urlFor(IPageMap, Class, PageParameters)
-	 * 
+	 *
 	 * @param pageMap
 	 *            Page map to use
 	 * @param pageClass
 	 *            Class of page
 	 * @param parameters
 	 *            Parameters to page
-	 * 
-	 * 
+	 *
+	 *
 	 * @return Bookmarkable URL to page
 	 */
 	public final CharSequence urlFor(final IPageMap pageMap,
@@ -3214,12 +3214,12 @@
 
 	/**
 	 * Returns a URL that references the given request target.
-	 * 
+	 *
 	 * @see RequestCycle#urlFor(IRequestTarget)
-	 * 
+	 *
 	 * @param requestTarget
 	 *            the request target to reference
-	 * 
+	 *
 	 * @return a URL that references the given request target
 	 */
 	public final CharSequence urlFor(final IRequestTarget requestTarget)
@@ -3229,7 +3229,7 @@
 
 	/**
 	 * Gets a URL for the listener interface (e.g. ILinkListener).
-	 * 
+	 *
 	 * @param listener
 	 *            The listener interface that the URL should call
 	 * @return The URL
@@ -3241,9 +3241,9 @@
 
 	/**
 	 * Returns a URL that references a shared resource through the provided resource reference.
-	 * 
+	 *
 	 * @see RequestCycle#urlFor(ResourceReference)
-	 * 
+	 *
 	 * @param resourceReference
 	 *            The resource reference
 	 * @return The url for the shared resource
@@ -3256,7 +3256,7 @@
 	/**
 	 * Traverses all parent components of the given class in this container, calling the visitor's
 	 * visit method at each one.
-	 * 
+	 *
 	 * @param c
 	 *            Class
 	 * @param visitor
@@ -3290,7 +3290,7 @@
 
 	/**
 	 * Registers a warning feedback message for this component.
-	 * 
+	 *
 	 * @param message
 	 *            The feedback message
 	 */
@@ -3343,7 +3343,7 @@
 
 	/**
 	 * Adds state change to page.
-	 * 
+	 *
 	 * @param change
 	 *            The change
 	 */
@@ -3359,7 +3359,7 @@
 
 	/**
 	 * Checks whether the given type has the expected name.
-	 * 
+	 *
 	 * @param tag
 	 *            The tag to check
 	 * @param name
@@ -3379,7 +3379,7 @@
 
 	/**
 	 * Checks that a given tag has a required attribute value.
-	 * 
+	 *
 	 * @param tag
 	 *            The tag
 	 * @param key
@@ -3407,7 +3407,7 @@
 	/**
 	 * Checks whether the hierarchy may be changed at all, and throws an exception if this is not
 	 * the case.
-	 * 
+	 *
 	 * @param component
 	 *            the component which is about to be added or removed
 	 */
@@ -3441,7 +3441,7 @@
 
 	/**
 	 * Prefixes an exception message with useful information about this. component.
-	 * 
+	 *
 	 * @param message
 	 *            The message
 	 * @return The modified message
@@ -3453,7 +3453,7 @@
 
 	/**
 	 * Finds the markup stream for this component.
-	 * 
+	 *
 	 * @return The markup stream for this component. Since a Component cannot have a markup stream,
 	 *         we ask this component's parent to search for it.
 	 */
@@ -3471,7 +3471,7 @@
 	/**
 	 * If this Component is a Page, returns self. Otherwise, searches for the nearest Page parent in
 	 * the component hierarchy. If no Page parent can be found, null is returned.
-	 * 
+	 *
 	 * @return The Page or null if none can be found
 	 */
 	protected final Page findPage()
@@ -3484,10 +3484,10 @@
 	 * Gets the subset of the currently coupled {@link IBehavior}s that are of the provided type as
 	 * a unmodifiable list or null if there are no behaviors attached. Returns an empty list rather
 	 * than null if there are no behaviors coupled to this component.
-	 * 
+	 *
 	 * @param type
 	 *            The type or null for all
-	 * 
+	 *
 	 * @return The subset of the currently coupled behaviors that are of the provided type as a
 	 *         unmodifiable list or null
 	 */
@@ -3513,7 +3513,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
-	 * 
+	 *
 	 * @param flag
 	 *            The flag to test
 	 * @return True if the flag is set
@@ -3525,7 +3525,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
-	 * 
+	 *
 	 * @param flag
 	 *            The flag to test
 	 * @return True if the flag is set
@@ -3537,7 +3537,7 @@
 
 	/**
 	 * Finds the innermost IModel object for an IModel that might contain nested IModel(s).
-	 * 
+	 *
 	 * @param model
 	 *            The model
 	 * @return The innermost (most nested) model
@@ -3561,7 +3561,7 @@
 	 * Gets the value defaultModelComparator. Implementations of this interface can be used in the
 	 * Component.getComparator() for testing the current value of the components model data with the
 	 * new value that is given.
-	 * 
+	 *
 	 * @return the value defaultModelComparator
 	 */
 	protected IModelComparator<T> getModelComparator()
@@ -3574,7 +3574,7 @@
 	 * stateless, otherwise the component will be treat as stateful. In order for page to be
 	 * stateless (and not to be stored in session), all components (and component behaviors) must be
 	 * stateless.
-	 * 
+	 *
 	 * @return whether the component can be stateless
 	 */
 	protected boolean getStatelessHint()
@@ -3586,7 +3586,7 @@
 	 * Called when a null model is about to be retrieved in order to allow a subclass to provide an
 	 * initial model. This gives FormComponent, for example, an opportunity to instantiate a model
 	 * on the fly using the containing Form's model.
-	 * 
+	 *
 	 * @return The model
 	 */
 	@SuppressWarnings("unchecked")
@@ -3622,9 +3622,9 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.
-	 * 
+	 *
 	 * Called when a request begins.
-	 * 
+	 *
 	 * @Deprecated use {@link #onBeforeRender()} instead
 	 */
 	protected final void internalOnAttach()
@@ -3633,11 +3633,11 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.
-	 * 
+	 *
 	 * Called when a request ends.
-	 * 
+	 *
 	 * @Deprecated use {@link #onBeforeRender()} instead
-	 * 
+	 *
 	 */
 	protected final void internalOnDetach()
 	{
@@ -3645,7 +3645,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR OVERRIDE.
-	 * 
+	 *
 	 * Called anytime a model is changed via setModel or setModelObject.
 	 */
 	protected void internalOnModelChanged()
@@ -3654,7 +3654,7 @@
 
 	/**
 	 * Convenience method that sets the attached flags.
-	 * 
+	 *
 	 * @param attached
 	 */
 	protected final void markAttached(boolean attached)
@@ -3672,7 +3672,7 @@
 
 	/**
 	 * Components are allowed to reject behavior modifiers.
-	 * 
+	 *
 	 * @param behavior
 	 * @return False, if the component should not apply this behavior
 	 */
@@ -3690,7 +3690,7 @@
 
 	/**
 	 * If true, all attribute modifiers will be ignored
-	 * 
+	 *
 	 * @return True, if attribute modifiers are to be ignored
 	 */
 	protected final boolean isIgnoreAttributeModifier()
@@ -3723,7 +3723,7 @@
 	 * <p>
 	 * If you need to get notification when page is taken out of Session (before calling the event
 	 * listener), you can use the {@link Page#onPageAttached()} method.
-	 * 
+	 *
 	 * @deprecated
 	 */
 	@Deprecated
@@ -3737,11 +3737,11 @@
 	 * <p>
 	 * *NOTE* If you override this, you *must* call super.onBeforeRender() within your
 	 * implementation.
-	 * 
+	 *
 	 * Because this method is responsible for cascading {@link #onBeforeRender()} call to its
 	 * children it is strongly recommended that super call is made at the end of the override.
 	 * </p>
-	 * 
+	 *
 	 * @see Component#callOnBeforeRenderIfNotVisible()
 	 */
 	protected void onBeforeRender()
@@ -3754,10 +3754,10 @@
 	/**
 	 * Override this method if you want onBeforeRender to be called even when your component is not
 	 * visible. default this returns false.
-	 * 
+	 *
 	 * @return boolean, if true then onBeforeRender is called even for none visible components,
 	 *         default false.
-	 * 
+	 *
 	 * @see Component#onBeforeRender()
 	 */
 	protected boolean callOnBeforeRenderIfNotVisible()
@@ -3777,7 +3777,7 @@
 
 	/**
 	 * Processes the component tag.
-	 * 
+	 *
 	 * @param tag
 	 *            Tag to modify
 	 */
@@ -3795,7 +3795,7 @@
 
 	/**
 	 * Processes the body.
-	 * 
+	 *
 	 * @param markupStream
 	 *            The markup stream
 	 * @param openTag
@@ -3807,11 +3807,11 @@
 
 	/**
 	 * Called to allow a component to detach resources after use.
-	 * 
+	 *
 	 * Overrides of this method MUST call the super implementation, the most logical place to do
 	 * this is the last line of the override method.
-	 * 
-	 * 
+	 *
+	 *
 	 */
 	protected void onDetach()
 	{
@@ -3845,7 +3845,7 @@
 
 	/**
 	 * Implementation that renders this component.
-	 * 
+	 *
 	 * @since Wicket 1.2
 	 * @param markupStream
 	 */
@@ -3855,7 +3855,7 @@
 	 * Writes a simple tag out to the response stream. Any components that might be referenced by
 	 * the tag are ignored. Also undertakes any tag attribute modifications if they have been added
 	 * to the component.
-	 * 
+	 *
 	 * @param tag
 	 *            The tag to write
 	 */
@@ -3906,7 +3906,7 @@
 
 	/**
 	 * Replaces the body with the given one.
-	 * 
+	 *
 	 * @param markupStream
 	 *            The markup stream to replace the tag body in
 	 * @param tag
@@ -3971,7 +3971,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
-	 * 
+	 *
 	 * @param flag
 	 *            The flag to set
 	 * @param set
@@ -3991,7 +3991,7 @@
 
 	/**
 	 * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT!
-	 * 
+	 *
 	 * @param flag
 	 *            The flag to set
 	 * @param set
@@ -4004,7 +4004,7 @@
 
 	/**
 	 * If true, all attribute modifiers will be ignored
-	 * 
+	 *
 	 * @param ignore
 	 *            If true, all attribute modifiers will be ignored
 	 * @return This
@@ -4018,10 +4018,10 @@
 	/**
 	 * The markup stream will be assigned to the component at the beginning of the component render
 	 * phase. It is temporary working variable only.
-	 * 
+	 *
 	 * @see #findMarkupStream()
 	 * @see MarkupContainer#getMarkupStream()
-	 * 
+	 *
 	 * @param markupStream
 	 *            The current markup stream which should be applied by the component to render
 	 *            itself
@@ -4055,7 +4055,7 @@
 
 	/**
 	 * Gets the component at the given path.
-	 * 
+	 *
 	 * @param path
 	 *            Path to component
 	 * @return The component at the path
@@ -4075,7 +4075,7 @@
 	/**
 	 * Checks whether or not this component has a markup id value generated, whether it is automatic
 	 * or user defined
-	 * 
+	 *
 	 * @return true if this component has a markup id value generated
 	 */
 	final boolean hasMarkupIdMetaData()
@@ -4084,7 +4084,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	void internalMarkRendering()
 	{
@@ -4109,7 +4109,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @return
 	 */
 	boolean isPreparedForRender()
@@ -4118,7 +4118,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	void onAfterRenderChildren()
 	{
@@ -4136,7 +4136,7 @@
 
 	/**
 	 * Renders the close tag at the current position in the markup stream.
-	 * 
+	 *
 	 * @param markupStream
 	 *            the markup stream
 	 * @param openTag
@@ -4186,7 +4186,7 @@
 	/**
 	 * Sets the id of this component. This method is private because the only time a component's id
 	 * can be set is in its constructor.
-	 * 
+	 *
 	 * @param id
 	 *            The non-null id of this component
 	 */
@@ -4201,7 +4201,7 @@
 
 	/**
 	 * Sets the parent of a component.
-	 * 
+	 *
 	 * @param parent
 	 *            The parent container
 	 */
@@ -4216,7 +4216,7 @@
 
 	/**
 	 * Sets the render allowed flag.
-	 * 
+	 *
 	 * @param renderAllowed
 	 */
 	final void setRenderAllowed(boolean renderAllowed)
@@ -4226,7 +4226,7 @@
 
 	/**
 	 * Sets the render allowed flag.
-	 * 
+	 *
 	 * Visit all this page's children (overridden in MarkupContainer) to check rendering
 	 * authorization, as appropriate. We set any result; positive or negative as a temporary boolean
 	 * in the components, and when a authorization exception is thrown it will block the rendering
@@ -4243,7 +4243,7 @@
 	 * {@link #setVisible(boolean)} will not always have a desired effect because that component may
 	 * have {@link #isVisible()} overridden. Both {@link #setVisibilityAllowed(boolean)} and
 	 * {@link #isVisibilityAllowed()} are <code>final</code> so their contract is enforced always.
-	 * 
+	 *
 	 * @param allowed
 	 * @return <code>this</code> for chaining
 	 */
@@ -4256,7 +4256,7 @@
 	/**
 	 * Gets whether or not visibility is allowed on this component. See
 	 * {@link #setVisibilityAllowed(boolean)} for details.
-	 * 
+	 *
 	 * @return true if this component is allowed to be visible, false otherwise.
 	 */
 	public final boolean isVisibilityAllowed()
@@ -4267,7 +4267,7 @@
 	/**
 	 * Determines whether or not a component should be visible, taking into account all the factors:
 	 * {@link #isVisible()}, {@link #isVisibilityAllowed()}, {@link #isRenderAllowed()}
-	 * 
+	 *
 	 * @return <code>true</code> if the component should be visible, <code>false</code>
 	 *         otherwise
 	 */
@@ -4277,7 +4277,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param s
 	 * @throws IOException
 	 */
@@ -4294,7 +4294,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param s
 	 * @throws IOException
 	 * @throws ClassNotFoundException