Version Differences for Permissions Per Agent

Line 1:
    + This report will show who has access to which agents in the system, meaning read permissions. This report has to be used in conjunction with a report template such as the [[Bar Chart Template]].  
       
    + ----  
       
    + ''Meta-Data Script:''  
       
    + <pre>//Meta Data Script  
    + import com.urbancode.anthill3.domain.reporting.*;  
       
    + ReportMetaData rmd = new ReportMetaData();  
       
    + TextParamMetaData folderParam = new TextParamMetaData();  
       
    + folderParam.setName("folderName");  
    + folderParam.setLabel("Folder");  
    + folderParam.setDescription("The Team/Group Folder name or All for All Envs");  
    + folderParam.setRequired(true);  
    + folderParam.setDefaultValue("All");  
       
    + rmd.addParameter(folderParam);  
       
    + // Configure columns  
    + rmd.addColumn("AgentName");  
    + rmd.addColumn("Environment");  
    + rmd.addColumn("Username");  
    + rmd.addColumn("First");  
    + rmd.addColumn("Last");  
    + rmd.addColumn("Realm");  
    + rmd.addColumn("Relevant Roles");  
       
    + // Lastly, return the meta data  
    + return rmd;  
    + </pre>  
       
    + ----  
       
    + ''Context Script:''  
       
    + <pre>import com.urbancode.anthill3.domain.agent.*;  
    + import com.urbancode.anthill3.domain.folder.*;  
    + import com.urbancode.anthill3.domain.project.*;  
    + import com.urbancode.anthill3.domain.reporting.*;  
    + import com.urbancode.anthill3.domain.security.*;  
    + import com.urbancode.anthill3.domain.servergroup.*;  
    + import com.urbancode.anthill3.domain.userprofile.*;  
    + import com.urbancode.devilfish.client.ServiceEndpoint;  
    + import org.apache.commons.lang.StringUtils;  
       
    + ReportRow createReportRow(Agent agent,  
    + ServerGroup environment,  
    + User user,  
    + UserProfile profile,  
    + String relevantRoles) {  
    + ReportRow result = null;  
       
    + result = new ReportRow(output, "User");  
    + result.setColumnValue("AgentName", agent.getName());  
    + result.setColumnValue("Environment", environment.getName());  
    + result.setColumnValue("Username", user.getName());  
    + if (profile != null) {  
    + if (StringUtils.isNotEmpty(profile.getFirstName())) {  
    + result.setColumnValue("First", profile.getFirstName());  
    + }  
    + if (StringUtils.isNotEmpty(profile.getLastName())) {  
    + result.setColumnValue("Last", profile.getLastName());  
    + }  
    + }  
    +  
    + result.setColumnValue("Realm", user.getAuthenticationRealm().getName());  
    + result.setColumnValue("Relevant Roles", relevantRoles);  
       
    + return result;  
    + }  
       
    + Set retrieveEnvironmentsForFolder(Folder folder) {  
    + Set result = new HashSet();  
    +  
    + Folder[] childFolders = folder.getChildren();  
    + for (int i = 0; i < childFolders.length; i++) {  
    + Folder childFolder = childFolders[i];  
    + result.addAll(retrieveEnvironmentsForFolder(childFolder));  
    + }  
       
    + Project[] folderProjects = folder.getProjects();  
    + for (int i = 0; i < folderProjects.length; i++) {  
    + Project project = folderProjects[i];  
    + ServerGroup[] serverGroups = project.getEnvironmentGroup().getServerGroupArray();  
    + result.addAll(Arrays.asList(serverGroups));  
    + }  
       
    + return result;  
    + }  
       
    + List retrieveRelevantRoles(ServerGroup environment) {  
    + List result = new ArrayList();  
       
    + Resource envResource = ResourceFactory.getInstance().restoreForPersistent(environment);  
    + Permission[] permissions = PermissionFactory.getInstance().restoreAllForResource(envResource);  
       
    + for (int i = 0; i < permissions.length; i++) {  
    + Permission perm = permissions[i];  
    + if (perm.getAction().equals("read")) {  
    + result.add(perm.getRole());  
    + }  
    + }  
       
    + return result;  
    + }  
       
    + Agent retrieveAgentForEndpoint(ServiceEndpoint endpoint) {  
    + Agent result = null;  
       
    + if (endpointsToAgents.containsKey(endpoint)) {  
    + result = (Agent) endpointsToAgents.get(endpoint);  
    + }  
    + else {  
    + result = AgentFactory.getInstance().restoreByEndpoint(endpoint);  
    + endpointsToAgents.put(endpoint, result);  
    + }  
       
    + return result;  
    + }  
       
    + Folder resolveFolderFromName() {  
    + Folder result = null;  
       
    + String pathStr = folderName.replaceAll("\\\\", "/");  
       
    + String[] path = pathStr.split("/");  
       
    + result = FolderFactory.getInstance().restoreForName(path[0]);  
       
    + for (int i = 1; result != null && i < path.length; i++) {  
    + Folder[] childFolders = result.getChildren();  
    + boolean found = false;  
    + for (int j = 0; !found && j < childFolders.length; j++) {  
    + Folder childFolder = childFolders[j];  
    + if (childFolder.getName().equals(path[i])) {  
    + result = childFolder;  
    + found = true;  
    + }  
    + }  
    + if (!found) {  
    + result = null;  
    + }  
    + }  
       
    + return result;  
    + }  
       
    + void populateAndSortEnvironmentsArray(Folder folder) {  
    + Set envSet = retrieveEnvironmentsForFolder(folder);  
    + environments = new ServerGroup[envSet.size()];  
    + envSet.toArray(environments);  
    + Arrays.sort(environments, new Comparator() {  
    + public int compare(Object obj1, Object obj2) {  
    + ServerGroup env1 = (ServerGroup) obj1;  
    + ServerGroup env2 = (ServerGroup) obj2;  
       
    + return env1.getName().compareTo(env2.getName());  
    + }  
    + }  
    + );  
    + }  
       
    + ServerGroup[] environments = null;  
    + if (folderName.equals("All")) {  
    + environments = ServerGroupFactory.getInstance().restoreAll();  
    + }  
    + else {  
    + Folder folder = resolveFolderFromName();  
    +  
    + if (folder != null) {  
    + populateAndSortEnvironmentsArray(folder);  
    + }  
    + }  
       
    + Map endpointsToAgents = new HashMap();  
    + ReportOutput output = new ReportOutput(metaData);  
       
    + for (int i = 0; environments != null && i < environments.length; i++) {  
    + ServerGroup environment = environments[i];  
    + List relevantRoles = retrieveRelevantRoles(environment);  
       
    + User[] users = Authority.getInstance().getUsersWithPermissionToPersistent(environment, "read");  
    + ServiceEndpoint[] endpoints = environment.getServerArray();  
    + for (int j = 0; j < endpoints.length; j++) {  
    + Agent agent = retrieveAgentForEndpoint(endpoints[j]);  
       
    + for (int k = 0; k < users.length; k++) {  
    + User user = users[k];  
    + UserProfile profile = UserProfileFactory.getInstance().restoreForUser(user);  
    + String relevantRolesStr = "";  
       
    + for (int l = 0; l < relevantRoles.size(); l++) {  
    + Role role = (Role) relevantRoles.get(l);  
    + if (user.hasRole(role)) {  
    + if (StringUtils.isNotEmpty(relevantRolesStr)) {  
    + relevantRolesStr += ", ";  
    + }  
    + relevantRolesStr += role.getName();  
    + }  
    + }  
    +  
    + ReportRow row = null;  
    + if (StringUtils.isNotEmpty(relevantRolesStr)) {  
    + row = createReportRow(agent, environment, user, profile, relevantRolesStr);  
    + }  
    + else {  
    + row = createReportRow(agent, environment, user, profile, "Protected");  
    + }  
    + output.addRow(row);  
    + }  
    + }  
    + }  
       
    + return output;  
       
    + </pre>  
       
    + ----  
       
    + '''Related Content'''  
       
    + [[AnthillPro Template Reports]]<br/>  
    + [[Report Templates]]