package edu.internet2.middleware.grouper; import edu.internet2.middleware.subject.Subject; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Query; import net.sf.hibernate.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.cagrid.gridgrouper.model.MembershipRequestStatus; import java.util.ArrayList; import java.util.List; public class MembershipRequestFinder { private static Log log = LogFactory.getLog(MembershipRequestFinder.class); public static ArrayList<MembershipRequest> findRequestsByStatus(GrouperSession grouperSession, Group group, MembershipRequestStatus status) throws QueryException { ArrayList<MembershipRequest> requests = new ArrayList<MembershipRequest>(); Session hs = null; try { hs = GridGrouperHibernateHelper.getSession(); Query qry = null; if (MembershipRequestStatus.All.equals(status)) { qry = hs.createQuery("from MembershipRequest as mr where mr.group = :grp"); } else { qry = hs.createQuery("from MembershipRequest as mr where mr.group = :grp and mr.statusValue = :status"); qry.setString("status", status.toString()); } qry.setEntity("grp", group); List<?> list = qry.list(); for (Object object : list) { MembershipRequest membershipRequests = (MembershipRequest) object; membershipRequests.getGroup().setSession(grouperSession); requests.add(membershipRequests); } } catch (HibernateException e) { throw new QueryException("error finding requests: " + e.getMessage(), e); } finally { if (hs != null) { try { hs.close(); } catch (Exception e) { log.error(e.getMessage(), e); } } } return requests; } public static MembershipRequest findRequest(GrouperSession grouperSession, Group group, String requestor) throws QueryException { Session hs = null; try { hs = GridGrouperHibernateHelper.getSession(); Query qry = hs.createQuery("from MembershipRequest as mr where mr.group = :grp and requestor = :requestor");; qry.setString("requestor", requestor); qry.setEntity("grp", group); List<?> list = qry.list(); for (Object object : list) { MembershipRequest membershipRequests = (MembershipRequest) object; membershipRequests.getGroup().setSession(grouperSession); return membershipRequests; } } catch (HibernateException e) { throw new QueryException("error finding requesrt: " + e.getMessage(), e); } finally { if (hs != null) { try { hs.close(); } catch (Exception e) { log.error(e.getMessage(), e); } } } return null; } public static void removeRequest(Subject caller, Group group, String requestor) throws MemberNotFoundException, InsufficientPrivilegeException, MembershipRequestUpdateException, GrouperException { Session hs = null; try { hs = GridGrouperHibernateHelper.getSession(); Query qry = hs.createQuery("from MembershipRequest as mr where mr.group = :grp and requestor = :requestor");; qry.setString("requestor", requestor); qry.setEntity("grp", group); List<?> list = qry.list(); Member member = MemberFinder.findBySubject(caller); for (Object object : list) { MembershipRequest membershipRequests = (MembershipRequest) object; membershipRequests.getGroup().setSession(group.getSession()); membershipRequests.remove(member, "Member removed from the group.", "Member removed from the group."); } } catch (HibernateException e) { throw new MembershipRequestUpdateException("Unable to remove membershiprequest: " + e.getMessage(), e); } finally { if (hs != null) { try { hs.close(); } catch (Exception e) { log.error(e.getMessage(), e); } } } } }