package org.sakaiproject.tool.messageforums.jsf;
import java.util.Map;
import javax.faces.application.Application;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.sakaiproject.tool.messageforums.DiscussionForumTool;
public class AjaxPhaseListener implements PhaseListener {
public void afterPhase(PhaseEvent event) {
FacesContext context = FacesContext.getCurrentInstance();
Application app = context.getApplication();
ValueBinding binding = app.createValueBinding("#{ForumTool}");
DiscussionForumTool forumTool = (DiscussionForumTool) binding
.getValue(context);
Map requestParams = context.getExternalContext()
.getRequestParameterMap();
String action = (String) requestParams.get("action");
String messageId = (String) requestParams.get("messageId");
String topicId = (String) requestParams.get("topicId");
String ajax = (String) requestParams.get("ajax");
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
if ("true".equals(ajax)) {
try {
ServletOutputStream out = response.getOutputStream();
response.setHeader("Pragma", "No-Cache");
response.setHeader("Cache-Control",
"no-cache,no-store,max-age=0");
response.setDateHeader("Expires", 1);
if (action == null) {
out.println("FAIL");
} else if ("markMessageAsRead".equals(action)) {
// Ajax call to mark messages as read for user
if (messageId != null && topicId != null) {
if (!forumTool.isMessageReadForUser(Long.valueOf(topicId),
Long.valueOf(messageId))) {
forumTool.markMessageReadForUser(Long.valueOf(topicId),
Long.valueOf(messageId), true);
out.println("SUCCESS");
} else {
// also output success in case message is read, but
// page rendered mail icon (old state)
out.println("SUCCESS");
}
}
}
out.flush();
} catch (Exception ee) {
ee.printStackTrace();
}
context.responseComplete();
}
;
}
public void beforePhase(PhaseEvent arg0) {
// TODO Auto-generated method stub
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}