Subversion Repositories bacoAlunos

Rev

Rev 1524 | Rev 1616 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

import jomm.dao.DaoException;
import jomm.utils.DesUtils;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoUtils;
import pt.estgp.estgweb.services.common.SearchTypeEnum;
import pt.estgp.estgweb.utils.RoleManager;

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

import static org.hibernate.criterion.Restrictions.*;

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

public class UserDaoImpl extends UserDao
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(UserDaoImpl.class);

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

    /**
     * Used by the base DAO classes but here for your modification Load object
     * matching the given key and return it.
     *
     * @param username to load
     * @return a user
     */

    public final User loadByUsername(1.5.0/docs/api/java/lang/String.html">String username)
    {
        try
        {
            5+0%2Fdocs%2Fapi+List">List list =
                    createCriteria()
                            .add(eq("username", username))
                            .setMaxResults(1)
                            .list();

            if (list.size() == 0)
                return null;
            return (User) list.get(0);
        }
        catch (HibernateException e)
        {
            throw new DaoException(e);
        }
    }

    /**
     * Used by the base DAO classes but here for your modification Load object
     * matching the given key and return it.
     *
     * @param email to load
     * @return a user
     */

    public final User loadByEmail(1.5.0/docs/api/java/lang/String.html">String email)
    {
        try
        {
            return (User) createCriteria()
                    .add(eq("email", email))
                    .uniqueResult();
        }
        catch (HibernateException e)
        {
            throw new DaoException(e);
        }
    }

    /**
     * Used by the base DAO classes but here for your modification Load object
     * matching the given key and return it.
     *
     * @param ID to load
     * @return a user
     */

    public final User loadByID(1.5.0/docs/api/java/lang/String.html">String ID)
    {
        try
        {
            return (User) createCriteria()
                    .add(eq("id", ID))
                    .uniqueResult();
        }
        catch (HibernateException e)
        {
            throw new DaoException(e);
        }
    }

    /**
     * Used by the base DAO classes but here for your modification Load object
     * matching the given key and return it.
     *
     * @param username to load
     * @param password to load
     * @return a user
     */

    public final User loadByUsernameAndPassword(1.5.0/docs/api/java/lang/String.html">String username, 1.5.0/docs/api/java/lang/String.html">String password)
    {
        try
        {
            return (User) createCriteria()
                    .add(eq("username", username))
                    .add(or(
                            eq("password", jomm.utils.BytesUtils.getDigestMD5Hex(password)),
                            eq("pop3password",DesUtils.getInstance().encrypt(password))
                           )
                        )
                    .uniqueResult();
        }
        catch (HibernateException e)
        {
            throw new DaoException(e);
        }
    }

    public List<User> loadRoleUsers(1.5.0/docs/api/java/lang/String.html">String role, int maxResults, int firstResult)
    {
        Criteria c = createCriteria()
                .add(like("roles","%" + role + RoleManager.ROLE_SEPARATOR +"%"))
                .addOrder(Order.asc("name"))
                .setMaxResults(maxResults)
                .setFirstResult(firstResult);
        return c.list();
    }

    public List<User> loadRoleUsers(1.5.0/docs/api/java/lang/String.html">String role)
    {
        if(role == null || role.trim().length() == 0)
            return new ArrayList<User>();
        List<User> users = createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name")).list();
        Iterator<User> iter = users.iterator();
        while(iter.hasNext())
        {
            User u = iter.next();
            if(!u.hasRole(role))
                iter.remove();
        }
        return users;
    }

    public List<Teacher> loadRoleTeachers(1.5.0/docs/api/java/lang/String.html">String role)
    {
        if(role == null || role.trim().length() == 0)
            return new ArrayList<Teacher>();
        List<Teacher> users = createCriteria(Teacher.class).add(like("roles", "%" + role + ",%")).addOrder(Order.asc("name")).list();
        return users;
    }



    public List<User> loadRoleAreaUsers(1.5.0/docs/api/java/lang/String.html">String role, 1.5.0/docs/api/java/lang/String.html">String area)
    {
        Criteria c = createCriteria().add(like("roles", "%" + role + "%")).addOrder(Order.asc("name"));
        if(area != null && area.trim().length() > 0)
           c.add(eq("mainArea",area));
        List<User> users = c.list();
        Iterator<User> iter = users.iterator();
        while(iter.hasNext())
        {
            User u = iter.next();
            if(!u.hasRole(role))
                iter.remove();
        }
        return users;
    }

    public List<User> findUsers(1.5.0/docs/api/java/lang/String.html">String textToSearch)
    {
        return findUsers(textToSearch, null);
    }

    public List<User> findUsersFromClassUserAndTeacherOnly()
    {
        return createCriteria().add(or(eq("class","UserImpl"),eq("class","TeacherImpl"))).list();
    }

    public List<User> findUsers(1.5.0/docs/api/java/lang/String.html">String textToSearch, 1.5.0/docs/api/java/lang/String.html">String typeToSearch)
    {
        Criteria criteria;
        if (typeToSearch != null && typeToSearch.trim().length() != 0)
            try
            {
                criteria = createCriteria(1.5.0/docs/api/java/lang/Class.html">Class.forName(typeToSearch));
            }
            catch (1.5.0/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException e)
            {
                logger.error(e, e);
                return null;
            }
        else
            criteria = createCriteria();
        Criterion textSearch = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.AllWords, "name", "username");
        Criterion text2Search = DaoUtils.createSearchQuery(textToSearch, SearchTypeEnum.AllWords, "email");
        Criterion fields = or(textSearch, text2Search);
        try{
            1.5.0/docs/api/java/lang/Integer.html">Integer siges = 1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(textToSearch);
            fields = or(fields,eq("sigesCode",siges));
        }catch(1.5.0/docs/api/java/lang/Exception.html">Exception e){}


        return criteria.add(fields)
                .addOrder(Order.desc("name"))
                .list();
    }


    public 1.5.0/docs/api/java/io/Serializable.html">Serializable save(User obj)
    {
        try
        {
            obj.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
            return super.save(obj);
        }
        catch (HibernateException e)
        {
            throw new DaoException(e);
        }

    }

    public int countUsers(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchType)
    {
        Criterion c = DaoUtils.createSearchQuery(query, searchType, "name", "username");
        return createCriteria()
                .add(c)
                .list().size();
    }


    public List<User> search(1.5.0/docs/api/java/lang/String.html">String query, SearchTypeEnum searchTypeEnum, int maxResults, int page)
    {
        Criterion c = DaoUtils.createSearchQuery(query, searchTypeEnum, "name", "username");
        Criteria criteria = createCriteria();
        criteria.add(c)
                .addOrder(Order.asc("name"))
                .setMaxResults(maxResults)
                .setFirstResult(page * maxResults);
        return criteria.list();
    }

    public List<User> findByEmail(1.5.0/docs/api/java/lang/String.html">String email)
    {
        return createCriteria().add(or(or(or(eq("email",email),eq("outEmail",email)),eq("gmail",email)),eq("msn",email))).list();
    }

    public User loadByUsernameOrSigesCode(int sigesCode)
    {
        return (User) createCriteria().add(or(eq("sigesCode",sigesCode),eq("username","a" + sigesCode))).uniqueResult();
    }

    public User loadBySigesCode(int sigesCode)
    {
        return (User) createCriteria().add(eq("sigesCode", sigesCode)).uniqueResult();
    }

    public List<User> loadBySigesCodeUsernameEmailsBiSiges(1.5.0/docs/api/java/lang/String.html">String identifier)
    {
        1.5.0/docs/api/javax/management/Query.html">Query q = getCurrentSession().createQuery(
                "select u from u in class " + User.class.getName() + " " +
                "where " +
                "u.username = :identifier or " +
                "u.bi = :identifier or " +
                "u.email = :identifier or " +
                "u.outEmail = :identifier or " +
                "u.preferrefEmail = :identifier or " +
                "u.sigesCode = :identifier");
        q.setString("identifier",identifier);

        return q.list();
    }

    public List<User> loadByCertificate(1.5.0/docs/api/java/lang/String.html">String certificate)
    {
        return  createCriteria()
                .add(eq("authenticationCertificate", certificate))
                .add(gt("authenticationCertificateExpire",new 5+0%2Fdocs%2Fapi+Date">Date()))
                .list();
    }

   
 // Duarte Santos
    public List<User> loadRolesUsers(List<String> roles)
    {
        if(roles == null || roles.size() == 0)
            return new ArrayList<User>();
        Criteria criteria = createCriteria();
        Criterion co = null;
        for (1.5.0/docs/api/java/lang/String.html">String role : roles)
        {
            if(role.trim().length() == 0)
                continue;
            Criterion cor = like("roles", "%" + role + "%");
            if (co == null)
                co = cor;
            else
                co = or(co, cor);
        }
        criteria.add(co);
        List<User> users = criteria.list();
        Iterator<User> iter = users.iterator();
        while(iter.hasNext())
        {
            boolean hasIt = false;
            User u = iter.next();
            for(1.5.0/docs/api/java/lang/String.html">String role: roles)
            {
                if(u.hasRole(role))
                {
                    hasIt = true;
                    break;
                }
            }
            if(!hasIt)
                iter.remove();
        }
        return users;
    }
}