Subversion Repositories bacoAlunos

Rev

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

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

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import pt.estgp.estgweb.domain.*;

import java.util.List;

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

/**
 * Created by jorgemachado on 10/01/14.
 */

public class ProcessDaoImpl extends ProcessDao
{


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


    public List<ProcessImpl> getProcessesWithParticipation(User user)
    {
        Criteria c = createCriteria();
        c.createAlias("events","evt");
        c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        c.add(eq("evt.owner.id",user.getId()));
        c.addOrder(Order.asc("nowState")).addOrder(Order.asc("id"));
        return c.list();
    }

    public List<ProcessImpl> getProcessesOpened()
    {
        Criteria c = createCriteria();
        c.add(eq("nowState",ProcessImpl.ProcessState.OPEN.name()));
        c.addOrder(Order.asc("id"));
        return c.list();
    }

    public List<ProcessImpl> getProcessesClosed()
    {
        Criteria c = createCriteria();
        c.add(eq("nowState",ProcessImpl.ProcessState.CLOSED.name()));
        c.addOrder(Order.asc("id"));
        return c.list();
    }

    public List<ProcessImpl> getProcessesWaitingFor(User user)
    {
        Criteria c = createCriteria();
        c.createAlias("lastEvent", "l");

        Criterion acceptedByUser =
                and(
                    eq("l.nowState",ProcessEventImpl.ProcessEventState.ACCEPTED.name()),
                    eq("l.owner.id",user.getId())
                );

        Criterion startedToUser =
                and(
                        eq("l.nowState", ProcessEventImpl.ProcessEventState.NOT_ACCEPTED.name()),
                        eq("l.owner.id",user.getId())
                );

        Criterion destinatedToUserRoles = eq("l.nowState", ProcessEventImpl.ProcessEventState.NOT_ACCEPTED.name());
        Criterion rolesC = null;
        for(1.5.0/docs/api/java/lang/String.html">String role: user.getRolesList())
        {
            if(rolesC == null)
                rolesC = eq("l.destinationRole",role);
            else
                rolesC = or(rolesC,eq("l.destinationRole",role));
        }
        destinatedToUserRoles = and(destinatedToUserRoles,rolesC);
        c.add(or(acceptedByUser,or(destinatedToUserRoles,startedToUser)));
        return c.list();
    }

    public List<ProcessImpl> getProcessesWaitingFor()
    {
        Criteria c = createCriteria();
        return  c.add(eq("nowState", ProcessImpl.ProcessState.TRANSITION.name()))
                .list();
    }


    public List<ProcessImpl> getProcessesStardedByUser(User user)
    {
        Criteria c = createCriteria().add(eq("owner.id",user.getId()));
        return c.list();
    }
    public List<ProcessImpl> getProcessesStardedByUserNotClosed(User user)
    {
        return createCriteria().add(eq("owner.id", user.getId())).
                add(not(eq("nowState", ProcessImpl.ProcessState.CLOSED.name())))
                .list();
    }
    public List<ProcessImpl> getProcessesStardedByUserClosed(User user)
    {
        return createCriteria().add(eq("owner.id", user.getId())).
                add(eq("nowState", ProcessImpl.ProcessState.CLOSED.name()))
                .list();
    }

    public List<ProcessImpl> findAllImpls()
    {
        return createCriteria().list();
    }

}