package is.idega.idegaweb.egov.bpm.servlet; import is.idega.idegaweb.egov.bpm.cases.messages.CaseUserFactory; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import com.idega.block.article.component.CommentsViewer; import com.idega.jbpm.data.ProcessManagerBind; import com.idega.jbpm.exe.BPMFactory; import com.idega.jbpm.exe.ProcessInstanceW; import com.idega.servlet.filter.BaseFilter; import com.idega.user.data.User; import com.idega.util.URIUtil; import com.idega.util.expression.ELUtil; public class CommentViewerRedirector extends BaseFilter implements Filter { private static final Logger LOGGER = Logger.getLogger(CommentViewerRedirector.class.getName()); public static final String PARAMETER_REDIRECT_TO_COMMENT = "redirectToComment"; @Autowired private BPMFactory bpmFactory; @Autowired private CaseUserFactory caseUserFactory; public void destroy() {} public void init(FilterConfig arg) throws ServletException {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String redirectToComment = request.getParameter(PARAMETER_REDIRECT_TO_COMMENT); String piId = request.getParameter(ProcessManagerBind.processInstanceIdParam); if (redirectToComment == null || piId == null) { chain.doFilter(request, response); return; } if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) { chain.doFilter(request, response); return; } HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; User currentUser = getCurrentUser(httpRequest, httpResponse); if (currentUser == null) { LOGGER.warning("Can not redirect to comments page because user is not loged in!"); chain.doFilter(request, response); return; } Long processInstanceId = null; try { processInstanceId = Long.valueOf(piId); } catch (NumberFormatException e) { LOGGER.warning("Error coverting to Long: " + piId); chain.doFilter(request, response); return; } try { ProcessInstanceW piw = getProcessInstanceW(processInstanceId); String url = getCaseUserFactory().getCaseUser(currentUser, piw).getUrlToTheCase(); URIUtil uriUtil = new URIUtil(url); uriUtil.setParameter(ProcessManagerBind.processInstanceIdParam, processInstanceId.toString()); uriUtil.setParameter(CommentsViewer.AUTO_SHOW_COMMENTS, Boolean.TRUE.toString()); httpResponse.sendRedirect(uriUtil.getUri()); } catch (Exception e) { LOGGER.log(Level.WARNING, "Error while redirecting to user comments", e); chain.doFilter(request, response); } } private ProcessInstanceW getProcessInstanceW(Long processInstanceId) throws Exception { if (bpmFactory == null) { ELUtil.getInstance().autowire(this); } return bpmFactory.getProcessInstanceW(processInstanceId); } public CaseUserFactory getCaseUserFactory() { if (caseUserFactory == null) { ELUtil.getInstance().autowire(this); } return caseUserFactory; } public void setCaseUserFactory(CaseUserFactory caseUserFactory) { this.caseUserFactory = caseUserFactory; } }