Package net.baguajie.web.mvc.controllers

Source Code of net.baguajie.web.mvc.controllers.SearchSpotsController

package net.baguajie.web.mvc.controllers;

import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import net.baguajie.constants.ActivityType;
import net.baguajie.constants.AjaxResultCode;
import net.baguajie.constants.ApplicationConfig;
import net.baguajie.domains.Comment;
import net.baguajie.domains.Spot;
import net.baguajie.domains.Activity;
import net.baguajie.exceptions.ResourceNotFoundException;
import net.baguajie.repositories.ActivityRepository;
import net.baguajie.repositories.CityMetaRepository;
import net.baguajie.repositories.CommentRepository;
import net.baguajie.repositories.SpotRepository;
import net.baguajie.repositories.UserRepository;
import net.baguajie.vo.AjaxResult;
import net.baguajie.vo.MarkerVo;
import net.baguajie.vo.PinVo;
import net.baguajie.web.utils.AjaxUtil;
import net.baguajie.web.utils.MapUtil;
import net.baguajie.web.utils.SessionUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/spots")
public class SearchSpotsController {
  private static final Logger logger =
      LoggerFactory.getLogger(SearchSpotsController.class);
  @Autowired
  private CityMetaRepository cityMetaRepository;
  @Autowired
  private SpotRepository spotRepository;
  @Autowired
  private ActivityRepository activityRepository;
  @Autowired
  private CommentRepository commentRepository;
  @Autowired
  UserRepository userRepository;
  @Autowired
  private AjaxUtil ajaxUtil;
  @Autowired
  MapUtil mapUtil;
  @Autowired
  SessionUtil sessionUtil;
 
  @RequestMapping(value="/search/list", method=RequestMethod.GET)
  public String search(Model model, HttpServletRequest request){
    Iterable<Spot> spots = doSearch(request, false);
    Collection<PinVo> pins = new ArrayList<PinVo>();
    if(spots!=null){
      Pageable pageable = new PageRequest(0,
          ApplicationConfig.pinCmtPageSize,
          new Sort(new Order(Direction.DESC, "createdAt")));
      for(Spot spot : spots){
        try{
          Activity act = activityRepository.getByOwnerAndTargetSpotAndType(
              spot.getCreatedBy().getId(), spot.getId(), ActivityType.SPOT.name());
          Page<Comment> cmts = null;
          if(act!=null){
             cmts = commentRepository.findByAct(
                act.getId(), pageable);
          }
          if(spot.getPlace()==null){
            pins.add(PinVo.from(spot,
                cityMetaRepository.getByPinyin(StringUtils.hasText(spot.getCity())?
                    spot.getCity():ApplicationConfig.defaultCityPinyin), act, cmts));
          }else{
            pins.add(PinVo.from(spot,null, act, cmts));
          }
        }catch(Exception e){
          logger.warn(e.getMessage(), e);
        }
      }
    }
    logger.info("**** Get " + (pins!=null?pins.size():0)+" spots");
    model.addAttribute("pins", pins);
    return "spots/list";
  }
 
  private Iterable<Spot> doSearch(HttpServletRequest request, boolean isMarker){
    String city = request.getParameter("city");
    String category = request.getParameter("category");
    String summaryLike = request.getParameter("keyword");
    String no = request.getParameter("no");
    logger.info("city:" + city);
    logger.info("category:" + category);
    logger.info("keyword:" + summaryLike);
    logger.info("no:" + no);
    int pageNo = 0;
    try{
      pageNo = Integer.parseInt(no);
    }catch(NumberFormatException nfe){
      logger.info("paramater page no is invalid, will use 0 as default.");
    }
    Pageable pageable = new PageRequest(Math.max(pageNo, 0),
        ApplicationConfig.masonryPageSize,
        new Sort(new Order(Direction.DESC, "createdAt")));
    if(ApplicationConfig.defaultCityPinyin.equals(city)){
      city = "";
    }
   
    Iterable<Spot> spots = null;
    if(!isMarker){
      spots = spotRepository.search(StringUtils.trimWhitespace(city),
          StringUtils.trimWhitespace(category),
            StringUtils.trimWhitespace(summaryLike), pageable);
    }else{
      spots = spotRepository.searchMarker( StringUtils.trimWhitespace(city),
          StringUtils.trimWhitespace(category),
            StringUtils.trimWhitespace(summaryLike), pageable);
    }
    return spots;
  }
 
  @RequestMapping(value="/search/marker", method=RequestMethod.GET)
  public @ResponseBody AjaxResult marker(Model model, HttpServletRequest request){
    if(!ajaxUtil.isAjaxRequest(request)){
      throw new ResourceNotFoundException();
    }
    Iterable<Spot> spots = doSearch(request, true);
    Collection<MarkerVo> markers = new ArrayList<MarkerVo>();
    if(spots!=null){
      for(Spot spot : spots){
        MarkerVo vo = MarkerVo.from(spot);
        if(vo!=null){
          markers.add(MarkerVo.from(spot));
        }
      }
    }
    return new AjaxResult(AjaxResultCode.SUCCESS, markers);
  }
}
TOP

Related Classes of net.baguajie.web.mvc.controllers.SearchSpotsController

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.