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 2012/03/07 09:39:03 UTC
[3/19] WICKET-4439 Move classes around so that there are no two
packages with the same name in different modules
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java b/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
index 7763085..0837273 100644
--- a/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
@@ -17,6 +17,8 @@
package org.apache.wicket;
+import org.apache.wicket.util.io.IClusterable;
+
/**
* Base interface for all interfaces that listen for requests from the client browser. All
* sub-interfaces of this interface must have a single method which takes no arguments.
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/Localizer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Localizer.java b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
index d70216e..b6d9bf2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Localizer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Localizer.java
@@ -31,7 +31,7 @@ import org.apache.wicket.resource.loader.IStringResourceLoader;
import org.apache.wicket.settings.IResourceSettings;
import org.apache.wicket.util.lang.Generics;
import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.string.interpolator.PropertyVariableInterpolator;
+import org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
index d005e15..9727ba6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
@@ -40,10 +40,11 @@ import org.apache.wicket.model.IComponentInheritedModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IWrapModel;
import org.apache.wicket.settings.IDebugSettings;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.util.iterator.ComponentHierarchyIterator;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.lang.Generics;
-import org.apache.wicket.util.string.ComponentStrings;
+import org.apache.wicket.core.util.string.ComponentStrings;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.util.visit.ClassVisitFilter;
import org.apache.wicket.util.visit.IVisit;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/MetaDataEntry.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MetaDataEntry.java b/wicket-core/src/main/java/org/apache/wicket/MetaDataEntry.java
index 145f643..6847a0d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MetaDataEntry.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MetaDataEntry.java
@@ -17,6 +17,8 @@
package org.apache.wicket;
+import org.apache.wicket.util.io.IClusterable;
+
/**
* Class used for holding meta data entries.
*
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java b/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
index 33d3e8a..64bb616 100644
--- a/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
+++ b/wicket-core/src/main/java/org/apache/wicket/MetaDataKey.java
@@ -17,6 +17,8 @@
package org.apache.wicket;
+import org.apache.wicket.util.io.IClusterable;
+
/**
* A key to a piece of metadata associated with a {@link Component}, {@link Session} or
* {@link Application} at runtime. The key contains type information that can be used to check the
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/Page.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java
index 849088b..e739e87 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Page.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Page.java
@@ -38,7 +38,7 @@ import org.apache.wicket.settings.IDebugSettings;
import org.apache.wicket.settings.IPageSettings;
import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy;
import org.apache.wicket.util.lang.Generics;
-import org.apache.wicket.util.lang.WicketObjects;
+import org.apache.wicket.core.util.lang.WicketObjects;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/PageReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/PageReference.java b/wicket-core/src/main/java/org/apache/wicket/PageReference.java
index 1e8208e..9a035df 100644
--- a/wicket-core/src/main/java/org/apache/wicket/PageReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/PageReference.java
@@ -17,6 +17,8 @@
package org.apache.wicket;
+import org.apache.wicket.util.io.IClusterable;
+
/**
* Unique identifier of a page instance
*
@@ -31,9 +33,7 @@ public class PageReference implements IClusterable
/**
* Constructor
*
- * @param pageMapName
* @param pageId
- * @param version
*/
PageReference(int pageId)
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java b/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
index 940c15b..a3c67bd 100644
--- a/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
+++ b/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
@@ -27,7 +27,7 @@ import org.apache.wicket.authorization.AuthorizationException;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.request.RequestHandlerStack.ReplaceHandlerException;
import org.apache.wicket.request.component.IRequestableComponent;
-import org.apache.wicket.request.handler.ListenerInvocationNotAllowedException;
+import org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java b/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
index 6c425c0..1fbd4b6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
+++ b/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
@@ -31,9 +31,9 @@ import org.apache.wicket.request.Url;
import org.apache.wicket.request.Url.QueryParameter;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.flow.ResetResponseException;
-import org.apache.wicket.request.handler.PageProvider;
-import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.handler.RedirectRequestHandler;
import org.apache.wicket.request.mapper.parameter.PageParameters;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/RestartResponseException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/RestartResponseException.java b/wicket-core/src/main/java/org/apache/wicket/RestartResponseException.java
index 406900b..c991124 100644
--- a/wicket-core/src/main/java/org/apache/wicket/RestartResponseException.java
+++ b/wicket-core/src/main/java/org/apache/wicket/RestartResponseException.java
@@ -18,10 +18,10 @@ package org.apache.wicket;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.flow.ResetResponseException;
-import org.apache.wicket.request.handler.IPageProvider;
-import org.apache.wicket.request.handler.PageProvider;
-import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
+import org.apache.wicket.core.request.handler.IPageProvider;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
import org.apache.wicket.request.mapper.parameter.PageParameters;
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/Session.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java
index 5ae3e0e..c679d45 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Session.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Session.java
@@ -26,21 +26,22 @@ import java.util.Map;
import org.apache.wicket.application.IClassResolver;
import org.apache.wicket.authorization.IAuthorizationStrategy;
+import org.apache.wicket.core.request.ClientInfo;
+import org.apache.wicket.core.util.lang.WicketObjects;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.event.IEventSink;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.FeedbackMessages;
import org.apache.wicket.page.IPageManager;
import org.apache.wicket.page.PageAccessSynchronizer;
-import org.apache.wicket.request.ClientInfo;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.session.ISessionStore;
import org.apache.wicket.settings.IApplicationSettings;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.util.IProvider;
import org.apache.wicket.util.LazyInitializer;
import org.apache.wicket.util.lang.Objects;
-import org.apache.wicket.util.lang.WicketObjects;
import org.apache.wicket.util.tester.BaseWicketTester;
import org.apache.wicket.util.time.Duration;
import org.slf4j.Logger;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java b/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
index 712dd33..7883435 100644
--- a/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/SystemMapper.java
@@ -17,12 +17,12 @@
package org.apache.wicket;
import org.apache.wicket.request.component.IRequestablePage;
-import org.apache.wicket.request.mapper.BookmarkableMapper;
-import org.apache.wicket.request.mapper.BufferedResponseMapper;
+import org.apache.wicket.core.request.mapper.BookmarkableMapper;
+import org.apache.wicket.core.request.mapper.BufferedResponseMapper;
import org.apache.wicket.request.mapper.CompoundRequestMapper;
-import org.apache.wicket.request.mapper.HomePageMapper;
-import org.apache.wicket.request.mapper.PageInstanceMapper;
-import org.apache.wicket.request.mapper.ResourceReferenceMapper;
+import org.apache.wicket.core.request.mapper.HomePageMapper;
+import org.apache.wicket.core.request.mapper.PageInstanceMapper;
+import org.apache.wicket.core.request.mapper.ResourceReferenceMapper;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
import org.apache.wicket.util.ClassProvider;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
index ef127e9..a7c3e0a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
@@ -17,11 +17,8 @@
package org.apache.wicket.ajax;
import org.apache.wicket.Component;
-import org.apache.wicket.ajax.json.JSONException;
-import org.apache.wicket.ajax.json.JSONObject;
-import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.markup.head.OnLoadHeaderItem;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.util.time.Duration;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxChannel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxChannel.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxChannel.java
index a22b81d..55f79c1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxChannel.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxChannel.java
@@ -16,7 +16,7 @@
*/
package org.apache.wicket.ajax;
-import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.util.lang.Args;
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
index b9dffa9..a226ca7 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestHandler.java
@@ -28,6 +28,9 @@ import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.core.request.handler.logger.PageLogData;
import org.apache.wicket.event.Broadcast;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.request.IRequestCycle;
@@ -35,9 +38,6 @@ import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Response;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.request.handler.PageProvider;
-import org.apache.wicket.request.handler.RenderPageRequestHandler;
-import org.apache.wicket.request.handler.logger.PageLogData;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -175,7 +175,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#getPage()
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPage()
*/
@Override
public Page getPage()
@@ -266,7 +266,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#detach(org.apache.wicket.request.IRequestCycle)
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#detach(org.apache.wicket.request.IRequestCycle)
*/
@Override
public void detach(final IRequestCycle requestCycle)
@@ -318,7 +318,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#respond(org.apache.wicket.request.IRequestCycle)
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#respond(org.apache.wicket.request.IRequestCycle)
*/
@Override
public final void respond(final IRequestCycle requestCycle)
@@ -423,7 +423,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#getPageClass()
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPageClass()
*/
@Override
public Class<? extends IRequestablePage> getPageClass()
@@ -432,7 +432,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#getPageId()
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPageId()
*/
@Override
public Integer getPageId()
@@ -441,7 +441,7 @@ public class AjaxRequestHandler implements AjaxRequestTarget
}
/**
- * @see org.apache.wicket.request.handler.IPageRequestHandler#getPageParameters()
+ * @see org.apache.wicket.core.request.handler.IPageRequestHandler#getPageParameters()
*/
@Override
public PageParameters getPageParameters()
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
index 0ad5b51..47de47f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
@@ -24,7 +24,7 @@ import org.apache.wicket.MarkupContainer;
import org.apache.wicket.Page;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.request.ILoggableRequestHandler;
-import org.apache.wicket.request.handler.IPageRequestHandler;
+import org.apache.wicket.core.request.handler.IPageRequestHandler;
/**
*
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxRequestAttributes.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxRequestAttributes.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxRequestAttributes.java
index c34c0be..d15e653 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxRequestAttributes.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/AjaxRequestAttributes.java
@@ -16,14 +16,14 @@
*/
package org.apache.wicket.ajax.attributes;
-import org.apache.wicket.ajax.AjaxChannel;
-import org.apache.wicket.util.lang.Args;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.wicket.ajax.AjaxChannel;
+import org.apache.wicket.util.lang.Args;
+
/**
* Attributes of an Ajax Request.
*
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java
index 06c086e..7750715 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/IAjaxCallListener.java
@@ -17,7 +17,7 @@
package org.apache.wicket.ajax.attributes;
import org.apache.wicket.Component;
-import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.io.IClusterable;
/**
* Interface used to listen at the most important points when Wicket performs an Ajax callback.
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/JavaScriptFunctionBody.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/JavaScriptFunctionBody.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/JavaScriptFunctionBody.java
index 908677b..4e7fcc4 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/JavaScriptFunctionBody.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/JavaScriptFunctionBody.java
@@ -17,7 +17,7 @@
package org.apache.wicket.ajax.attributes;
import org.apache.wicket.Component;
-import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.html.IComponentAwareHeaderContributor;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/ThrottlingSettings.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/ThrottlingSettings.java b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/ThrottlingSettings.java
index 4610dd9..0893d86 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/ThrottlingSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/attributes/ThrottlingSettings.java
@@ -16,7 +16,7 @@
*/
package org.apache.wicket.ajax.attributes;
-import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.util.time.Duration;
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
index cb04abf..4f4c034 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
@@ -17,13 +17,13 @@
package org.apache.wicket.ajax.form;
import org.apache.wicket.Component;
-import org.apache.wicket.IClusterable;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.attributes.ThrottlingSettings;
import org.apache.wicket.feedback.IFeedback;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.util.io.IClusterable;
import org.apache.wicket.util.time.Duration;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/application/HeaderContributorListenerCollection.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/application/HeaderContributorListenerCollection.java b/wicket-core/src/main/java/org/apache/wicket/application/HeaderContributorListenerCollection.java
index e3567b0..6a3a976 100644
--- a/wicket-core/src/main/java/org/apache/wicket/application/HeaderContributorListenerCollection.java
+++ b/wicket-core/src/main/java/org/apache/wicket/application/HeaderContributorListenerCollection.java
@@ -16,8 +16,8 @@
*/
package org.apache.wicket.application;
-import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.IHeaderContributor;
import org.apache.wicket.util.listener.ListenerCollection;
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/authorization/UnauthorizedInstantiationException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/authorization/UnauthorizedInstantiationException.java b/wicket-core/src/main/java/org/apache/wicket/authorization/UnauthorizedInstantiationException.java
index ff9ca2a..8e76aef 100644
--- a/wicket-core/src/main/java/org/apache/wicket/authorization/UnauthorizedInstantiationException.java
+++ b/wicket-core/src/main/java/org/apache/wicket/authorization/UnauthorizedInstantiationException.java
@@ -17,7 +17,7 @@
package org.apache.wicket.authorization;
import org.apache.wicket.request.component.IRequestableComponent;
-import org.apache.wicket.util.lang.WicketObjects;
+import org.apache.wicket.core.util.lang.WicketObjects;
/**
* Exception that is thrown when the creation of a component is not allowed.
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/authorization/strategies/action/IActionAuthorizer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/authorization/strategies/action/IActionAuthorizer.java b/wicket-core/src/main/java/org/apache/wicket/authorization/strategies/action/IActionAuthorizer.java
index 3a06e57..5896c8b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/authorization/strategies/action/IActionAuthorizer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/authorization/strategies/action/IActionAuthorizer.java
@@ -17,8 +17,8 @@
package org.apache.wicket.authorization.strategies.action;
import org.apache.wicket.Component;
-import org.apache.wicket.IClusterable;
import org.apache.wicket.authorization.Action;
+import org.apache.wicket.util.io.IClusterable;
/**
* A way to provide authorization for a specific component action.
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
index d483bf3..22115f1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
@@ -20,12 +20,12 @@ import java.lang.reflect.Method;
import org.apache.wicket.Application;
import org.apache.wicket.Component;
-import org.apache.wicket.IClusterable;
import org.apache.wicket.IComponentAwareEventSink;
import org.apache.wicket.event.IEvent;
import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.IComponentAwareHeaderContributor;
import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.html.IComponentAwareHeaderContributor;
+import org.apache.wicket.util.io.IClusterable;
/**
* Behaviors are kind of plug-ins for Components. They allow functionality to be added to a
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/ClientInfo.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/ClientInfo.java b/wicket-core/src/main/java/org/apache/wicket/core/request/ClientInfo.java
new file mode 100644
index 0000000..8de9b0f
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/ClientInfo.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request;
+
+import org.apache.wicket.util.io.IClusterable;
+
+/**
+ * Encapsulates information about the request cycle agents' capabilities.
+ *
+ * @author Eelco Hillenius
+ */
+public abstract class ClientInfo implements IClusterable
+{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Construct.
+ */
+ public ClientInfo()
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
new file mode 100644
index 0000000..a669fd2
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkableListenerInterfaceRequestHandler.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Request handler for bookmarkable pages with listener interface. This handler is only used to
+ * generate URLs. Rendering is always handled by {@link ListenerInterfaceRequestHandler}.
+ *
+ * @author Matej Knopp
+ */
+public class BookmarkableListenerInterfaceRequestHandler
+ implements
+ IPageRequestHandler,
+ IComponentRequestHandler
+{
+ private static final Logger logger = LoggerFactory.getLogger(BookmarkableListenerInterfaceRequestHandler.class);
+
+ private final IPageAndComponentProvider pageComponentProvider;
+
+ private final RequestListenerInterface listenerInterface;
+
+ private final Integer behaviorIndex;
+
+ /**
+ * Construct.
+ *
+ * @param pageComponentProvider
+ * @param listenerInterface
+ * @param behaviorIndex
+ */
+ public BookmarkableListenerInterfaceRequestHandler(
+ IPageAndComponentProvider pageComponentProvider,
+ RequestListenerInterface listenerInterface, Integer behaviorIndex)
+ {
+ Args.notNull(pageComponentProvider, "pageComponentProvider");
+ Args.notNull(listenerInterface, "listenerInterface");
+
+ this.pageComponentProvider = pageComponentProvider;
+ this.listenerInterface = listenerInterface;
+ this.behaviorIndex = behaviorIndex;
+ }
+
+ /**
+ * Construct.
+ *
+ * @param pageComponentProvider
+ * @param component
+ * @param listenerInterface
+ */
+ public BookmarkableListenerInterfaceRequestHandler(
+ PageAndComponentProvider pageComponentProvider, RequestListenerInterface listenerInterface)
+ {
+ this(pageComponentProvider, listenerInterface, null);
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IComponentRequestHandler#getComponent()
+ */
+ @Override
+ public IRequestableComponent getComponent()
+ {
+ return pageComponentProvider.getComponent();
+ }
+
+ @Override
+ public final String getComponentPath()
+ {
+ return pageComponentProvider.getComponentPath();
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageRequestHandler#getPage()
+ */
+ @Override
+ public IRequestablePage getPage()
+ {
+ return pageComponentProvider.getPageInstance();
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageClassRequestHandler#getPageClass()
+ */
+ @Override
+ public Class<? extends IRequestablePage> getPageClass()
+ {
+ return pageComponentProvider.getPageClass();
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageRequestHandler#getPageId()
+ */
+ @Override
+ public Integer getPageId()
+ {
+ return pageComponentProvider.getPageId();
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageClassRequestHandler#getPageParameters()
+ */
+ @Override
+ public PageParameters getPageParameters()
+ {
+ return pageComponentProvider.getPageParameters();
+ }
+
+ /**
+ * @see org.apache.org.apache.wicket.request.IRequestHandler#detach(org.apache.wicket.request.cycle.RequestCycle)
+ */
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ pageComponentProvider.detach();
+ }
+
+ /**
+ * Returns the listener interface.
+ *
+ * @return listener interface
+ */
+ public RequestListenerInterface getListenerInterface()
+ {
+ return listenerInterface;
+ }
+
+ /**
+ * Returns index of behavior this listener is targeted on or <code>null</code> if component is
+ * the target
+ *
+ * @return behavior index or <code>null</code>
+ */
+ public Integer getBehaviorIndex()
+ {
+ return behaviorIndex;
+ }
+
+ /**
+ * @see org.apache.org.apache.wicket.request.IRequestHandler#respond(org.apache.wicket.request.cycle.RequestCycle)
+ */
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ // nothing to do here, this handler is only used to generate URLs
+ }
+
+ @Override
+ public final boolean isPageInstanceCreated()
+ {
+ // this request handler always operates on a created page instance
+ return true;
+ }
+
+ /**
+ * @return the render count of the page
+ */
+ @Override
+ public final Integer getRenderCount()
+ {
+ return pageComponentProvider.getRenderCount();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
new file mode 100644
index 0000000..6dbc915
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BookmarkablePageRequestHandler.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.core.request.handler.logger.PageLogData;
+import org.apache.wicket.request.ILoggableRequestHandler;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
+
+/**
+ * Request handler for bookmarkable pages. This handler is only used to generate URLs. Rendering is
+ * always handled by {@link RenderPageRequestHandler}.
+ *
+ * @author Matej Knopp
+ */
+public class BookmarkablePageRequestHandler
+ implements
+ IPageClassRequestHandler,
+ ILoggableRequestHandler
+{
+ private final IPageProvider pageProvider;
+
+ private PageLogData logData;
+
+ /**
+ * Construct.
+ *
+ * @param pageProvider
+ */
+ public BookmarkablePageRequestHandler(IPageProvider pageProvider)
+ {
+
+ Args.notNull(pageProvider, "pageProvider");
+
+ this.pageProvider = pageProvider;
+ }
+
+ /**
+ * @see IPageClassRequestHandler#getPageClass()
+ */
+ @Override
+ public Class<? extends IRequestablePage> getPageClass()
+ {
+ return pageProvider.getPageClass();
+ }
+
+ /**
+ * @see IPageClassRequestHandler#getPageParameters()
+ */
+ @Override
+ public PageParameters getPageParameters()
+ {
+ return pageProvider.getPageParameters();
+ }
+
+ /**
+ * @see org.apache.wicket.request.IRequestHandler#respond(org.apache.wicket.request.IRequestCycle)
+ */
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ // not used as BookmarkablePageRequestHandler is only used when generating URLs.
+ // However URL will never be resolved to BookmarkablePageRequestHandler
+ }
+
+ /**
+ * @see org.apache.wicket.request.IRequestHandler#detach(org.apache.wicket.request.IRequestCycle)
+ */
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ if (logData == null)
+ logData = new PageLogData(pageProvider);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public PageLogData getLogData()
+ {
+ return logData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BufferedResponseRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BufferedResponseRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BufferedResponseRequestHandler.java
new file mode 100644
index 0000000..6271953
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/BufferedResponseRequestHandler.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.protocol.http.BufferedWebResponse;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.http.WebResponse;
+
+/**
+ * Handler that renders a {@link BufferedWebResponse}.
+ *
+ * @author Matej Knopp
+ */
+public class BufferedResponseRequestHandler implements IRequestHandler
+{
+ private final BufferedWebResponse bufferedWebResponse;
+
+ /**
+ * Construct.
+ *
+ * @param bufferedWebResponse
+ */
+ public BufferedResponseRequestHandler(BufferedWebResponse bufferedWebResponse)
+ {
+ this.bufferedWebResponse = bufferedWebResponse;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ bufferedWebResponse.writeTo((WebResponse)requestCycle.getResponse());
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentNotFoundException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentNotFoundException.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentNotFoundException.java
new file mode 100644
index 0000000..b6cec50
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentNotFoundException.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.WicketRuntimeException;
+
+/**
+ * Exception thrown when component has not been found in hierarchy.
+ *
+ * @author Matej Knopp
+ */
+public class ComponentNotFoundException extends WicketRuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Construct.
+ */
+ public ComponentNotFoundException()
+ {
+ }
+
+ /**
+ * Construct.
+ *
+ * @param message
+ */
+ public ComponentNotFoundException(String message)
+ {
+ super(message);
+ }
+
+ /**
+ * Construct.
+ *
+ * @param message
+ * @param cause
+ */
+ public ComponentNotFoundException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
+
+ /**
+ * Construct.
+ *
+ * @param cause
+ */
+ public ComponentNotFoundException(Throwable cause)
+ {
+ super(cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentRenderingRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentRenderingRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentRenderingRequestHandler.java
new file mode 100644
index 0000000..16d9708
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ComponentRenderingRequestHandler.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.http.WebResponse;
+
+/**
+ * Request handler that renders a component
+ *
+ * @author igor.vaynberg
+ */
+public class ComponentRenderingRequestHandler implements IComponentRequestHandler
+{
+ private final Component component;
+
+ /**
+ * Construct.
+ *
+ * @param component
+ */
+ public ComponentRenderingRequestHandler(Component component)
+ {
+ this.component = component;
+ }
+
+ @Override
+ public IRequestableComponent getComponent()
+ {
+ return component;
+ }
+
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ component.getPage().detach();
+ }
+
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ // preventing the response to component from being cached
+ if (requestCycle.getResponse() instanceof WebResponse)
+ {
+ WebResponse response = (WebResponse)requestCycle.getResponse();
+ response.disableCaching();
+ }
+ component.render();
+ }
+
+ @Override
+ public final String getComponentPath()
+ {
+ return component.getPageRelativePath();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/EmptyAjaxRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/EmptyAjaxRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/EmptyAjaxRequestHandler.java
new file mode 100644
index 0000000..0cefb76
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/EmptyAjaxRequestHandler.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.http.WebResponse;
+
+/**
+ * The empty AJAX request target does output an empty AJAX response.
+ * <br/>
+ * May be used as a light, "do nothing" Ajax response.
+ *
+ * @author Matej Knopp
+ */
+public final class EmptyAjaxRequestHandler implements IRequestHandler
+{
+ /** immutable hashcode. */
+ private static final int HASH = 17 * 1542323;
+
+ /** singleton instance. */
+ private static final EmptyAjaxRequestHandler instance = new EmptyAjaxRequestHandler();
+
+ /**
+ * Construct.
+ */
+ private EmptyAjaxRequestHandler()
+ {
+ }
+
+ /**
+ * Gets the singleton instance.
+ *
+ * @return the singleton instance
+ */
+ public static final EmptyAjaxRequestHandler getInstance()
+ {
+ return instance;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ WebResponse response = (WebResponse)requestCycle.getResponse();
+ final String encoding = Application.get()
+ .getRequestCycleSettings()
+ .getResponseRequestEncoding();
+
+ // Set content type based on markup type for page
+ response.setContentType("text/xml; charset=" + encoding);
+
+ // Make sure it is not cached by a client
+ response.disableCaching();
+
+ response.write("<?xml version=\"1.0\" encoding=\"");
+ response.write(encoding);
+ response.write("\"?><ajax-response></ajax-response>");
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ return obj instanceof EmptyAjaxRequestHandler;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode()
+ {
+ return HASH;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ return "EmptyAjaxRequestTarget";
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IComponentRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IComponentRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IComponentRequestHandler.java
new file mode 100644
index 0000000..6a9a60f
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IComponentRequestHandler.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.component.IRequestableComponent;
+
+/**
+ * Request handler that works with a component.
+ *
+ * @author Matej Knopp
+ */
+public interface IComponentRequestHandler extends IRequestHandler
+{
+ /**
+ * Returns the component instance.
+ *
+ * @return component instance
+ */
+ IRequestableComponent getComponent();
+
+ /**
+ * Returns the page relative path to the component instance.
+ *
+ * @return the page relative path to the component instance
+ */
+ String getComponentPath();
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageAndComponentProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageAndComponentProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageAndComponentProvider.java
new file mode 100644
index 0000000..85b84a8
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageAndComponentProvider.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.request.component.IRequestableComponent;
+
+/**
+ * Extension of {@link IPageProvider} that is also capable of providing a Component belonging to the
+ * page.
+ *
+ * @author Matej Knopp
+ */
+public interface IPageAndComponentProvider extends IPageProvider
+{
+ /**
+ * Returns component on specified page with given path.
+ *
+ * @return component
+ */
+ IRequestableComponent getComponent();
+
+ /**
+ * Returns the page relative component path.
+ *
+ * @return the page relative component path.
+ */
+ String getComponentPath();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
new file mode 100644
index 0000000..f6f169e
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageClassRequestHandler.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+/**
+ * Request handler that works with page class.
+ *
+ * @author Matej Knopp
+ */
+public interface IPageClassRequestHandler extends IRequestHandler
+{
+ /**
+ * Returns the page class
+ *
+ * @return page class
+ */
+ Class<? extends IRequestablePage> getPageClass();
+
+ /**
+ * @return page parameters
+ */
+ PageParameters getPageParameters();
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
new file mode 100644
index 0000000..43d3886
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageProvider.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.core.request.mapper.StalePageException;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+
+/**
+ * Represents object capable of providing a page instance. In some cases the implementation class
+ * might now page class and page parameters without having the actual page instance. Thus it's
+ * recommended to call {@link #getPageParameters()} instead of calling {@link #getPageInstance()}
+ * .getPageParameters(). Same goes for page class.
+ *
+ * @author Matej Knopp
+ */
+public interface IPageProvider
+{
+ /**
+ * Returns page instance specified by the constructor.
+ *
+ * @return page instance
+ * @throws StalePageException
+ * if render count has been specified in constructor and the render count of page
+ * does not match the value
+ * @throws {@link PageExpiredException} if the specified page could not have been found and the
+ * constructor used did not provide enough information to create new page instance
+ */
+ IRequestablePage getPageInstance();
+
+ /**
+ * Returns {@link PageParameters} of the page.
+ *
+ * @return page parameters
+ */
+ PageParameters getPageParameters();
+
+ /**
+ * Returns whether calling getPageInstance() will result in creating new page instance or
+ * whether it will be an existing instance (even though it might be pulled from page store).
+ *
+ * @return <code>true</code> if calling {@link #getPageInstance()} will create new page
+ * instance, <code>false</code> otherwise.
+ */
+ boolean isNewPageInstance();
+
+ /**
+ * Returns class of the page.
+ *
+ * @return page class
+ */
+ Class<? extends IRequestablePage> getPageClass();
+
+ /**
+ * Returns the page id.
+ *
+ * @return page id
+ */
+ Integer getPageId();
+
+ /**
+ * Returns the number of times this page has been rendered.
+ *
+ * @return the number of times this page has been rendered.
+ */
+ Integer getRenderCount();
+
+ /**
+ * Detaches the page if it has been loaded.
+ */
+ void detach();
+
+ /**
+ * Checks whether or not the provider has a page instance. This page instance might have been
+ * passed to this page provider directly or it may have been instantiated or retrieved from the
+ * page store.
+ *
+ * @return {@code true} iff page instance has been created or retrieved
+ */
+ public boolean hasPageInstance();
+
+ /**
+ * Returns whether or not the page instance held by this provider has been instantiated by the
+ * provider.
+ *
+ * @throws IllegalStateException
+ * if this method is called and the provider does not yet have a page instance, ie
+ * if {@link #getPageInstance()} has never been called on this provider
+ * @return {@code true} iff the page instance held by this provider was instantiated by the
+ * provider
+ */
+ public boolean isPageInstanceFresh();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageRequestHandler.java
new file mode 100644
index 0000000..963ba7f
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/IPageRequestHandler.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.request.component.IRequestablePage;
+
+/**
+ * Request handler that works with a page instance.
+ *
+ * @author Matej Knopp
+ */
+public interface IPageRequestHandler extends IPageClassRequestHandler
+{
+ /**
+ * Returns the page. Be aware that the page can be instantiated if this wasn't the case already.
+ *
+ * @return page instance
+ */
+ IRequestablePage getPage();
+
+ /**
+ * Returns the page id.
+ *
+ * @return page id
+ */
+ Integer getPageId();
+
+ /**
+ * Checks if the page instance is already created or if it will be created when
+ * {@link #getPage()} is called
+ *
+ * @return {@code true} iff page instance is not yet created
+ */
+ boolean isPageInstanceCreated();
+
+ /**
+ * Returns the number of times this page has been rendered.
+ *
+ * @return the number of times this page has been rendered.
+ * @see IRequestablePage#getRenderCount()
+ */
+ Integer getRenderCount();
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
new file mode 100644
index 0000000..31f99a0
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
@@ -0,0 +1,281 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
+import org.apache.wicket.core.request.handler.logger.ListenerInterfaceLogData;
+import org.apache.wicket.request.ILoggableRequestHandler;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Request handler that invokes the listener interface on component and renders page afterwards.
+ *
+ * @author Matej Knopp
+ */
+public class ListenerInterfaceRequestHandler
+ implements
+ IPageRequestHandler,
+ IComponentRequestHandler,
+ ILoggableRequestHandler
+{
+
+ private static final Logger LOG = LoggerFactory.getLogger(ListenerInterfaceRequestHandler.class);
+
+ private final IPageAndComponentProvider pageComponentProvider;
+
+ private final RequestListenerInterface listenerInterface;
+
+ private final Integer behaviorId;
+
+ private ListenerInterfaceLogData logData;
+
+ /**
+ * Construct.
+ *
+ * @param pageComponentProvider
+ * @param listenerInterface
+ * @param behaviorIndex
+ */
+ public ListenerInterfaceRequestHandler(IPageAndComponentProvider pageComponentProvider,
+ RequestListenerInterface listenerInterface, Integer behaviorIndex)
+ {
+ Args.notNull(pageComponentProvider, "pageComponentProvider");
+ Args.notNull(listenerInterface, "listenerInterface");
+
+ this.pageComponentProvider = pageComponentProvider;
+ this.listenerInterface = listenerInterface;
+ behaviorId = behaviorIndex;
+ }
+
+ /**
+ * Construct.
+ *
+ * @param pageComponentProvider
+ * @param listenerInterface
+ */
+ public ListenerInterfaceRequestHandler(PageAndComponentProvider pageComponentProvider,
+ RequestListenerInterface listenerInterface)
+ {
+ this(pageComponentProvider, listenerInterface, null);
+ }
+
+ @Override
+ public IRequestableComponent getComponent()
+ {
+ return pageComponentProvider.getComponent();
+ }
+
+ @Override
+ public IRequestablePage getPage()
+ {
+ return pageComponentProvider.getPageInstance();
+ }
+
+ @Override
+ public Class<? extends IRequestablePage> getPageClass()
+ {
+ return pageComponentProvider.getPageClass();
+ }
+
+ @Override
+ public Integer getPageId()
+ {
+ return pageComponentProvider.getPageId();
+ }
+
+ @Override
+ public PageParameters getPageParameters()
+ {
+ return pageComponentProvider.getPageParameters();
+ }
+
+ /**
+ * @see org.apache.wicket.request.IRequestHandler#detach(org.apache.wicket.request.IRequestCycle)
+ */
+ @Override
+ public void detach(IRequestCycle requestCycle)
+ {
+ if (logData == null)
+ {
+ logData = new ListenerInterfaceLogData(pageComponentProvider, listenerInterface,
+ behaviorId);
+ }
+ pageComponentProvider.detach();
+ }
+
+ /**
+ * Returns the listener interface.
+ *
+ * @return listener interface
+ */
+ public RequestListenerInterface getListenerInterface()
+ {
+ return listenerInterface;
+ }
+
+ /**
+ * Index of target behavior or <code>null</code> if component is the target.
+ *
+ * @return behavior index or <code>null</code>
+ */
+ public Integer getBehaviorIndex()
+ {
+ return behaviorId;
+ }
+
+ /**
+ * @see org.apache.wicket.request.IRequestHandler#respond(org.apache.wicket.request.IRequestCycle)
+ */
+ @Override
+ public void respond(final IRequestCycle requestCycle)
+ {
+ final IRequestablePage page = getPage();
+ final boolean freshPage = pageComponentProvider.isPageInstanceFresh();
+ final boolean isAjax = ((WebRequest)requestCycle.getRequest()).isAjax();
+
+ IRequestableComponent component = null;
+ try
+ {
+ component = getComponent();
+ }
+ catch (ComponentNotFoundException e)
+ {
+ // either the page is stateless and the component we are looking for is not added in the
+ // constructor
+ // or the page is stateful+stale and a new instances was created by pageprovider
+ // we denote this by setting component to null
+ component = null;
+ }
+
+ if ((component == null && freshPage) ||
+ (component != null && getComponent().getPage() == page))
+ {
+ if (page instanceof Page)
+ {
+ // initialize the page to be able to check whether it is stateless
+ ((Page)page).internalInitialize();
+ }
+ final boolean isStateless = page.isPageStateless();
+
+ RedirectPolicy policy = isStateless ? RedirectPolicy.NEVER_REDIRECT
+ : RedirectPolicy.AUTO_REDIRECT;
+ final IPageProvider pageProvider = new PageProvider(page);
+
+ if (freshPage && isStateless == false)
+ {
+ // A listener interface is invoked on an expired page.
+
+ // If the page is stateful then we cannot assume that the listener interface is
+ // invoked on its initial state (right after page initialization) and that its
+ // component and/or behavior will be available. That's why the listener interface
+ // should be ignored and the best we can do is to re-paint the newly constructed
+ // page.
+
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug(
+ "A ListenerInterface '{}' assigned to '{}' is executed on an expired stateful page. "
+ + "Scheduling re-create of the page and ignoring the listener interface...",
+ listenerInterface, getComponentPath());
+ }
+
+ if (isAjax)
+ {
+ policy = RedirectPolicy.ALWAYS_REDIRECT;
+ }
+
+ requestCycle.scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(
+ pageProvider, policy));
+ return;
+ }
+
+ if (isAjax == false && listenerInterface.isRenderPageAfterInvocation())
+ {
+ // schedule page render after current request handler is done. this can be
+ // overridden during invocation of listener
+ // method (i.e. by calling RequestCycle#setResponsePage)
+ requestCycle.scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(
+ pageProvider, policy));
+ }
+
+ invokeListener();
+
+ }
+ else
+ {
+ throw new WicketRuntimeException("Component " + getComponent() +
+ " has been removed from page.");
+ }
+ }
+
+ private void invokeListener()
+ {
+ if (getBehaviorIndex() == null)
+ {
+ listenerInterface.invoke(getComponent());
+ }
+ else
+ {
+ try
+ {
+ Behavior behavior = getComponent().getBehaviorById(behaviorId);
+ listenerInterface.invoke(getComponent(), behavior);
+ }
+ catch (IndexOutOfBoundsException e)
+ {
+ throw new WicketRuntimeException("Couldn't find component behavior.", e);
+ }
+
+ }
+ }
+
+ @Override
+ public final boolean isPageInstanceCreated()
+ {
+ return pageComponentProvider.hasPageInstance();
+ }
+
+ @Override
+ public final String getComponentPath()
+ {
+ return pageComponentProvider.getComponentPath();
+ }
+
+ @Override
+ public final Integer getRenderCount()
+ {
+ return pageComponentProvider.getRenderCount();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public ListenerInterfaceLogData getLogData()
+ {
+ return logData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
new file mode 100644
index 0000000..49d4ffc
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.behavior.Behavior;
+
+/**
+ * Thrown when a listener invocation is attempted on a component or behavior that does not allow it.
+ * For example, somehow the user attempted to invoke link's onclick method on a disabled link.
+ *
+ * @author igor
+ */
+public class ListenerInvocationNotAllowedException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ private final Component component;
+ private final Behavior behavior;
+ private final RequestListenerInterface iface;
+
+ /**
+ * Constructor
+ *
+ * @param iface
+ * @param component
+ * @param behavior
+ * @param message
+ */
+ public ListenerInvocationNotAllowedException(RequestListenerInterface iface,
+ Component component, Behavior behavior, String message)
+ {
+ super(message + detail(iface, component, behavior));
+ this.iface = iface;
+ this.component = component;
+ this.behavior = behavior;
+
+ }
+
+ private static String detail(RequestListenerInterface iface, Component component,
+ Behavior behavior)
+ {
+ StringBuilder detail = new StringBuilder("Component: ").append(component.toString(false));
+ if (behavior != null)
+ {
+ detail.append(" Behavior: ").append(behavior.toString());
+ }
+ detail.append(" Listener: ").append(iface.toString());
+ return detail.toString();
+ }
+
+ /**
+ * @return component that was the target of invocation or hosted the behavior that was
+ */
+ public Component getComponent()
+ {
+ return component;
+ }
+
+ /**
+ * @return behavior that was the target of invocation or {@code null}
+ */
+ public Behavior getBehavior()
+ {
+ return behavior;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/53f07873/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
new file mode 100644
index 0000000..93bf6ac
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/PageAndComponentProvider.java
@@ -0,0 +1,214 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
+
+/**
+ * Extension of {@link PageProvider} that is also capable of providing a Component belonging to the
+ * page.
+ *
+ * @see PageProvider
+ *
+ * @author Matej Knopp
+ */
+public class PageAndComponentProvider extends PageProvider implements IPageAndComponentProvider
+{
+ private IRequestableComponent component;
+
+ private String componentPath;
+
+ /**
+ * @see PageProvider#PageProvider(IRequestablePage)
+ *
+ * @param page
+ * @param componentPath
+ */
+ public PageAndComponentProvider(IRequestablePage page, String componentPath)
+ {
+ super(page);
+ setComponentPath(componentPath);
+ }
+
+ /**
+ * @see PageProvider#PageProvider(IRequestablePage)
+ *
+ * @param page
+ * @param component
+ */
+ public PageAndComponentProvider(IRequestablePage page, IRequestableComponent component)
+ {
+ super(page);
+
+ Args.notNull(component, "component");
+
+ this.component = component;
+ }
+
+ /**
+ * @see PageProvider#PageProvider(Class, PageParameters)
+ *
+ * @param pageClass
+ * @param pageParameters
+ * @param componentPath
+ */
+ public PageAndComponentProvider(Class<? extends IRequestablePage> pageClass,
+ PageParameters pageParameters, String componentPath)
+ {
+ super(pageClass, pageParameters);
+ setComponentPath(componentPath);
+ }
+
+ /**
+ * @see PageProvider#PageProvider(Class)
+ *
+ * @param pageClass
+ * @param componentPath
+ */
+ public PageAndComponentProvider(Class<? extends IRequestablePage> pageClass,
+ String componentPath)
+ {
+ super(pageClass);
+ setComponentPath(componentPath);
+ }
+
+ /**
+ * @see PageProvider#PageProvider(int, Class, Integer)
+ *
+ * @param pageId
+ * @param pageClass
+ * @param renderCount
+ * @param componentPath
+ */
+ public PageAndComponentProvider(int pageId, Class<? extends IRequestablePage> pageClass,
+ Integer renderCount, String componentPath)
+ {
+ super(pageId, pageClass, renderCount);
+ setComponentPath(componentPath);
+ }
+
+ /**
+ * @see PageProvider#PageProvider(int, Class, PageParameters, Integer)
+ *
+ * @param pageId
+ * @param pageClass
+ * @param pageParameters
+ * @param renderCount
+ * @param componentPath
+ */
+ public PageAndComponentProvider(int pageId, Class<? extends IRequestablePage> pageClass,
+ PageParameters pageParameters, Integer renderCount, String componentPath)
+ {
+ super(pageId, pageClass, pageParameters, renderCount);
+ setComponentPath(componentPath);
+ }
+
+ /**
+ * @see PageProvider#PageProvider(int, Integer)
+ *
+ * @param pageId
+ * @param renderCount
+ * @param componentPath
+ */
+ public PageAndComponentProvider(int pageId, Integer renderCount, String componentPath)
+ {
+ super(pageId, renderCount);
+ setComponentPath(componentPath);
+ }
+
+ public PageAndComponentProvider(IRequestablePage page, IRequestableComponent component,
+ PageParameters parameters)
+ {
+ super(page);
+
+ Args.notNull(component, "component");
+
+ this.component = component;
+ if (parameters != null)
+ {
+ setPageParameters(parameters);
+ }
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageAndComponentProvider#getComponent()
+ */
+ @Override
+ public IRequestableComponent getComponent()
+ {
+ if (component == null)
+ {
+ IRequestablePage page = getPageInstance();
+ component = page.get(componentPath);
+ if (component == null)
+ {
+
+ /*
+ * on stateless pages it is possible that the component may not yet exist because it
+ * couldve been created in one of the lifecycle callbacks of this page. Lets invoke
+ * the callbacks to give the page a chance to create the missing component.
+ */
+
+ // make sure this page instance was just created so the page can be stateless
+ if (page.isPageStateless())
+ {
+ Page p = (Page)page;
+ p.internalInitialize();
+ p.internalPrepareForRender(false);
+ component = page.get(componentPath);
+ }
+ }
+ }
+ if (component == null)
+ {
+ throw new ComponentNotFoundException("Could not find component '" + componentPath +
+ "' on page '" + getPageClass());
+ }
+ return component;
+ }
+
+ /**
+ * @see org.apache.wicket.request.handler.IPageAndComponentProvider#getComponentPath()
+ */
+ @Override
+ public String getComponentPath()
+ {
+ if (componentPath != null)
+ {
+ return componentPath;
+ }
+ else
+ {
+ return component.getPageRelativePath();
+ }
+ }
+
+ /**
+ *
+ * @param componentPath
+ */
+ private void setComponentPath(String componentPath)
+ {
+ Args.notNull(componentPath, "componentPath");
+
+ this.componentPath = componentPath;
+ }
+}