private static void limitToUserAssignedSteps(Conjunction con, Boolean stepOpenOnly, Boolean userAssignedStepsOnly) {
/* show only open Steps or those in use by current user */
Session session = Helper.getHibernateSession();
/* identify current user */
LoginForm login = (LoginForm) Helper.getManagedBeanValue("#{LoginForm}");
if (login == null || login.getMyBenutzer() == null) {
return;
}
/* init id-list, preset with item 0 */
List<Integer> idList = new ArrayList<Integer>();
idList.add(Integer.valueOf(0));
/*
* -------------------------------- hits by user groups --------------------------------
*/
Criteria critGroups = session.createCriteria(Schritt.class);
if (stepOpenOnly) {
critGroups.add(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(1)));
} else if (userAssignedStepsOnly) {
critGroups.add(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(2)));
critGroups.add(Restrictions.eq("bearbeitungsbenutzer.id", login.getMyBenutzer().getId()));
} else {
critGroups.add(Restrictions.or(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(1)),
Restrictions.like("bearbeitungsstatus", Integer.valueOf(2))));
}
/* only processes which are not templates */
Criteria temp = critGroups.createCriteria("prozess", "proz");
critGroups.add(Restrictions.eq("proz.istTemplate", Boolean.valueOf(false)));
/* only assigned projects */
temp.createCriteria("projekt", "proj").createCriteria("benutzer", "projektbenutzer");
critGroups.add(Restrictions.eq("projektbenutzer.id", login.getMyBenutzer().getId()));
/*
* only steps assigned to the user groups the current user is member of
*/
critGroups.createCriteria("benutzergruppen", "gruppen").createCriteria("benutzer", "gruppennutzer");
critGroups.add(Restrictions.eq("gruppennutzer.id", login.getMyBenutzer().getId()));
/* collecting the hits */
critGroups.setProjection(Projections.id());
for (Object o : critGroups.setFirstResult(0).setMaxResults(Integer.MAX_VALUE).list()) {
idList.add((Integer) o);
}
/*
* -------------------------------- Users only --------------------------------
*/
Criteria critUser = session.createCriteria(Schritt.class);
if (stepOpenOnly) {
critUser.add(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(1)));
} else if (userAssignedStepsOnly) {
critUser.add(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(2)));
critUser.add(Restrictions.eq("bearbeitungsbenutzer.id", login.getMyBenutzer().getId()));
} else {
critUser.add(Restrictions.or(Restrictions.eq("bearbeitungsstatus", Integer.valueOf(1)),
Restrictions.like("bearbeitungsstatus", Integer.valueOf(2))));
}
/* exclude templates */
Criteria temp2 = critUser.createCriteria("prozess", "proz");
critUser.add(Restrictions.eq("proz.istTemplate", Boolean.valueOf(false)));
/* check project assignment */
temp2.createCriteria("projekt", "proj").createCriteria("benutzer", "projektbenutzer");
critUser.add(Restrictions.eq("projektbenutzer.id", login.getMyBenutzer().getId()));
/* only steps where the user is assigned to */
critUser.createCriteria("benutzer", "nutzer");
critUser.add(Restrictions.eq("nutzer.id", login.getMyBenutzer().getId()));
/* collecting the hits */
critUser.setProjection(Projections.id());
for (Object o : critUser.setFirstResult(0).setMaxResults(Integer.MAX_VALUE).list()) {