package fi.arcusys.koku.web; import static fi.arcusys.koku.util.Constants.*; 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.tiva.warrant.citizens.KokuCitizenWarrantHandle; import fi.arcusys.koku.tiva.warrant.employee.KokuEmployeeWarrantHandle; import fi.arcusys.koku.tiva.warrant.model.KokuAuthorizationSummary; import fi.arcusys.koku.users.UserIdResolver; import fi.arcusys.koku.web.util.ModelWrapper; import fi.arcusys.koku.web.util.ResponseStatus; import fi.arcusys.koku.web.util.impl.ModelWrapperImpl; /** * Shows warrant form page and store the current query information on the jsp page * * @author Toni Turunen */ @Controller("singleWarrantController") @RequestMapping(value = "VIEW") public class ShowWarrantController extends AbstractController { private static final Logger LOG = LoggerFactory.getLogger(ShowWarrantController.class); @Resource private ResourceBundleMessageSource messageSource; /** * Shows warrant page * @param response RenderResponse * @return consent page */ @RenderMapping(params = "myaction=showWarrant") public String showPageView(RenderResponse response) { return VIEW_SHOW_WARRANT; } /** * Creates data model integrated into the page and stores the page * @param authorizationId authorization 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 KokuAuthorizationSummary data model */ @ModelAttribute(value = "warrant") public ModelWrapper<KokuAuthorizationSummary> model( @RequestParam String authorizationId, @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<KokuAuthorizationSummary> model = null; final PortletSession portletSession = request.getPortletSession(); final String username = (String) portletSession.getAttribute(ATTR_USERNAME); String userId = (String) portletSession.getAttribute(ATTR_USER_ID); if (userId == null) { try { UserIdResolver resolver = new UserIdResolver(); userId = resolver.getUserId(username, getPortalRole()); portletSession.setAttribute(ATTR_USER_ID, userId); } catch (KokuServiceException e) { LOG.error("Failed to get UserUid username: '"+username+"' portalRole: '"+getPortalRole()+"'", e); } } KokuAuthorizationSummary warrant = null; try { long authId = -1; try { authId = Long.valueOf(authorizationId); } catch (NumberFormatException nfe) { throw new KokuServiceException("AuthorizationID is not valid! Username: '" + username + "' UserId: '" + userId + "' AuthorizationId: '"+ authorizationId+"'", nfe); } if(taskType.equals(TASK_TYPE_WARRANT_BROWSE_RECEIEVED)) { KokuCitizenWarrantHandle handle = new KokuCitizenWarrantHandle(); handle.setMessageSource(messageSource); warrant = handle.getAuthorizationSummaryById(authId, userId); } else if(taskType.equals(TASK_TYPE_WARRANT_BROWSE_SENT)) { KokuCitizenWarrantHandle handle = new KokuCitizenWarrantHandle(); handle.setMessageSource(messageSource); warrant = handle.getAuthorizationSummaryById(authId, userId); } else if (taskType.equals(TASK_TYPE_WARRANT_LIST_CITIZEN_CONSENTS) || taskType.equals(TASK_TYPE_WARRANT_LIST_SUBJECT_CONSENTS)) { KokuEmployeeWarrantHandle handle = new KokuEmployeeWarrantHandle(); handle.setMessageSource(messageSource); try { warrant = handle.getAuthorizationDetails(Integer.valueOf(authorizationId)); } catch (NumberFormatException nfe) { throw new KokuServiceException("AuthorizationID is not valid! Username: '" + username + "' UserId: '" + userId + "' AuthorizationId: '"+ authorizationId+"'", nfe); } } model = new ModelWrapperImpl<KokuAuthorizationSummary>(warrant); } catch (KokuServiceException kse) { LOG.error("Failed to show warrant details. authorizationId: '"+authorizationId + "' username: '"+request.getUserPrincipal().getName()+" taskType: '"+taskType + "' keyword: '" + keyword + "'", kse); model = new ModelWrapperImpl<KokuAuthorizationSummary>(null, ResponseStatus.FAIL, kse.getErrorcode()); } return model; } }