package fi.arcusys.koku.web;
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.VIEW_SHOW_MESSAGE;
import javax.annotation.Resource;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.portlet.bind.annotation.RenderMapping;
import fi.arcusys.koku.exceptions.KokuServiceException;
import fi.arcusys.koku.kv.message.MessageHandle;
import fi.arcusys.koku.kv.model.KokuMessage;
import fi.arcusys.koku.web.util.ModelWrapper;
import fi.arcusys.koku.web.util.ResponseStatus;
import fi.arcusys.koku.web.util.impl.ModelWrapperImpl;
/**
* Shows message details page and store the current query information on the jsp page
* @author Jinhua Chen
* Jun 22, 2011
*/
@Controller("singleMessageController")
@RequestMapping(value = "VIEW")
public class ShowMessageController {
private static final Logger LOG = LoggerFactory.getLogger(ShowMessageController.class);
@Resource
private ResourceBundleMessageSource messageSource;
/**
* Shows message page
* @param response RenderResponse
* @return message page
*/
@RenderMapping(params = "myaction=showMessage")
public String showPageView(RenderResponse response) {
return VIEW_SHOW_MESSAGE;
}
/**
* Creates data model integrated into the page and stores the page
* @param messageId message id
* @param currentPage current page id
* @param taskType task type requested
* @param keyword page parameter keyword
* @param orderType page parameter order type
* @param request RenderRequest
* @return
* @return message data model
*/
@ModelAttribute(value = "message")
public ModelWrapper<KokuMessage> model (
@RequestParam String messageId,
@RequestParam String currentPage,
@RequestParam String taskType,
@RequestParam String keyword,
@RequestParam String orderType,
RenderRequest request) {
// store parameters in session for returning page from form page
request.getPortletSession().setAttribute(ATTR_CURRENT_PAGE, currentPage, PortletSession.APPLICATION_SCOPE);
request.getPortletSession().setAttribute(ATTR_TASK_TYPE, taskType, PortletSession.APPLICATION_SCOPE);
request.getPortletSession().setAttribute(ATTR_KEYWORD, keyword, PortletSession.APPLICATION_SCOPE);
request.getPortletSession().setAttribute(ATTR_ORDER_TYPE, orderType, PortletSession.APPLICATION_SCOPE);
ModelWrapper<KokuMessage> modelWrapper = null;
KokuMessage message = null;
try {
MessageHandle msghandle = new MessageHandle();
msghandle.setMessageSource(messageSource);
message = msghandle.getMessageById(messageId);
modelWrapper = new ModelWrapperImpl<KokuMessage>(message, ResponseStatus.OK);
} catch (KokuServiceException kse) {
LOG.error("Failed to show message details. messageId: '"+messageId +
"' username: '"+request.getUserPrincipal().getName()+" taskType: '"+taskType +
"' keyword: '" + keyword + "'", kse);
modelWrapper = new ModelWrapperImpl<KokuMessage>(null, ResponseStatus.FAIL, kse.getErrorcode());
}
return modelWrapper;
}
}