package org.mifos.interceptors;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.mifos.framework.util.helpers.Constants;
import org.mifos.ui.core.controller.BreadCrumbsLinks;
import org.mifos.ui.core.controller.BreadcrumbBuilder;
import org.mifos.ui.core.controller.util.helpers.UrlHelper;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@SessionAttributes({ "accessDeniedBreadcrumbs", "previousPageUrl", "configureDwDatabase", "accountingActivationStatus" })
public class BackUrlInterceptor extends HandlerInterceptorAdapter {
protected List<BreadCrumbsLinks> breadcrumbs = new LinkedList<BreadCrumbsLinks>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String errorPage = request.getRequestURI().replaceFirst(".+/", "");
String accountingActivationStatus = null;
try {
accountingActivationStatus = request.getSession().getAttribute("accountingActivationStatus").toString();
} catch (Exception e){
accountingActivationStatus = "false";
}
String urlToBackPage = (String) request.getSession().getAttribute("previousPageUrl");
if ("pageNotFound.ftl".equals(errorPage)) {
breadcrumbs = new BreadcrumbBuilder().withLink("previousPage", urlToBackPage)
.withLink("pageNotFound", errorPage).build();
request.setAttribute("accessDeniedBreadcrumbs", breadcrumbs);
} else if ("viewPentahoReport.ftl".equals(errorPage)) {
breadcrumbs = new BreadcrumbBuilder().withLink("previousPage", urlToBackPage)
.withLink("JNDIError", errorPage).build();
request.setAttribute("accessDeniedBreadcrumbs", breadcrumbs);
} else {
breadcrumbs = new BreadcrumbBuilder().withLink("previousPage", urlToBackPage)
.withLink("accessDenied", errorPage).build();
request.setAttribute("accessDeniedBreadcrumbs", breadcrumbs);
}
if (!"getMifosLogo.ftl?".equals(urlToBackPage)) {
request.getSession().setAttribute(Constants.URLTOBACKPAGE, urlToBackPage);
}
request.setAttribute(Constants.URLTOBACKPAGE, urlToBackPage);
request.setAttribute("accountingActivationStatus", Boolean.parseBoolean(accountingActivationStatus));
request.getSession().setAttribute("previousPageUrl", UrlHelper.constructCurrentPageUrl(request));
return true;
}
}