Subversion Repositories bacoAlunos

Rev

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

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

import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.BlogImpl;
import pt.estgp.estgweb.domain.Blog;
import pt.estgp.estgweb.domain.Announcement;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;

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

import org.hibernate.HibernateException;
import org.hibernate.Criteria;
import static org.hibernate.criterion.Restrictions.*;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import jomm.dao.DaoException;

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

public class BlogDaoImpl extends BlogDao
{
    private BlogDaoImpl()
    {
    }

    public static BlogDaoImpl getInstance()
    {
        if (myInstance == null)
            myInstance = new BlogDaoImpl();
        return (BlogDaoImpl) myInstance;
    }

    public List<BlogImpl> loadOwnedBlogs(long ownerId)
    {
        return createCriteria().add(eq("owner.id", ownerId)).list();
    }

    public List<BlogImpl> findBlogs(List<String> roles, boolean internal)
    {
        return findBlogs(roles,internal,null);
    }
    public List<BlogImpl> findBlogs(List<String> roles, boolean internal, 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 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);
        }
        if (!internal)
            criteria.add(eq("internal", false));
        if (co != null)
            criteria.add(co);
        criteria.add(eq("status", true))
                .addOrder(Order.desc("title"));
        if(type != null)
            criteria.add(eq("type",type));
        else
            criteria.add(isNull("type"));
        return criteria.list();
    }

    public List<BlogImpl> findByName(1.5.0/docs/api/java/lang/String.html">String name)
    {
        return createCriteria().add(eq("name", name)).list();
    }

    public List<Blog> loadInvalidBlogs()
    {
        return createCriteria()
                .add(isNull("type"))
                .add(eq("status",false))
                .addOrder(Order.asc("id")).list();
    }

    private Criteria createRestrictionsCriteria(List<String> roles, boolean internal)
    {
        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);
        }

        if (!internal)
            criteria.add(eq("internal", false));

        criteria.add(coRole)
                .add(eq("status", true))
                .addOrder(Order.desc("saveDate"));
        return criteria;
    }


    public int countBlogs(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType, List<String> roles, 5+0%2Fdocs%2Fapi+Object">Object o, boolean internal)
    {
        Criterion c = DaoUtils.createSearchQuery(query,searchType,"description","title");
        Criteria criteria = createRestrictionsCriteria(roles, internal);
        criteria.add(c);
        return criteria.list().size();
    }

    public List<Blog> searchBlogs(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxBlogs, int page, List<String> roles, boolean internal)
    {
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "description", "title");
        Criteria criteria = createRestrictionsCriteria(roles, internal);
        criteria.add(c)
                .setMaxResults(maxBlogs)
                .setFirstResult(page * maxBlogs);
        return criteria.list();
    }

}