package lt.inventi.wicket.component.breadcrumb;
import java.io.Serializable;
import org.apache.wicket.Component;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BreadcrumbsOperationsHelper implements IBreadcrumbsOperations, Serializable {
private static final Logger logger = LoggerFactory.getLogger(BreadcrumbsOperationsHelper.class);
private final Component context;
public BreadcrumbsOperationsHelper(Component context) {
this.context = context;
}
@Override
public void setResponseToPreviousPage() {
BreadcrumbsRedirectHelper.setResponseToPreviousPage(context);
}
@Override
public void setNextResponsePage(IRequestablePage page) {
if (context.getPage().getPageParameters() == page.getPageParameters()) {
throw new IllegalStateException(
"Please construct pages using cloned page parameters, otherwise your breadcrumb history will be corrupted! "
+ "Same page parameter instance found for current page " + context.getPage() + " transitioning to next page " + page);
}
BreadcrumbsRedirectHelper.setNextResponsePage(context, page);
}
@Override
public void setNextResponsePage(Class<? extends IRequestablePage> clazz) {
BreadcrumbsRedirectHelper.setNextResponsePage(context, clazz);
}
@Override
public void setNextResponsePage(Class<? extends IRequestablePage> clazz, PageParameters params) {
PageParameters nextParams = params;
if (context.getPage().getPageParameters() == params) {
nextParams = new PageParameters(params);
if (logger.isTraceEnabled()) {
logger.trace("Cloning page parameters for page {} in context {}", clazz, context);
}
}
BreadcrumbsRedirectHelper.setNextResponsePage(context, clazz, nextParams);
}
}