uturismu.dao.HolidayPackageDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for uturismu.dao.HolidayPackageDaoImpl.java

Source

/*
 * This file is part of "U Turismu" project. 
 * 
 * U Turismu is an enterprise application in support of calabrian tour operators.
 * This system aims to promote tourist services provided by the operators
 * and to develop and improve tourism in Calabria.
 *
 * Copyright (C) 2012 "LagrecaSpaccarotella" team.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package uturismu.dao;

import java.math.BigInteger;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import uturismu.dto.HolidayPackage;
import uturismu.dto.enumtype.Status;

/**
 * @author "LagrecaSpaccarotella" team.
 * 
 */
@Repository
public class HolidayPackageDaoImpl extends AbstractDao<HolidayPackage> implements HolidayPackageDao {

    @Autowired
    public HolidayPackageDaoImpl(SessionFactory sessionFactory) {
        super(sessionFactory);
    }

    @Override
    public List<HolidayPackage> findAllPublished() {
        Criteria criteria = session().createCriteria(HolidayPackage.class);
        criteria.add(Restrictions.eq("status", Status.PUBLISHED));
        return criteria.list();
    }

    @Override
    public Long getAllPublishedNumber() {
        Criteria criteria = session().createCriteria(HolidayPackage.class);
        criteria.add(Restrictions.eq("status", Status.PUBLISHED));
        criteria.setProjection(Projections.rowCount());
        return (Long) criteria.uniqueResult();
        /*
         * String queryString = "select count(*) from HolidayPackage p"; Query
         * query = session().createQuery(queryString); //
         * query.setParameter("status", Status.PUBLISHED); return (Integer)
         * query.uniqueResult();
         */
    }

    @Override
    public List<HolidayPackage> findAllPublishedByTourOperator(Long id) {
        Criteria criteria = session().createCriteria(HolidayPackage.class);
        criteria.add(Restrictions.eq("status", Status.PUBLISHED));
        criteria.add(Restrictions.eq("tourOperator.id", id));
        return criteria.list();
    }

    @Override
    public List<HolidayPackage> findAllPublishedByTags(Long... tags) {
        StringBuilder queryBuilder = new StringBuilder("select distinct package.id from HOLIDAY_PACKAGE package");
        for (int i = 1; i <= tags.length; i++) {
            queryBuilder.append(", HOLIDAY_CLASSIFICATION c").append(i);
        }
        queryBuilder.append(" where package.status = 'PUBLISHED' and package.id = c1.id_holiday_package");
        for (int i = 1; i < tags.length; i++) {
            queryBuilder.append(" and c").append(i).append(".id_holiday_package = c").append(i + 1)
                    .append(".id_holiday_package");
        }
        for (int i = 1; i <= tags.length; i++) {
            queryBuilder.append(" and c").append(i).append(".id_holiday_tag = ?");
        }
        SQLQuery query = session().createSQLQuery(queryBuilder.toString());
        for (int i = 0; i < tags.length; i++) {
            query.setParameter(i, tags[i]);
        }
        List<BigInteger> holidayPackages = query.list();
        Criteria criteria = session().createCriteria(HolidayPackage.class);
        Disjunction disjunction = Restrictions.disjunction();
        for (BigInteger id : holidayPackages) {
            disjunction.add(Restrictions.idEq(id.longValue()));
        }
        criteria.add(disjunction);
        return criteria.list();
    }

    /*
     * @Override public List<HolidayPackage> findAllPublishedByTags(Long... tags)
     * { // carica l'oggetto persistente che rappresenta il tag HolidayTag tag =
     * (HolidayTag) session().load(HolidayTag.class, tags[0]); // acquisisce gli
     * holiday package a cui il tag  associato Set<HolidayPackage> packages =
     * tag.getHolidayPackages(); // setta il primo risultato parziale
     * List<HolidayPackage> result = new ArrayList<HolidayPackage>(packages); //
     * dichiara la variabile temporanea List<HolidayPackage> temp = null; // per
     * ogni tag passato in input (tranne il primo) for (int i = 1; i <
     * tags.length; i++) { // carica l'oggetto persistente che rappresenta il tag
     * tag = (HolidayTag) session().load(HolidayTag.class, tags[i]); //
     * acquisisce gli holiday package a cui il tag  associato packages =
     * tag.getHolidayPackages(); // inizializza la variabile temporanea temp =
     * new ArrayList<HolidayPackage>(); // per ogni holiday package for
     * (HolidayPackage holidayPackage : packages) { // se  presente nel
     * risultato parziale, vuol dire che il tag annota // entrambi gli holiday
     * package. Allora va aggiunto alla variabile // temporanea, ma solo se 
     * pubblicato. if (result.contains(holidayPackage) &&
     * holidayPackage.getStatus().equals(Status.PUBLISHED)) {
     * temp.add(holidayPackage); } } result = temp; } return result; }
     */

    @Override
    public List<HolidayPackage> findAllDraftByTourOperator(Long id) {
        Criteria criteria = this.session().createCriteria(HolidayPackage.class);
        Criterion criterionDraft = Restrictions.eq("status", Status.DRAFT);
        Criterion criterionTour = Restrictions.eq("tourOperator.id", id);
        criteria.add(Restrictions.and(criterionDraft, criterionTour));
        return criteria.list();
    }

    @Override
    public List<HolidayPackage> findAllExpiredByTourOperator(Long id) {
        Criteria criteria = this.session().createCriteria(HolidayPackage.class);
        Criterion criterionDraft = Restrictions.eq("status", Status.EXPIRED);
        Criterion criterionTour = Restrictions.eq("tourOperator.id", id);
        criteria.add(Restrictions.and(criterionDraft, criterionTour));
        return criteria.list();
    }

    @Override
    public List<HolidayPackage> findAllByTourOperator(Long id) {
        Criteria criteria = this.session().createCriteria(HolidayPackage.class);
        criteria.add(Restrictions.eq("tourOperator.id", id));
        return criteria.list();
    }

    // TODO: Implementare Modifica HolidayPackage

}