/** * Most of the code in the Qalingo project is copyrighted Hoteia and licensed * under the Apache License Version 2.0 (release version 0.8.0) * http://www.apache.org/licenses/LICENSE-2.0 * * Copyright (c) Hoteia, 2012-2014 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com * */ package org.hoteia.qalingo.web.mvc.controller.batch; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.apache.commons.lang.StringUtils; import org.hoteia.qalingo.core.Constants; import org.hoteia.qalingo.core.RequestConstants; import org.hoteia.qalingo.core.domain.BatchProcessObject; import org.hoteia.qalingo.core.domain.EngineSetting; import org.hoteia.qalingo.core.domain.enumtype.BatchProcessObjectType; import org.hoteia.qalingo.core.domain.enumtype.BoUrls; import org.hoteia.qalingo.core.service.BatchProcessObjectService; import org.hoteia.qalingo.core.service.EngineSettingService; import org.hoteia.qalingo.core.web.mvc.form.BatchValueForm; import org.hoteia.qalingo.core.web.mvc.viewbean.BatchViewBean; import org.hoteia.qalingo.core.web.mvc.viewbean.LinkMenuViewBean; import org.hoteia.qalingo.core.web.resolver.RequestData; import org.hoteia.qalingo.core.web.servlet.ModelAndViewThemeDevice; import org.hoteia.qalingo.web.mvc.controller.AbstractTechnicalBackofficeController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.support.PagedListHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; /** * */ @Controller("batchController") public class BatchController extends AbstractTechnicalBackofficeController { @Autowired protected BatchProcessObjectService batchProcessObjectService; @Autowired protected EngineSettingService engineSettingService; @RequestMapping("/search-batch.html*") public ModelAndView searchBatch(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); backofficeFormFactory.buildBatchQuickSearchForm(requestData); return modelAndView; } @RequestMapping(value = BoUrls.BATCH_URL, method = RequestMethod.GET) public ModelAndView batchSuccessAndError(final HttpServletRequest request, final Model model) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjects();//batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Customer); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_CRM).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); String tab = request.getParameter(RequestConstants.REQUEST_PARAMETER_TAB); /** * Save the user selected Tab page, when reset, still stuck in this tag page * so that the user experience better. That is, when user can click * one time mouse to complete an action, do not let user more than a few * mouse clicks to complete the action * */ if(null == tab){ tab = "0"; } modelAndView.addObject("tab", tab); return modelAndView; } @RequestMapping(value = BoUrls.BATCH_URL, method = RequestMethod.POST) public ModelAndView batchReset(final HttpServletRequest request, final Model model, @Valid BatchValueForm batchValueForm, BindingResult result) throws Exception { final String id = batchValueForm.getId(); final BatchProcessObject batchProcessObject = batchProcessObjectService.getBatchProcessObjectById(id); if (null != batchProcessObject) { batchProcessObject.setProcessedCount(0); // UPDATE PROCESSED_COUNT batchProcessObjectService.saveOrUpdateBatchProcessObject(batchProcessObject); } return batchSuccessAndError(request,model); } @RequestMapping(value = "/batch-customer.html*", method = RequestMethod.GET) public ModelAndView batchCustomer(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjects();//batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Customer); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_CRM).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); return modelAndView; } @RequestMapping(value = "/batch-order.html*", method = RequestMethod.GET) public ModelAndView batchOrder(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Order); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_CRM).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); return modelAndView; } @RequestMapping(value = "/batch-email.html*", method = RequestMethod.GET) public ModelAndView batchEmail(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Email); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_NOTIFICATION).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); return modelAndView; } @RequestMapping(value = "/batch-cms.html*", method = RequestMethod.GET) public ModelAndView batchCms(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Cms); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_CMS).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); return modelAndView; } @RequestMapping(value = "/batch-stock.html*", method = RequestMethod.GET) public ModelAndView batchStock(final HttpServletRequest request, final HttpServletResponse response) throws Exception { ModelAndViewThemeDevice modelAndView = new ModelAndViewThemeDevice(getCurrentVelocityPath(request), BoUrls.BATCH.getVelocityPage()); final RequestData requestData = requestUtil.getRequestData(request); final Locale locale = requestData.getLocale(); List<BatchProcessObject> batchProcessObjects = batchProcessObjectService.findBatchProcessObjectsByTypeObject(BatchProcessObjectType.Stock); initPaginationResult(request, modelAndView, batchProcessObjects); initLinks(request, modelAndView, locale); EngineSetting springBatchUrlEngineSetting = engineSettingService.getEngineSettingByCode(EngineSettingService.ENGINE_SETTING_CODE_SPRING_BATCH_URL); String springBatchUrl = springBatchUrlEngineSetting.getEngineSettingValue(EngineSettingService.ENGINE_SETTING_CONTEXT_ERP).getValue(); modelAndView.addObject("springBatchUrl", springBatchUrl); return modelAndView; } protected void initPaginationResult(final HttpServletRequest request, final ModelAndViewThemeDevice modelAndView, final List<BatchProcessObject> batchProcessObjects) throws Exception { final RequestData requestData = requestUtil.getRequestData(request); String url = requestUtil.getCurrentRequestUrl(request); String sessionKey = "PagedListHolder_Search_List_Product_" + request.getSession().getId(); String page = request.getParameter(Constants.PAGINATION_PAGE_PARAMETER); PagedListHolder<BatchViewBean> batchViewBeanPagedListHolder; if(StringUtils.isEmpty(page)){ batchViewBeanPagedListHolder = initList(request, sessionKey, batchProcessObjects, new PagedListHolder<BatchViewBean>()); } else { batchViewBeanPagedListHolder = (PagedListHolder) request.getSession().getAttribute(sessionKey); if (batchViewBeanPagedListHolder == null) { batchViewBeanPagedListHolder = initList(request, sessionKey, batchProcessObjects, batchViewBeanPagedListHolder); } int pageTarget = new Integer(page).intValue() - 1; int pageCurrent = batchViewBeanPagedListHolder.getPage(); if (pageCurrent < pageTarget) { for (int i = pageCurrent; i < pageTarget; i++) { batchViewBeanPagedListHolder.nextPage(); } } else if (pageCurrent > pageTarget) { for (int i = pageTarget; i < pageCurrent; i++) { batchViewBeanPagedListHolder.previousPage(); } } } modelAndView.addObject(Constants.PAGINATION_PAGE_URL, url); modelAndView.addObject(Constants.PAGINATION_PAGE_PAGED_LIST_HOLDER, batchViewBeanPagedListHolder); backofficeFormFactory.buildBatchQuickSearchForm(requestData); } protected PagedListHolder<BatchViewBean> initList(final HttpServletRequest request, final String sessionKey, final List<BatchProcessObject> batchProcessObjects, PagedListHolder<BatchViewBean> batchViewBeanPagedListHolder) throws Exception{ List<BatchViewBean> batchViewBeans = backofficeViewBeanFactory.buildListViewBeanBatch(requestUtil.getRequestData(request), batchProcessObjects); batchViewBeanPagedListHolder = new PagedListHolder<BatchViewBean>(batchViewBeans); batchViewBeanPagedListHolder.setPageSize(Constants.PAGINATION_DEFAULT_PAGE_SIZE); String pageSize = engineSettingService.getEngineSettingValueByCode(EngineSettingService.ENGINE_SETTING_CODE_COUNT_ITEM_BY_PAGE, EngineSettingService.ENGINE_SETTING_CONTEXT_BO_TECHNICAL_ENGINE_SETTING_LIST); if(StringUtils.isNotEmpty(pageSize)){ batchViewBeanPagedListHolder.setPageSize(Integer.parseInt(pageSize)); } request.getSession().setAttribute(sessionKey, batchViewBeanPagedListHolder); return batchViewBeanPagedListHolder; } protected void initLinks(final HttpServletRequest request, final ModelAndViewThemeDevice modelAndView, final Locale locale) throws Exception{ List<LinkMenuViewBean> batchLinks = new ArrayList<LinkMenuViewBean>(); LinkMenuViewBean linkMenuViewBean = new LinkMenuViewBean(); linkMenuViewBean.setName(coreMessageSource.getMessage("header.menu.batch.customer.list", locale)); linkMenuViewBean.setUrl(backofficeUrlService.generateUrl(BoUrls.BATCH_CUSTOMER, requestUtil.getRequestData(request))); batchLinks.add(linkMenuViewBean); linkMenuViewBean = new LinkMenuViewBean(); linkMenuViewBean.setName(coreMessageSource.getMessage("header.menu.batch.order.list", locale)); linkMenuViewBean.setUrl(backofficeUrlService.generateUrl(BoUrls.BATCH_ORDER, requestUtil.getRequestData(request))); batchLinks.add(linkMenuViewBean); linkMenuViewBean = new LinkMenuViewBean(); linkMenuViewBean.setName(coreMessageSource.getMessage("header.menu.batch.email.list", locale)); linkMenuViewBean.setUrl(backofficeUrlService.generateUrl(BoUrls.BATCH_EMAIL, requestUtil.getRequestData(request))); batchLinks.add(linkMenuViewBean); linkMenuViewBean = new LinkMenuViewBean(); linkMenuViewBean.setName(coreMessageSource.getMessage("header.menu.batch.cms.list", locale)); linkMenuViewBean.setUrl(backofficeUrlService.generateUrl(BoUrls.BATCH_CMS, requestUtil.getRequestData(request))); batchLinks.add(linkMenuViewBean); linkMenuViewBean = new LinkMenuViewBean(); linkMenuViewBean.setName(coreMessageSource.getMessage("header.menu.batch.stock.list", locale)); linkMenuViewBean.setUrl(backofficeUrlService.generateUrl(BoUrls.BATCH_STOCK, requestUtil.getRequestData(request))); batchLinks.add(linkMenuViewBean); modelAndView.addObject("links", batchLinks); } }