Version Differences for All Editors for Projects in System

Line 1:
    + This report is based off of folders. It reports on either all the projects in the system or all the projects recursively located in a folder.. This report has to be used in conjunction with a report template such as the [[HTML Template]].  
       
    + ----  
       
    + ''Meta-Data Script:''  
       
    + <pre>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 Projects");  
    + folderParam.setRequired(true);  
    + folderParam.setDefaultValue("All");  
       
    + rmd.addParameter(folderParam);  
       
    + // Configure columns  
    + rmd.addColumn("Project");  
    + rmd.addColumn("Username");  
    + rmd.addColumn("First");  
    + rmd.addColumn("Last");  
    + rmd.addColumn("Realm");  
    + rmd.addColumn("Relevant Roles");  
       
    + // Lastly, return the meta data  
    + return rmd; </pre>  
       
    + ----  
       
    + ''Report 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.userprofile.*;  
    + import org.apache.commons.lang.StringUtils;  
       
    + ReportRow createReportRow(Project project,  
    + User user,  
    + UserProfile profile,  
    + String relevantRoles) {  
    + ReportRow result = null;  
       
    + result = new ReportRow(output, "User");  
    + result.setColumnValue("Project", project.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 retrieveProjectsForFolder(Folder folder) {  
    + Set result = new HashSet();  
    +  
    + Folder[] childFolders = folder.getChildren();  
    + for (int i = 0; i < childFolders.length; i++) {  
    + Folder childFolder = childFolders[i];  
    + result.addAll(retrieveProjectsForFolder(childFolder));  
    + }  
       
    + Project[] folderProjects = folder.getProjects();  
    + result.addAll(Arrays.asList(folderProjects));  
       
    + return result;  
    + }  
       
    + List retrieveRelevantRoles(Project project) {  
    + List result = new ArrayList();  
       
    + Resource projectResource = ResourceFactory.getInstance().restoreForPersistent(project);  
    + Permission[] permissions = PermissionFactory.getInstance().restoreAllForResource(projectResource);  
       
    + for (int i = 0; i < permissions.length; i++) {  
    + Permission perm = permissions[i];  
    + if (perm.getAction().equals("write")) {  
    + result.add(perm.getRole());  
    + }  
    + }  
       
    + 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 populateAndSortProjectsArray(Folder folder) {  
    + Set projectSet = retrieveProjectsForFolder(folder);  
    + projects = new Project[projectSet.size()];  
    + projectSet.toArray(projects);  
    + Arrays.sort(projects, new Comparator() {  
    + public int compare(Object obj1, Object obj2) {  
    + Project project1 = (Project) obj1;  
    + Project project2 = (Project) obj2;  
       
    + return project1.getName().compareTo(project2.getName());  
    + }  
    + }  
    + );  
    + }  
       
    + Project[] projects = null;  
    + if (folderName.equals("All")) {  
    + projects = ProjectFactory.getInstance().restoreAll();  
    + }  
    + else {  
    + Folder folder = resolveFolderFromName();  
    +  
    + if (folder != null) {  
    + populateAndSortProjectsArray(folder);  
    + }  
    + }  
       
    + ReportOutput output = new ReportOutput(metaData);  
       
    + for (int i = 0; projects != null && i < projects.length; i++) {  
    + Project project = projects[i];  
       
    + // This list is incomplete, only includes roles runner has  
    + List relevantRoles = retrieveRelevantRoles(project);  
       
    + User[] users = Authority.getInstance().getUsersWithPermissionToPersistent(project, "write");  
    + for (int j = 0; j < users.length; j++) {  
    + User user = users[j];  
    + UserProfile profile = UserProfileFactory.getInstance().restoreForUser(user);  
    + String relevantRoleNames = "";  
       
    + for (int k = 0; k < relevantRoles.size(); k++) {  
    + Role role = (Role) relevantRoles.get(k);  
    + if (user.hasRole(role)) {  
    + if (StringUtils.isNotEmpty(relevantRoleNames)) {  
    + relevantRoleNames += ", ";  
    + }  
    + relevantRoleNames += role.getName();  
    + }  
    + }  
       
    + ReportRow row = null;  
    + if (StringUtils.isNotEmpty(relevantRoleNames)) {  
    + row = createReportRow(project, user, profile, relevantRoleNames);  
    + }  
    + else {  
    + row = createReportRow(project, user, profile, "Protected");  
    + }  
    + output.addRow(row);  
    + }  
    + }  
       
    + return output; </pre>  
       
    + ----  
       
    + '''Related Content'''  
       
    + [[AnthillPro Template Reports]]<br/>  
    + [[Report Templates]]