Package sagan.search.support

Source Code of sagan.search.support.SearchController

package sagan.search.support;

import sagan.search.SearchException;
import sagan.support.nav.PageableFactory;
import sagan.support.nav.PaginationInfo;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import static org.springframework.web.bind.annotation.RequestMethod.*;

/**
* Controller that handles search requests at /search.
*/
@Controller
@RequestMapping("/search")
class SearchController {

    private final SearchService searchService;

    @Autowired
    public SearchController(SearchService searchService) {
        this.searchService = searchService;
    }

    @RequestMapping(method = { GET, HEAD, POST })
    public String search(SearchForm searchForm, @RequestParam(defaultValue = "1") int page, Model model) {
        Pageable pageable = PageableFactory.forSearch(page);
        SearchResults searchResults = searchService.search(searchForm.getQ(), pageable, searchForm.getFilters());
        Page<SearchResult> entries = searchResults.getPage();
        model.addAttribute("totalResultsCount", entries.getTotalElements());
        model.addAttribute("results", entries.getContent());
        model.addAttribute("paginationInfo", new PaginationInfo(entries));
        SearchFacet root = new SpringFacetsBuilder(searchResults.getFacets()).build();
        model.addAttribute("rootFacet", root);
        model.addAttribute("searchForm", searchForm);
        return "search/results";
    }

    @ExceptionHandler(SearchException.class)
    public String handleSearchException(SearchException exception, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return "search/searcherror";
    }
}
TOP

Related Classes of sagan.search.support.SearchController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.