// need to inform motion to value
  // example /userbase/anonymous/abc=123,bcd=234?count=20
  @RequestMapping(value = "/userbase/anonymous/{params}", method = RequestMethod.GET)
  public ModelAndView recommandToAnonymous(
      @PathVariable("params") String params,
      @RequestParam(value = "count", required = false) Integer count)
      throws SuggestEngineException {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("home");

    HashMap<String, String> map = new HashMap<String, String>();
    StringBuilder url_param = new StringBuilder();

    String[] item_value = params.split(",");

    logger.info("Id num " + item_value.length);

    for (int i = 0; i < item_value.length; i++) {

      logger.info("item_value: " + item_value[i]);

      String[] pair = item_value[i].split("=");

      url_param.append("{itemId_" + i + "}={value_" + i + "}/");

      map.put("itemId_" + i, pair[0]);
      logger.info("itemId: " + pair[0]);

      if (pair.length == 2) {

        map.put("value_" + i, pair[1]);

        logger.info("value: " + pair[1]);
      } else {
        map.put("value_" + i, PropertiesUtil.getRecommendToAnonymousItemDefalutValue());
        //				logger.info("itemId: " + pair[1]);
      }
    }

    if (null != count) map.put("size", String.valueOf(count));
    else map.put("size", PropertiesUtil.getRecommendListDefalutCount());

    RecommendList list = recommendService.recommendToAnonymous(url_param.toString(), map);

    String str = list.getList().get(0).get(0);

    mav.addObject("list", str);

    return mav;
  }
  // example /itembase/mostPopular?count=20
  @RequestMapping(value = "/itembase/mostPopular", method = RequestMethod.GET)
  public ModelAndView findMostPopularItems(
      @RequestParam(value = "count", required = false) Integer count)
      throws SuggestEngineException {

    ModelAndView mav = new ModelAndView();
    mav.setViewName("home");

    HashMap<String, String> map = new HashMap<String, String>();

    if (null != count) map.put("size", String.valueOf(count));
    else map.put("size", PropertiesUtil.getRecommendListDefalutCount());

    RecommendList list = itemService.mostPopularItems(map); // throw exception

    RecommandResponse recommandResponse = new RecommandResponse();
    List<RecommandItem> reclist = new ArrayList<RecommandItem>();

    for (ArrayList<String> temp : list.getList()) {
      RecommandItem recommandItem = new RecommandItem();
      recommandItem.setId(temp.get(0));
      recommandItem.setScore(temp.get(1));
      reclist.add(recommandItem);
    }

    recommandResponse.setStatus("200");
    //		recommandResponse.setCount(map.get("size"));
    //		recommandResponse.setCki(map.get("cki"));
    recommandResponse.setRecommandlist(reclist);

    mav.addObject("responseList", recommandResponse);

    return mav;
  }
  // example /userbase/multi/1345,abc,efg?count=20&cki=true
  @RequestMapping(value = "/userbase/multi/{params}", method = RequestMethod.GET)
  public ModelAndView recommandToMany(
      @PathVariable("params") String params,
      @RequestParam(value = "count", required = false) Integer count,
      @RequestParam(value = "cki", required = false) Boolean cki)
      throws SuggestEngineException {

    ModelAndView mav = new ModelAndView();
    mav.setViewName("home");

    HashMap<String, String> map = new HashMap<String, String>();
    StringBuilder url_param = new StringBuilder();

    String[] userId = params.split(",");

    logger.info("Id num " + userId.length);

    for (int i = 0; i < userId.length; i++) {

      logger.info("userId: " + userId[i]);

      url_param.append("{userId_" + i + "}/");

      map.put("userId_" + i, userId[i]);
    }

    if (null != count) map.put("size", String.valueOf(count));
    else map.put("size", PropertiesUtil.getRecommendListDefalutCount());

    if (null != cki) map.put("cki", String.valueOf(cki));
    else map.put("cki", PropertiesUtil.getRecommendListDefalutCKI());

    logger.info("count " + count);
    logger.info("cki " + cki);

    RecommendList list = recommendService.recommendToMany(url_param.toString(), map);

    String str = list.getList().get(0).get(0);

    mav.addObject("list", str);

    return mav;
  }
  // example /userbase/single/12345
  @RequestMapping(value = "/userbase/single/{userId}", method = RequestMethod.GET)
  public ModelAndView recommandToSingle(
      @PathVariable("userId") String userId,
      @RequestParam(value = "count", required = false) Integer count,
      @RequestParam(value = "cki", required = false) Boolean cki)
      throws SuggestEngineException {

    ModelAndView mav = new ModelAndView();
    mav.setViewName("responseXml");

    HashMap<String, String> map = new HashMap<String, String>();

    map.put("userId", userId);

    if (null != count) map.put("size", String.valueOf(count));
    else map.put("size", PropertiesUtil.getRecommendListDefalutCount());

    if (null != cki) map.put("cki", String.valueOf(cki));
    else map.put("cki", PropertiesUtil.getRecommendListDefalutCKI());

    RecommendList list = recommendService.recommendToSingle(map); // throw exception

    RecommandResponse recommandResponse = new RecommandResponse();
    List<RecommandItem> reclist = new ArrayList<RecommandItem>();

    for (ArrayList<String> temp : list.getList()) {
      RecommandItem recommandItem = new RecommandItem();
      recommandItem.setId(temp.get(0));
      recommandItem.setScore(temp.get(1));
      reclist.add(recommandItem);
    }

    recommandResponse.setStatus("200");
    recommandResponse.setCount(map.get("size"));
    recommandResponse.setCki(map.get("cki"));
    recommandResponse.setRecommandlist(reclist);

    mav.addObject("responseList", recommandResponse);

    return mav;
  }
  // example /itembase/similarItems/abc,bcd,efg
  @RequestMapping(value = "/itembase/similarItems/{params}", method = RequestMethod.GET)
  public ModelAndView findSimilarItems(
      @PathVariable("params") String params,
      @RequestParam(value = "count", required = false) Integer count)
      throws SuggestEngineException {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("home");

    HashMap<String, String> map = new HashMap<String, String>();
    StringBuilder url_param = new StringBuilder();

    String[] itemId = params.split(",");

    logger.info("Id num " + itemId.length);

    map.put("item_count", String.valueOf(itemId.length));

    for (int i = 0; i < itemId.length; i++) {

      logger.info("itemId: " + itemId[i]);

      url_param.append("{itemId_" + i + "}/");

      map.put("itemId_" + i, itemId[i]);
    }

    if (null != count) map.put("size", String.valueOf(count));
    else map.put("size", PropertiesUtil.getRecommendListDefalutCount());

    logger.info("count " + count);

    RecommendList list = itemService.mostSimilarItems(url_param.toString(), map); // throw exception

    RecommandResponse recommandResponse = new RecommandResponse();
    List<RecommandItem> reclist = new ArrayList<RecommandItem>();

    for (ArrayList<String> temp : list.getList()) {
      RecommandItem recommandItem = new RecommandItem();
      recommandItem.setId(temp.get(0));
      recommandItem.setScore(temp.get(1));
      reclist.add(recommandItem);
    }

    recommandResponse.setStatus("200");
    recommandResponse.setCount(map.get("size"));
    //		recommandResponse.setCki(map.get("cki"));
    recommandResponse.setRecommandlist(reclist);

    mav.addObject("responseList", recommandResponse);

    return mav;
  }