Subversion Repositories bacoAlunos

Rev

Rev 44 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.domain.dao.impl;

import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.GenericUser;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;

import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.Criteria;
import jomm.dao.impl.AbstractDao;
import jomm.utils.MyCalendar;


/**
 * @author Jorge Machado
 * @date 28/Fev/2008
 * @time 2:51:06
 * @see pt.estgp.estgweb.domain.dao.impl
 */

public class AnnouncementDaoImpl extends AnnouncementDao
{
    public static AnnouncementDaoImpl getInstance()
    {
        if (myInstance == null)
            myInstance = new AnnouncementDaoImpl();
        return (AnnouncementDaoImpl) myInstance;
    }

    public List<Announcement> findAnnouncements(int maxAnnouncements,List<String> roles)
    {
        if(roles == null)
        {
            roles = new ArrayList<String>();
            roles.add("all");
        }
        Criteria criteria = createCriteria();
        Criterion co = null;
        for(1.5.0/docs/api/java/lang/String.html">String role: roles)
        {
            Criterion cor = like("targetRoles","%" + role + "%");
            if(co == null)
                co = cor;
            else
                co = or(co,cor);
        }
        MyCalendar cNow = new MyCalendar();
        MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(),cNow.getMonth(),cNow.getDay());
        5+0%2Fdocs%2Fapi+Date">Date now = calendarWithOutTime.getTime();
        criteria.add(co)
                .add(or(or(lt("startDate",now),eq("startDate",now)),isNull("startDate")))
                .add(or(or(gt("expireDate",now),eq("expireDate",now)),isNull("expireDate")))
                .add(eq("status",true))
                .setMaxResults(maxAnnouncements)
                .addOrder(Order.desc("saveDate"));
        return criteria.list();
    }

    public List<Announcement> findAnnouncements(int maxAnnouncements,List<String> roles,1.5.0/docs/api/java/lang/String.html">String type)
    {
        return findAnnouncements(0,maxAnnouncements,roles, type);
    }
    public List<Announcement> findAnnouncements(int startPage, int maxAnnouncements,List<String> roles,1.5.0/docs/api/java/lang/String.html">String type)
    {
        Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(maxAnnouncements, roles,type);
        return criteria.setFirstResult(maxAnnouncements*startPage).list();
    }

    public int countAnnouncements(int maxAnnouncements,List<String> roles,1.5.0/docs/api/java/lang/String.html">String type)
    {
        Criteria criteria = createMaxAnnouncementsRolesTypeCriteria(1.5.0/docs/api/java/lang/Integer.html">Integer.MAX_VALUE, roles,type);
        return criteria.list().size();
    }

    private Criteria createMaxAnnouncementsRolesTypeCriteria(int maxAnnouncements,List<String> roles,1.5.0/docs/api/java/lang/String.html">String type)
    {
        if(roles == null)
        {
            roles = new ArrayList<String>();
            roles.add("all");
        }
        Criteria criteria = createCriteria();
        Criterion coRole = null;
        for(1.5.0/docs/api/java/lang/String.html">String role: roles)
        {
            Criterion cor = like("targetRoles","%" + role + "%");
            if(coRole == null)
                coRole = cor;
            else
                coRole = or(coRole,cor);
        }
        Criterion coType=eq("type",type) ;
        MyCalendar cNow = new MyCalendar();
        MyCalendar calendarWithOutTime = new MyCalendar(cNow.getYear(),cNow.getMonth(),cNow.getDay());
        5+0%2Fdocs%2Fapi+Date">Date now = calendarWithOutTime.getTime();
        criteria.add(coRole)
                .add(coType)
                .add(or(or(lt("startDate",now),eq("startDate",now)),isNull("startDate")))
                .add(or(or(gt("expireDate",now),eq("expireDate",now)),isNull("expireDate")))
                .add(eq("status",true))
                .setMaxResults(maxAnnouncements)
                .addOrder(Order.desc("saveDate"));
        return criteria;
    }


    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args)
    {
        AbstractDao.getCurrentSession().beginTransaction();
        List<String> roles = new ArrayList<String>();
        roles.add("student");
        roles.add("teacher");
        1.5.0/docs/api/java/lang/String.html">String typeNews="news";
        List<Announcement> as =  new AnnouncementDaoImpl().findAnnouncements(5,roles,typeNews);

        for(Announcement a : as)
        {
            GenericUser us = a.getOwner();
            List<String> userRoles=us.getOwnerRoles();
            for(1.5.0/docs/api/java/lang/String.html">String role:userRoles){
                1.5.0/docs/api/java/lang/System.html">System.out.println("--->"+role);
            }
            1.5.0/docs/api/java/lang/System.html">System.out.println(a.getSaveDate() + ":" + a.getTitle() + " " + a.getOwner().getName() );
        }
        AbstractDao.getCurrentSession().beginTransaction().commit();
    }
}