/**
  * Create {@link HashTag}.
  *
  * @param name tag name
  * @return {@link HashTag}.
  */
 public final HashTag createHashTag(final String name) {
   final HashTag hashTag = new HashTag();
   hashTag.setHashTag(ValidationUtils.removeNonAlphanumericCharacters(name));
   hashTag.setHits(1L); // FIXME: should be parametrized ?
   hashTag.setSize(12L); // FIXME: should be parametrized ?
   hashTag.setUpdatedDate(Calendar.getInstance().getTime());
   getHashTagDao().saveOrUpdate(hashTag);
   return hashTag;
 }
 /*
  * (non-Javadoc)
  *
  * @see
  * org.encuestame.core.service.imp.IStatisticsService#getHashTagHitsbyName
  * (java.lang.String, org.encuestame.utils.enums.TypeSearchResult,
  * javax.servlet.http.HttpServletRequest)
  */
 public HashTagDetailStats getHashTagHitsbyName(
     final String tagName,
     final TypeSearchResult filterBy,
     final HttpServletRequest request,
     final SearchPeriods periods)
     throws EnMeNoResultsFoundException {
   final HashTag tag = getHashTag(tagName, true);
   final Long hits = this.getTotalHits(tag.getHashTagId(), TypeSearchResult.HASHTAG, periods);
   final HashTagDetailStats detailStatItem =
       this.createHashTagDetailButtonStats(
           HashTagRate.LBL_HITS, hits, HashTagRate.SUB_LBL_TIMES, request);
   return detailStatItem;
 }
 /*
  * (non-Javadoc)
  *
  * @see org.encuestame.core.service.imp.IStatisticsService#
  * getTotalHitsUsagebyHashTagAndDateRange(java.lang.String,
  * java.lang.Integer, javax.servlet.http.HttpServletRequest)
  */
 public List<HashTagDetailStats> getTotalHitsUsagebyHashTagAndDateRange(
     final String hashTagName, final SearchPeriods period, final HttpServletRequest request)
     throws EnMeNoResultsFoundException, EnMeSearchException {
   List<Hit> hashTagHits = new ArrayList<Hit>();
   List<HashTagDetailStats> tagDetailStatsByHits = new ArrayList<HashTagDetailStats>();
   final HashTag tag = this.getHashTag(hashTagName, Boolean.TRUE);
   List<ItemStatDetail> itemStatDetailByHits = new ArrayList<ItemStatDetail>();
   if (tag != null) {
     hashTagHits = getFrontEndDao().getHashTagHitsbyDateRange(tag.getHashTagId(), period.toDays());
   }
   itemStatDetailByHits.addAll(ConvertDomainBean.convertHitListToItemDetailBean(hashTagHits));
   tagDetailStatsByHits = this.compareList(itemStatDetailByHits, period, request);
   return tagDetailStatsByHits;
 }
  /*
   * (non-Javadoc)
   *
   * @see org.encuestame.core.service.imp.IStatisticsService#
   * getTotalUsagebyHashtagAndDateRangeGraph(java.lang.String,
   * org.encuestame.utils.enums.SearchPeriods,
   * javax.servlet.http.HttpServletRequest)
   */
  public List<HashTagListGraphData> getTotalUsagebyHashtagAndDateRangeListGraph(
      final String hashTagName, final SearchPeriods period, final HttpServletRequest request)
      throws EnMeNoResultsFoundException, EnMeSearchException {
    // Check if the hashtag exists
    /*
       labels : ["January","February","March","April","May","June","July"],
               datasets : [
                   {
                       fillColor : "rgba(220,220,220,0.5)",
                       strokeColor : "rgba(220,220,220,1)",
                       pointColor : "rgba(220,220,220,1)",
                       pointStrokeColor : "#fff",
                       data : [65,59,90,81,56,55,40]
                   }
               ]
    */
    final HashTag tag = this.getHashTag(hashTagName, true);
    final List<Object[]> tweetPollsByDateRange = new ArrayList<Object[]>();
    final List<Object[]> pollsByDateRange = new ArrayList<Object[]>();
    final List<Object[]> surveysByDateRange = new ArrayList<Object[]>();
    final List<ItemStatDetail> itemStatDetailByUsage = new ArrayList<ItemStatDetail>();
    // If the tag exists then obtains the total
    final List<HashTagListGraphData> tagDetailStatsByTagName =
        new ArrayList<HashTagListGraphData>();

    // from database
    tweetPollsByDateRange.addAll(this.getTweetPollsRangeStats(tag.getHashTag(), period));
    pollsByDateRange.addAll(this.getPollsRangeStats(tag.getHashTag(), period));
    surveysByDateRange.addAll(this.getSurveysRangeStats(tag.getHashTag(), period));

    // object conversion
    itemStatDetailByUsage.addAll(
        ConvertDomainBean.convertObjectListToItemDetailBean(tweetPollsByDateRange));
    itemStatDetailByUsage.addAll(
        ConvertDomainBean.convertObjectListToItemDetailBean(pollsByDateRange));
    itemStatDetailByUsage.addAll(
        ConvertDomainBean.convertObjectListToItemDetailBean(surveysByDateRange));

    tagDetailStatsByTagName.addAll(
        this.groupListItemStatDetail(itemStatDetailByUsage, period, request));

    return tagDetailStatsByTagName;
  }
 /*
  * (non-Javadoc)
  *
  * @see org.encuestame.core.service.imp.IStatisticsService#
  * getTotalUsagebyHashTagAndDateRange(java.lang.String, java.lang.Integer,
  * javax.servlet.http.HttpServletRequest)
  */
 public List<HashTagDetailStats> getTotalUsagebyHashTagAndDateRange(
     final String hashTagName, final SearchPeriods period, final HttpServletRequest request)
     throws EnMeNoResultsFoundException, EnMeSearchException {
   // Check if the hashtag exists
   final HashTag tag = this.getHashTag(hashTagName, true);
   List tweetPollsByDateRange = new ArrayList();
   List<Poll> pollsByDateRange = new ArrayList<Poll>();
   List<Survey> surveysByDateRange = new ArrayList<Survey>();
   List<ItemStatDetail> itemStatDetailByUsage = new ArrayList<ItemStatDetail>();
   // If the tag exists then obtains the total
   List<HashTagDetailStats> tagDetailStatsByTagName = new ArrayList<HashTagDetailStats>();
   tweetPollsByDateRange =
       this.getTotalTweetPollUsageByHashTagAndDateRange(tag.getHashTag(), period);
   pollsByDateRange = this.getTotalPollUsageByHashTagAndDateRange(tag.getHashTag(), period);
   surveysByDateRange = this.getTotalSurveyUsageByHashTagAndDateRange(tag.getHashTag(), period);
   itemStatDetailByUsage.addAll(
       ConvertDomainBean.convertObjectTweetPollListToItemDetailBean(tweetPollsByDateRange));
   itemStatDetailByUsage.addAll(
       ConvertDomainBean.convertPollListToItemDetailBean(pollsByDateRange));
   itemStatDetailByUsage.addAll(
       ConvertDomainBean.convertSurveyListToItemDetailBean(surveysByDateRange));
   tagDetailStatsByTagName = this.compareList(itemStatDetailByUsage, period, request);
   return tagDetailStatsByTagName;
 }