/*
* Copyright (c) 2005-2011 Grameen Foundation USA
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* See also http://www.apache.org/licenses/LICENSE-2.0.html for an
* explanation of the license and how it is applied.
*/
package org.mifos.ui.core.controller;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.mifos.application.admin.servicefacade.PersonnelServiceFacade;
import org.mifos.dto.domain.UserDetailDto;
import org.mifos.dto.domain.UserSearchDto;
import org.mifos.dto.screen.SystemUserSearchResultsDto;
import org.springframework.beans.factory.annotation.Autowired;
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.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/viewSystemUsers")
@SessionAttributes(value = {"searchResults", "pagedResults"})
public class SystemUserSearchController {
@Autowired
private PersonnelServiceFacade personnelServiceFacade;
protected SystemUserSearchController(){
//for spring autowiring
}
public SystemUserSearchController(PersonnelServiceFacade personnelServiceFacade) {
this.personnelServiceFacade = personnelServiceFacade;
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView displaySystemUsers(ModelMap model) {
ModelAndView mav = new ModelAndView("viewSystemUsers");
SystemUserSearchFormBean formBean = (SystemUserSearchFormBean) model.get("searchResults");
SystemUserSearchResultsDto result = (SystemUserSearchResultsDto) model.get("pagedResults");
if (result == null) {
List<UserDetailDto> pagedUserDetails = new ArrayList<UserDetailDto>();
result = new SystemUserSearchResultsDto(0, 0, 0, 0, pagedUserDetails);
formBean = new SystemUserSearchFormBean();
}
mav.addObject("searchResults", formBean);
mav.addObject("pagedResults", result);
return mav;
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView processSearch(@RequestParam(required=false, value="next") String next,
@RequestParam(required=false, value="previous") String previous,
@RequestParam(required=false, value="searchbutton") String newSearch,
@RequestParam(required=false, value="lastSearch") String lastSearchTerm,
@RequestParam(required=true, value="lastPage") Integer lastPage,
@ModelAttribute("searchResults") SystemUserSearchFormBean searchResultsFormBean) {
int startingPage = lastPage;
if (StringUtils.isNotBlank(next)) {
startingPage++;
searchResultsFormBean.setSearch(lastSearchTerm);
} else if (StringUtils.isNotBlank(previous)) {
startingPage--;
searchResultsFormBean.setSearch(lastSearchTerm);
} else if (StringUtils.isNotBlank(newSearch)) {
startingPage = 1;
}
if (startingPage <= 0) {
startingPage = 1;
}
UserSearchDto searchDto = new UserSearchDto(searchResultsFormBean.getSearch(), startingPage, 10);
SystemUserSearchResultsDto dto = this.personnelServiceFacade.searchUser(searchDto);
ModelAndView mav = new ModelAndView("redirect:/viewSystemUsers.ftl");
mav.addObject("searchResults", searchResultsFormBean);
mav.addObject("pagedResults", dto);
return mav;
}
}