package net.techreadiness.ui.tags.security; import javax.servlet.ServletContext; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; import net.techreadiness.service.PermissionService; import net.techreadiness.service.ServiceContext; import net.techreadiness.service.UserService; import net.techreadiness.ui.util.ContextUtils; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public abstract class AbstractSecurityTag extends TagSupport { private static final long serialVersionUID = 1L; public static final String SERVICE_CONTEXT = "serviceContext"; protected UserService userService; protected PermissionService permissionService; protected ApplicationContext applicationContext; protected String var; protected void initializeIfRequired() { if (applicationContext != null) { return; } applicationContext = getContext(pageContext); userService = getBeanOfType(UserService.class); permissionService = getBeanOfType(PermissionService.class); } protected int skipBody() { if (var != null) { pageContext.setAttribute(var, Boolean.FALSE, PageContext.PAGE_SCOPE); } return Tag.SKIP_BODY; } protected int evalBody() { if (var != null) { pageContext.setAttribute(var, Boolean.TRUE, PageContext.PAGE_SCOPE); } return Tag.EVAL_BODY_INCLUDE; } protected ApplicationContext getContext(PageContext pageContext) { ServletContext servletContext = pageContext.getServletContext(); return WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); } private static <T> T getBeanOfType(Class<T> type) { return ContextUtils.getOptionalBeanOfType(type); } protected ServiceContext getServiceContext() { return (ServiceContext) pageContext.getAttribute(SERVICE_CONTEXT, PageContext.SESSION_SCOPE); } public void setVar(String var) { this.var = var; } }