public List<Member> getGroupMembers( PerunSession sess, Group group, List<Status> statuses, boolean excludeStatusInsteadOfIncludeStatus) throws InternalErrorException { try { MapSqlParameterSource parameters = new MapSqlParameterSource(); List<Integer> statusesCodes = new ArrayList<Integer>(); for (Status status : statuses) { statusesCodes.add(status.getCode()); } parameters.addValue("statuses", statusesCodes); parameters.addValue("group_id", group.getId()); if (excludeStatusInsteadOfIncludeStatus) { // Exclude members with one of the status return this.namedParameterJdbcTemplate.query( "select " + MembersManagerImpl.memberMappingSelectQuery + ", groups_members.membership_type as membership_type from groups_members join members on members.id=groups_members.member_id " + " where groups_members.group_id=:group_id and members.status" + Compatibility.castToInteger() + " not in (:statuses)", parameters, MembersManagerImpl.MEMBER_MAPPER); } else { // Include members with one of the status return this.namedParameterJdbcTemplate.query( "select " + MembersManagerImpl.memberMappingSelectQuery + ", groups_members.membership_type as membership_type from groups_members join members on members.id=groups_members.member_id " + " where groups_members.group_id=:group_id and members.status" + Compatibility.castToInteger() + " in (:statuses)", parameters, MembersManagerImpl.MEMBER_MAPPER); } } catch (EmptyResultDataAccessException e) { return new ArrayList<Member>(); } catch (RuntimeException e) { throw new InternalErrorException(e); } }