edu.uoc.dao.impl.MeetingRoomDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for edu.uoc.dao.impl.MeetingRoomDaoImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.dao.impl;

import edu.uoc.model.SearchMeeting;
import edu.uoc.dao.MeetingRoomDao;
import edu.uoc.model.MeetingRoom;
import edu.uoc.model.Room;
import edu.uoc.model.User;
import edu.uoc.model.UserMeeting;
import edu.uoc.util.CustomHibernateDaoSupport;
import edu.uoc.util.Util;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Subqueries;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Francesc Fernandez
 */
@Repository("MeetingRoomDao")
public class MeetingRoomDaoImpl extends CustomHibernateDaoSupport implements MeetingRoomDao, java.io.Serializable {
    //get log4j handler
    private static final Logger logger = Logger.getLogger(MeetingRoomDaoImpl.class);

    @Override
    public void save(MeetingRoom meetingRoom) {
        getHibernateTemplate().saveOrUpdate(meetingRoom);
    }

    /*@Override
    public void update(MeetingRoom meetingRoom) {
    getHibernateTemplate().merge(meetingRoom);
    }*/

    @Override
    public void delete(MeetingRoom meetingRoom) {
        getHibernateTemplate().delete(meetingRoom);
    }

    @Override
    public List<MeetingRoom> findByRoomId(int roomId, boolean onlyRecorded) {

        String extraSQL = "";
        if (onlyRecorded) {
            extraSQL = " and meeting_room_recorded = 1 ";
        }
        List list = getHibernateTemplate().find("from MeetingRoom where room_id=?" + extraSQL, roomId);
        if (list.size() > 0) {
            return list;
        } else {
            return new ArrayList<MeetingRoom>();
        }
    }

    /*@Override
    public List<MeetingRoom> findByCourseId(String courseId, boolean onlyRecorded) {
        
    String extraSQL = "";
    if (onlyRecorded) {
        extraSQL = " meeting_room_recorded = 1 and ";
    }
    List list = getHibernateTemplate().find(
            //"from MeetingRoom as meeting, Room as room where room.id_course=?" + extraSQL, courseId);
            "from MeetingRoom  WHERE "+extraSQL+" room_id in ("+courseId+")" );
    if (list.size() > 0) {
        return list;
    } else {
        return new ArrayList<MeetingRoom>();
    }
    }*/

    @Override
    public List<MeetingRoom> findByCourseId(String courseId) {

        List list = getHibernateTemplate().find("from MeetingRoom  WHERE room_id in (" + courseId + ")");
        if (list.size() > 0) {
            return list;
        } else {
            return new ArrayList<MeetingRoom>();
        }
    }

    @Override
    public MeetingRoom findByRoomIdNotFinished(int roomId) {

        List list = getHibernateTemplate().find("from MeetingRoom where room_id=? and meeting_room_finished=?",
                roomId, 0);
        if (list.size() > 0) {
            return (MeetingRoom) list.get(0);
        } else {
            return null;
        }
    }

    @Override
    public MeetingRoom findById(int id) {

        List list = getHibernateTemplate().find("from MeetingRoom where id=? ", id);
        if (list.size() > 0) {
            return (MeetingRoom) list.get(0);
        } else {
            return null;
        }
    }

    @Override
    public MeetingRoom findbyPath(String path) {
        List list = getHibernateTemplate().find("from MeetingRoom where meeting_room_path=?", path);

        if (list.size() > 0) {
            return (MeetingRoom) list.get(0);
        } else {

            return new MeetingRoom();
        }
    }

    @Override
    public List<MeetingRoom> findbyForm(SearchMeeting searchMeeting, List<Room> ids_room) {

        String topic = searchMeeting.getTopic();
        Room room = searchMeeting.getRoom();

        //Convert TimeStamp to Date
        Timestamp tsStart = Util.converToTimestamp(searchMeeting.getStart_meeting(), logger);
        Timestamp tsEnd = Util.converToTimestamp(searchMeeting.getEnd_meeting(), logger);

        Criteria criteria;
        criteria = this.getSession().createCriteria(MeetingRoom.class, "meeting");
        criteria.add(Restrictions.eq("meeting.finished", (byte) 1));
        criteria.add(Restrictions.eq("meeting.recorded", (byte) 1));
        if (tsStart != null) {
            criteria.add(Restrictions.ge("meeting.start_meeting", tsStart));
        }
        if (tsEnd != null) {
            criteria.add(Restrictions.le("meeting.end_meeting", tsEnd));
        }
        if (topic != null && topic.length() > 0) {
            criteria.add(Restrictions.like("meeting.topic", "%" + topic + "%"));
        }
        if (room != null && room.getId() > 0) {
            criteria.add(Restrictions.eq("meeting.id_room", room));
        } else {
            criteria.add(Restrictions.in("meeting.id_room", ids_room));
        }
        if (searchMeeting.getParticipants() != null && searchMeeting.getParticipants().length() > 0) {
            DetachedCriteria subCriteria = DetachedCriteria.forClass(UserMeeting.class, "userMeeting");
            subCriteria.createAlias("userMeeting.pk.meeting", "userMeeting.id");
            subCriteria.setProjection(Projections.projectionList().add(Projections.property("userMeeting.id")));
            subCriteria.add(Restrictions.eqProperty("meeting.id", "userMeeting.id"));

            DetachedCriteria subCriteriaUser = DetachedCriteria.forClass(User.class, "user");
            subCriteriaUser.setProjection(Projections.projectionList().add(Projections.property("user.id")));
            subCriteriaUser.add(Restrictions.like("user.fullname", "%" + searchMeeting.getParticipants() + "%"));
            subCriteriaUser.add(Restrictions.eqProperty("user.id", "userMeeting.pk.user.id"));
            subCriteria.add(Subqueries.exists(subCriteriaUser));
            criteria.add(Subqueries.exists(subCriteria));
        }
        logger.info("Criteria " + criteria.toString());

        return criteria.list();
    }

}