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]]
|