package fi.koku.taskmanager.controller;
import static fi.arcusys.koku.util.Constants.ATTR_CURRENT_PAGE;
import static fi.arcusys.koku.util.Constants.ATTR_KEYWORD;
import static fi.arcusys.koku.util.Constants.ATTR_ORDER_TYPE;
import static fi.arcusys.koku.util.Constants.ATTR_TASK_TYPE;
import static fi.arcusys.koku.util.Constants.ATTR_TOKEN;
import static fi.arcusys.koku.util.Constants.ATTR_USERNAME;
import static fi.arcusys.koku.util.Constants.INTALIO_GROUP_PREFIX;
import static fi.arcusys.koku.util.Constants.TOKEN_STATUS_INVALID;
import static fi.arcusys.koku.util.Constants.TOKEN_STATUS_VALID;
import static fi.arcusys.koku.util.Constants.VIEW_TASK_MANAGER;
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 fi.arcusys.koku.intalio.TaskHandle;
/**
* Handles the main task manager page
*
* @author Jinhua Chen
* May 11, 2011
*/
@Controller("taskManagerController")
@RequestMapping(value = "VIEW")
public class TaskManagerController {
private static final Logger LOG = LoggerFactory.getLogger(TaskManagerController.class);
/**
* Handles the portlet request to show default page
*
* @param request RenderRequest
* @param response RenderResponse
* @param modelmap ModelMap
* @return default page taskmanager
*/
@RenderMapping
public String home(RenderRequest request, RenderResponse response, ModelMap modelmap) {
return VIEW_TASK_MANAGER;
}
/**
* Returns to default page and set the page variable
*
* @param request RenderRequest
* @param response RenderResponse
* @param modelmap ModelMap
* @return taskmanager page with page parameters
*/
@RenderMapping(params = "myaction=home")
public String showHome(RenderRequest request, RenderResponse response, ModelMap modelmap) {
//get parameters from
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 VIEW_TASK_MANAGER;
}
/**
* 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);
}
/**
* Returns intalio token status
*
* @param request
* @return returns intalio token status
*/
@ModelAttribute(value = "tokenStatus")
public String model(RenderRequest request) {
if(checkUserToken(request)) {
return TOKEN_STATUS_VALID;
} else {
return TOKEN_STATUS_INVALID;
}
}
/**
* Checks user logged in or not, if logged in, verify the participant token
*
* @param request
* @return true if token is valid, otherwise false
*/
private boolean checkUserToken(RenderRequest request) {
String userid = null;
String token = null;
userid = request.getRemoteUser();
try {
if(userid != null) { // user is logged in
PortletSession portletSession = request.getPortletSession();
token = (String) portletSession.getAttribute(ATTR_TOKEN);
if(token == null) {
TaskHandle taskhandle = new TaskHandle();
//String username = "Kalle Kuntalainen";
// FIXME: Okay.. How to get proper user password?
// Fix also koku-navi-portlet AjaxController request counter which uses same method
String username = INTALIO_GROUP_PREFIX + userid;
String password = "test";
token = taskhandle.getTokenByUser(username, password);
portletSession.setAttribute(ATTR_TOKEN, token);
portletSession.setAttribute(ATTR_USERNAME, username);
LOG.debug("Portal username: '"+userid+"' Intalio username: '" + username + "' Password: '" + password + "' Intalio token: '" + token + "'");
}
LOG.debug("Login user:" + userid);
}
} catch (Exception e) {
LOG.error("Exception when getting user id. Username: '"+userid+"'",e);
}
if (token != null) {
LOG.info("Intalio token is valid! Username: '"+userid+"' Token: '"+ token +"'");
return true;
} else {
LOG.info("Intalio token is invalid! Username: '"+userid+"'");
return false;
}
}
}