package edu.ualberta.med.biobank.common.action.security; import org.hibernate.Criteria; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.Restrictions; import edu.ualberta.med.biobank.common.action.Action; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.permission.Permission; import edu.ualberta.med.biobank.common.permission.security.UserManagerPermission; import edu.ualberta.med.biobank.model.Group; public class GroupGetAction implements Action<GroupGetOutput> { private static final long serialVersionUID = 1L; private static final Permission PERMISSION = new UserManagerPermission(); private final GroupGetInput input; public GroupGetAction(GroupGetInput input) { this.input = input; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return PERMISSION.isAllowed(context); } @Override public GroupGetOutput run(ActionContext context) throws ActionException { Criteria c = context.getSession() .createCriteria(Group.class, "g") .createAlias("g.memberships", "m", Criteria.LEFT_JOIN) .createAlias("g.users", "u", Criteria.LEFT_JOIN) .createAlias("m.domain", "d", Criteria.LEFT_JOIN) .createAlias("d.centers", "c", Criteria.LEFT_JOIN) .createAlias("d.studies", "s", Criteria.LEFT_JOIN) .createAlias("m.roles", "r", Criteria.LEFT_JOIN) .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY) .add(Restrictions.idEq(input.getGroupId())); Group group = (Group) c.uniqueResult(); MembershipContext managerContext = new MembershipContextGetAction( new MembershipContextGetInput()).run(context).getContext(); return new GroupGetOutput(group, managerContext); } }