package be.selckin.swu.debug;
import org.apache.wicket.MetaDataKey;
import org.apache.wicket.core.request.handler.IPageRequestHandler;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
import org.apache.wicket.request.cycle.RequestCycle;
import java.lang.Boolean;
import java.lang.Exception;
import java.lang.Override;
public class PageTrackingRequestCycleListener extends AbstractRequestCycleListener {
public static final MetaDataKey<IRequestablePage> REQUESTED_PAGE = new MetaDataKey<IRequestablePage>() {
};
public static final MetaDataKey<IRequestablePage> RESPONSE_PAGE = new MetaDataKey<IRequestablePage>() {
};
public static final MetaDataKey<Boolean> HAD_REQUEST = new MetaDataKey<Boolean>() {
};
@Override
public void onRequestHandlerScheduled(RequestCycle cycle, IRequestHandler handler) {
super.onRequestHandlerScheduled(cycle, handler);
checkForPage(cycle, handler);
}
@Override
public void onRequestHandlerResolved(RequestCycle cycle, IRequestHandler handler) {
super.onRequestHandlerResolved(cycle, handler);
checkForPage(cycle, handler);
}
@Override
public void onExceptionRequestHandlerResolved(RequestCycle cycle, IRequestHandler handler,
Exception exception) {
super.onExceptionRequestHandlerResolved(cycle, handler, exception);
checkForPage(cycle, handler);
}
private void checkForPage(RequestCycle cycle, IRequestHandler handler) {
if (handler instanceof IPageRequestHandler) {
IPageRequestHandler pageRequestHandler = (IPageRequestHandler) handler;
if (pageRequestHandler.isPageInstanceCreated()) {
IRequestablePage page = pageRequestHandler.getPage();
if (cycle.getMetaData(HAD_REQUEST) == null) {
cycle.setMetaData(REQUESTED_PAGE, page);
cycle.setMetaData(RESPONSE_PAGE, page);
cycle.setMetaData(HAD_REQUEST, true);
} else {
cycle.setMetaData(RESPONSE_PAGE, page);
}
}
}
}
}