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();
}
}