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); } } } } }