Java tutorial
/* ************************************************************************************ * 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<Survey> 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 (List<Survey>) getHibernateTemplate().findByCriteria(criteria); } /** * Retrieve Survey Folders By UserId * @param userId * @return */ @SuppressWarnings("unchecked") public List<SurveyFolder> retrieveFolderByUserId(final Long userId) { return (List<SurveyFolder>) getHibernateTemplate() .findByNamedParam("FROM SurveyFolder where users.uid=:userId", "userId", userId); } @SuppressWarnings("unchecked") public List<SurveyFolder> 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 (List<SurveyFolder>) getHibernateTemplate().findByCriteria(criteria); } /** * Retrieve Surveys by Folder * @param userId * @param folderId * @return */ @SuppressWarnings("unchecked") public List<Survey> 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 (List<Survey>) getHibernateTemplate().findByCriteria(criteria); } /** * Retrieve All Folders * @return */ @SuppressWarnings("unchecked") public List<SurveyFolder> retrieveAllFolders(final Long userId) { return (List<SurveyFolder>) getHibernateTemplate().find("FROM SurveyFolder"); } /** * Retrieve Sections By Page. * @param surveyId * @return */ @SuppressWarnings("unchecked") public List<Survey> retrieveSectionsByPage(final Long surveyId) { return (List<Survey>) 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<SurveyPagination> retrieveSectionByPagination(final Integer pagId) { final DetachedCriteria criteria = DetachedCriteria.forClass(SurveyPagination.class); criteria.add(Restrictions.eq("pageNumber", 1)); return (List<SurveyPagination>) 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); } /* * (non-Javadoc) * * @see * org.encuestame.persistence.dao.ISurvey#getSurveyFolderByIdandUser(java. * lang.Long, java.lang.Long) */ 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 */ 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<Long> getTotalSurveyByOwner(final Long userId) { //editorOwner return (List<Long>) 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<SurveyResult> 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 (List<SurveyResult>) getHibernateTemplate().findByCriteria(criteria); } /* * (non-Javadoc) * @see org.encuestame.persistence.dao.ISurvey#getSurveySection(org.encuestame.persistence.domain.survey.Survey) */ @SuppressWarnings("unchecked") public List<SurveySection> getSurveySection(final Survey survey) { final DetachedCriteria criteria = DetachedCriteria.forClass(SurveySection.class); criteria.add(Restrictions.eq("survey", survey)); return (List<SurveySection>) 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<Survey> 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 (List<Survey>) getHibernateTemplate().findByCriteria(criteria); } /* * (non-Javadoc) * * @see * org.encuestame.persistence.dao.ISurvey#getSurveysRangeStats(java.lang. * String, org.encuestame.utils.enums.SearchPeriods) */ @SuppressWarnings("unchecked") public List<Object[]> 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 (List<Object[]>) getHibernateTemplate().findByCriteria(criteria); } }