public void writeReport(OutputStream os) throws ReportException { UserManager userManager = securitySystem.getUserManager(); List allUsers = userManager.getUsers(); List allRoles; Map assignmentsMap; try { allRoles = rbacManager.getAllRoles(); Collections.sort(allRoles, new RoleSorter()); List allAssignments = rbacManager.getAllUserAssignments(); assignmentsMap = new HashMap(); Iterator it = allAssignments.iterator(); while (it.hasNext()) { UserAssignment assignment = (UserAssignment) it.next(); assignmentsMap.put(assignment.getPrincipal(), assignment.getRoleNames()); } } catch (RbacManagerException e) { throw new ReportException("Unable to obtain list of all roles.", e); } Collections.sort(allUsers, new UserComparator("username", true)); PrintWriter out = new PrintWriter(os); writeCsvHeader(out, allRoles); Iterator itUsers = allUsers.iterator(); while (itUsers.hasNext()) { User user = (User) itUsers.next(); writeCsvRow(out, user, assignmentsMap, allRoles); } out.flush(); }