Package org.encuestame.persistence.dao.imp

Source Code of org.encuestame.persistence.dao.imp.SurveyDaoImp

/*
************************************************************************************
* Copyright (C) 2001-2011 encuestame: system online surveys Copyright (C) 2011
* encuestame Development Team.
* Licensed under the Apache Software License version 2.0
* 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.
************************************************************************************
*/
package org.encuestame.persistence.dao.imp;

import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import org.encuestame.persistence.dao.ISurvey;
import org.encuestame.persistence.domain.HashTag;
import org.encuestame.persistence.domain.question.Question;
import org.encuestame.persistence.domain.security.Account;
import org.encuestame.persistence.domain.security.UserAccount;
import org.encuestame.persistence.domain.survey.Survey;
import org.encuestame.persistence.domain.survey.SurveyFolder;
import org.encuestame.persistence.domain.survey.SurveyFormat;
import org.encuestame.persistence.domain.survey.SurveyPagination;
import org.encuestame.persistence.domain.survey.SurveyResult;
import org.encuestame.persistence.domain.survey.SurveySection;
import org.encuestame.utils.enums.SearchPeriods;
import org.encuestame.utils.enums.TypeSearchResult;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.stereotype.Repository;

/**
* Survey Dao.
* @author Picado, Juan juanATencuestame.org
* @since June 01, 2009
* @version $Id$
*/
@Repository("surveyDaoImp")
public class SurveyDaoImp extends AbstractHibernateDaoSupport implements ISurvey {

    /**
     *
     * @param sessionFactory
     */
    @Autowired
    public SurveyDaoImp(SessionFactory sessionFactory) {
             setSessionFactory(sessionFactory);
    }

    /**
     * Search survey by name.
     * @param searchString search string
     * @return {@link Collection} of {@link SurveyFormat}
     * @throws HibernateException
     */
    @SuppressWarnings("unchecked")
    public List searchSurveyByUserId(String searchString, final Long userId)
            throws HibernateException {
         final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
         criteria.add(Restrictions.like("name", searchString, MatchMode.ANYWHERE));
         criteria.add(Restrictions.eq("owner.uid", userId));
        return getHibernateTemplate().findByCriteria(criteria);

    }

    /**
     * Retrieve Survey Folders By UserId
     * @param userId
     * @return
     */
    @SuppressWarnings("unchecked")
    public List retrieveFolderByUserId(final Long userId){
        return getHibernateTemplate().findByNamedParam("FROM SurveyFolder where users.uid=:userId","userId", userId);
    }

    @SuppressWarnings("unchecked")
    public List retrieveSurveyFolderByUserAccount(final UserAccount account){
        final DetachedCriteria criteria = DetachedCriteria.forClass(SurveyFolder.class);
        criteria.add(Restrictions.eq("createdBy", account));
        criteria.add(Restrictions.eq("status", org.encuestame.utils.enums.Status.ACTIVE));
        return getHibernateTemplate().findByCriteria(criteria);
    }

    /**
     * Retrieve Surveys by Folder
     * @param userId
     * @param folderId
     * @return
     */
    @SuppressWarnings("unchecked")
    public List retrieveSurveyByFolder(final Long userId, final Long folderId){
        final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
        criteria.add(Restrictions.eq("owner.uid", userId));
        criteria.add(Restrictions.eq("surveysfolder.id", folderId));
        return getHibernateTemplate().findByCriteria(criteria);
   }

    /**
     * Retrieve All Folders
     * @return
     */
    @SuppressWarnings("unchecked")
    public List retrieveAllFolders(final Long userId){
        return getHibernateTemplate().find("FROM SurveyFolder");
    }

    /**
     * Retrieve Sections By Page.
     * @param surveyId
     * @return
     */
    @SuppressWarnings("unchecked")
    public List retrieveSectionsByPage(final Long surveyId){
        return getHibernateTemplate().findByNamedParam("FROM SurveyFolder where surveyFolderId:folderId","folderId", surveyId);
    }

    /**
     * Retrieve Survey Section by Id.
     * @param sectionId
     * @return
     */
    public SurveySection retrieveSurveySectionById(Long sectionId){
          return getHibernateTemplate().get(SurveySection.class, sectionId);
        //return (SurveySection) getHibernateTemplate().findByNamedParam("FROM SurveySection where ssid=:sectionId","sectionId", sectionId);

    }

    /**
     * Retrieve Questions by Survey Section.
     */

   /* public List<SurveySection> retrieveQuestionsBySurveySection(final Long secId){
        final SurveySection ssection = this.retrieveSurveySectionById(secId);
        List questionsSection = new ArrayList(ssection.get());
         //final List  quest = ssection.getQuestionSection();
        return questionsSection;
    }*/

    /**
     * Retrieve Sections by Page in Survey.
     */
    @SuppressWarnings("unchecked")
    public List retrieveSectionByPagination(final Integer pagId) {
        final DetachedCriteria criteria = DetachedCriteria  .forClass(SurveyPagination.class);
        criteria.add(Restrictions.eq("pageNumber", 1));
        return getHibernateTemplate().findByCriteria(criteria);
        // return getHibernateTemplate().findByNamedParam("FROM SurveyPagination where pageNumber=:pagId","pagId", pagId);
    }

    /**
     * Get Survey Folder by Id.
     * @param folderId
     * @return
     */
    public SurveyFolder getSurveyFolderById(final Long folderId){
        return getHibernateTemplate().get(SurveyFolder.class,folderId);
    }

    @SuppressWarnings("unchecked")
    public SurveyFolder getSurveyFolderByIdandUser(final Long FolderId, final Long userId){
         final DetachedCriteria criteria = DetachedCriteria.forClass(SurveyFolder.class);
         criteria.add(Restrictions.eq("users.id", userId));
         criteria.add(Restrictions.eq("id", FolderId));
         return (SurveyFolder) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));
    }

    /**
     * Get Surveys by Id and User.
     * @param surveyId
     * @param userId
     * @return
     */
    @SuppressWarnings("unchecked")
    public Survey getSurveyByIdandUserId(final Long surveyId, final Long userId){
        final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
         criteria.add(Restrictions.eq("owner.uid", userId));
         criteria.add(Restrictions.eq("sid", surveyId));
         return (Survey) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));
    }

    /**
     * Get Total of TweetPoll By User Editor.
     * @param userSecondary
     * @return
     */
    @SuppressWarnings("unchecked")
    public List getTotalSurveyByOwner(final Long userId){ //editorOwner
        return getHibernateTemplate().findByNamedParam("select count(sid) "
               +" from Survey where editorOwner.id = :editorOwner", "editorOwner", userId);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#getSurveyById(java.lang.Long)
     */
    public Survey getSurveyById(final Long surveyId) throws HibernateException {
        return (Survey) getHibernateTemplate().get(Survey.class, surveyId);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveybyQuestionName(java.lang.String, java.lang.Long, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    //TODO: migrate search to Hibernate Search.
    public List<Survey> retrieveSurveybyName(final String keyWord, final Long userId,
            final Integer maxResults,
            final Integer start){
        final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
        criteria.createAlias("editorOwner","editorOwner");
        criteria.add(Restrictions.like("name", keyWord, MatchMode.ANYWHERE));
        criteria.add(Restrictions.eq("editorOwner.uid", userId));
        return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyByDate(org.encuestame.persistence.domain.security.Account, java.util.Date, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    public List<Survey> retrieveSurveyByDate(
            final Account account,
            final Date initDate,
            final Integer maxResults,
            final Integer start){
         final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
         criteria.createAlias("owner","owner");
         criteria.add(Restrictions.between("createDate", initDate, getNextDayMidnightDate()));
         criteria.add(Restrictions.eq("owner", account));
         return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyToday(org.encuestame.persistence.domain.security.Account, java.lang.Integer, java.lang.Integer)
     */
    public List<Survey> retrieveSurveyToday(
            final Account account,
            final Integer maxResults,
            final Integer start){
       final Calendar cal = Calendar.getInstance();
       cal.set(Calendar.HOUR_OF_DAY, 0);
       cal.set(Calendar.MINUTE, 0);
       cal.set(Calendar.SECOND, 0);
       cal.set(Calendar.MILLISECOND,0);
       return retrieveSurveyByDate(account, cal.getTime(), maxResults, start);
   }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyLastWeek(org.encuestame.persistence.domain.security.Account, java.lang.Integer, java.lang.Integer)
     */
    public List<Survey> retrieveSurveyLastWeek(
            final Account account,
            final Integer maxResults,
            final Integer start){
        final Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -7);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND,0);
        return retrieveSurveyByDate(account, cal.getTime(), maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyLastYear(org.encuestame.persistence.domain.security.Account, java.lang.Integer, java.lang.Integer)
     */
    public List<Survey> retrieveSurveyLastYear(
            final Account account,
            final Integer maxResults,
            final Integer start){
        final Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, -1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND,0);
        return retrieveSurveyByDate(account, cal.getTime(), maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyLastDay(org.encuestame.persistence.domain.security.Account, java.lang.Integer, java.lang.Integer)
     */
    public List<Survey> retrieveSurveyLastDay(
            final Account account,
            final Integer maxResults,
            final Integer start){
        final Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_WEEK, -1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND,0);
        return retrieveSurveyByDate(account, cal.getTime(), maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveFavoritesSurvey(org.encuestame.persistence.domain.security.UserAccount, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    public List<Survey> retrieveFavoritesSurvey(
            final UserAccount userAccount,
            final Integer maxResults,
            final Integer start){
        final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
        criteria.createAlias("editorOwner","editorOwner");
        criteria.add(Restrictions.eq("editorOwner", userAccount));
        criteria.add(Restrictions.eq("favourites", Boolean.TRUE));
        return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveScheduledSurvey(java.lang.Long, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    public List<Survey> retrieveScheduledSurvey(
            final Long userId,
            final Integer maxResults,
            final Integer start){
        final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
        criteria.createAlias("editorOwner","editorOwner");
        criteria.add(Restrictions.eq("scheduleSurvey", Boolean.TRUE));
        criteria.add(Restrictions.isNotNull("scheduleDate"));
        criteria.add(Restrictions.eq("editorOwner.uid", userId));
        return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyByUserId(java.lang.Long, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    public List<Survey> retrieveSurveyByUserId(
            final Long userId,
            final Integer maxResults,
            final Integer start){
         final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
         criteria.createAlias("editorOwner","editorOwner");
         criteria.add(Restrictions.eq("editorOwner.uid", userId));
         criteria.addOrder(Order.desc("createDate"));
         return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#retrieveSurveyByAccount(java.lang.Long, java.lang.Integer, java.lang.Integer)
     */
    @SuppressWarnings("unchecked")
    public List<Survey> retrieveSurveyByAccount(
            final Long userId,
            final Integer maxResults,
            final Integer start){
         final DetachedCriteria criteria = DetachedCriteria.forClass(Survey.class);
         criteria.createAlias("owner","owner");
         criteria.add(Restrictions.eq("owner.uid", userId));
         criteria.addOrder(Order.desc("createDate"));
         return (List<Survey>) filterByMaxorStart(criteria, maxResults, start);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#getSurveyResponseBySurvey(org.encuestame.persistence.domain.survey.Survey)
     */
    @SuppressWarnings("unchecked")
    public List getSurveyResponseBySurvey(final Survey survey, final Question question) {
        final DetachedCriteria criteria = DetachedCriteria
                .forClass(SurveyResult.class);
        if (question != null) {
            criteria.add(Restrictions.eq("question", question));
            criteria.add(Restrictions.eq("survey", survey));
        } else {
            criteria.add(Restrictions.eq("survey", survey));
        }
        return getHibernateTemplate().findByCriteria(criteria);
    }

    /*
     * (non-Javadoc)
     * @see org.encuestame.persistence.dao.ISurvey#getSurveySection(org.encuestame.persistence.domain.survey.Survey)
     */
    @SuppressWarnings("unchecked")
    public List getSurveySection(final Survey survey){
        final DetachedCriteria criteria = DetachedCriteria.forClass(SurveySection.class);
        criteria.add(Restrictions.eq("survey", survey));
        return getHibernateTemplate().findByCriteria(criteria);
    }

    @SuppressWarnings("unchecked")
    public List<Survey> getSurveysByHashTagName(final String tagName, final Integer startResults,
            final Integer limitResults, final TypeSearchResult filterby, final SearchPeriods searchPeriods) {
        final DetachedCriteria detached = DetachedCriteria
                .forClass(Survey.class)
                .createAlias("hashTags", "hashTags")
                .setProjection(Projections.id())
                .add(Subqueries.propertyIn(
                        "hashTags.hashTagId",
                        DetachedCriteria
                                .forClass(HashTag.class, "hash")
                                .setProjection(Projections.id())
                                .add(Restrictions.in("hash.hashTag",
                                        new String[] { tagName }))));
        final DetachedCriteria criteria = DetachedCriteria.forClass(
                Survey.class, "survey");
        criteria.add(Subqueries.propertyIn("survey.sid", detached));
        if (filterby.equals(TypeSearchResult.HASHTAG)) {
            criteria.addOrder(Order.desc("survey.createDate"));
        } else if (filterby.equals(TypeSearchResult.HASHTAGRATED)) {
              criteria.addOrder(Order.desc("numbervotes"));
        }
        calculateSearchPeriodsDates(searchPeriods, detached, "createDate");
        return (List<Survey>) filterByMaxorStart(criteria, limitResults, startResults);
    }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.encuestame.persistence.dao.ISurvey#getSurveysbyHashTagNameAndDateRange
   * (java.lang.String, java.lang.Integer)
   */
    @SuppressWarnings("unchecked")
       public List getSurveysbyHashTagNameAndDateRange(
               final String tagName, final SearchPeriods period) {
           final DetachedCriteria detached = DetachedCriteria
                   .forClass(Survey.class)
                   .createAlias("hashTags", "hashTags")
                   .setProjection(Projections.id())
                   .add(Subqueries.propertyIn(
                           "hashTags.hashTagId",
                           DetachedCriteria
                                   .forClass(HashTag.class, "hash")
                                   .setProjection(Projections.id())
                                   .add(Restrictions.in("hash.hashTag",
                                           new String[] { tagName }))));
           final DetachedCriteria criteria = DetachedCriteria.forClass(
                   Survey.class, "survey");
           criteria.add(Subqueries.propertyIn("survey.sid", detached));
           criteria.addOrder(Order.desc("survey.createDate"));
           calculateSearchPeriodsDates(period, criteria, "survey.createDate");
           return getHibernateTemplate().findByCriteria(criteria);
       }


  @SuppressWarnings("unchecked")
  public List getSurveysRangeStats(final String tagName,
      final SearchPeriods period) {
    final DetachedCriteria detached = DetachedCriteria
        .forClass(Survey.class)
        .createAlias("hashTags", "hashTags")
        .setProjection(Projections.id())
        .add(Subqueries.propertyIn(
            "hashTags.hashTagId",
            DetachedCriteria
                .forClass(HashTag.class, "hash")
                .setProjection(Projections.id())
                .add(Restrictions.in("hash.hashTag",
                    new String[] { tagName }))));
    final DetachedCriteria criteria = DetachedCriteria.forClass(
        Survey.class, "survey");
    criteria.add(Subqueries.propertyIn("survey.sid", detached));
    criteria.addOrder(Order.desc("survey.createDate"));
    ProjectionList projList = Projections.projectionList();
    projList.add(Projections.groupProperty("createDate"));
    projList.add(Projections.rowCount());
    criteria.setProjection(projList);
    return getHibernateTemplate().findByCriteria(criteria);
  }
}
TOP

Related Classes of org.encuestame.persistence.dao.imp.SurveyDaoImp

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.