package fi.arcusys.koku.web;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import static fi.arcusys.koku.util.Constants.*;
/**
* Handles the main message page
* @author Jinhua Chen
* Aug 12, 2011
*/
@Controller("messageController")
@RequestMapping(value = "VIEW")
public class MessageController extends AbstractController {
private static final Logger LOG = LoggerFactory.getLogger(MessageController.class);
/**
* Handles the portlet request to show the default page
* @param request RenderRequest
* @param response RenderResponse
* @param modelmap ModelMap
* @return message page
*/
@RenderMapping
public String showPageView(RenderRequest request, RenderResponse response,
ModelMap modelmap) {
return getView();
}
/**
* Returns the default home page and stores page parameters
* @param request RenderRequest
* @param response RenderResponse
* @param modelmap ModelMap
* @return home page with page parameters
*/
@RenderMapping(params = "myaction=home")
public String showHome(RenderRequest request, RenderResponse response,
ModelMap modelmap) {
// get parameters from session
String currentPage = (String) request.getPortletSession().getAttribute(ATTR_CURRENT_PAGE, PortletSession.APPLICATION_SCOPE);
String taskType = (String) request.getPortletSession().getAttribute(ATTR_TASK_TYPE, PortletSession.APPLICATION_SCOPE);
String keyword = (String) request.getPortletSession().getAttribute(ATTR_KEYWORD, PortletSession.APPLICATION_SCOPE);
String orderType = (String) request.getPortletSession().getAttribute(ATTR_ORDER_TYPE, PortletSession.APPLICATION_SCOPE);
clearSession(request); // clear session since it's used only once
modelmap.addAttribute(ATTR_CURRENT_PAGE, currentPage);
modelmap.addAttribute(ATTR_TASK_TYPE, taskType);
modelmap.addAttribute(ATTR_KEYWORD, keyword);
modelmap.addAttribute(ATTR_ORDER_TYPE, orderType);
return getView();
}
private String getView() {
switch(getPortalRole()) {
case CITIZEN: return VIEW_MESSAGE_CITIZEN;
case EMPLOYEE: return VIEW_MESSAGE_EMPLOYEE;
default: return VIEW_ERROR;
}
}
/**
* Clears page parameters in session
* @param request RenderRequest
*/
public void clearSession(RenderRequest request) {
PortletSession ps = request.getPortletSession();
ps.removeAttribute(ATTR_CURRENT_PAGE, PortletSession.APPLICATION_SCOPE);
ps.removeAttribute(ATTR_TASK_TYPE, PortletSession.APPLICATION_SCOPE);
ps.removeAttribute(ATTR_KEYWORD, PortletSession.APPLICATION_SCOPE);
ps.removeAttribute(ATTR_ORDER_TYPE, PortletSession.APPLICATION_SCOPE);
}
// -- @ModelAttribute here works as the referenceData method
@ModelAttribute(value = "loginStatus")
public String model(RenderRequest request) {
if (checkUserToken(request)) {
return "VALID";
} else {
return "INVALID";
}
}
/**
* Check user logged in or not, and put user info to session
* @param request RenderRequest
* @return true if user is login, otherwise false
*/
public boolean checkUserToken(RenderRequest request) {
String userid = null;
try {
userid = request.getRemoteUser();
if (userid != null) { // user is logged in
PortletSession portletSession = request.getPortletSession();
portletSession.setAttribute(ATTR_USERNAME, userid);
}
} catch (Exception e) {
LOG.error("Exception when getting user id");
}
return (userid != null);
}
}