Skip to content

Instantly share code, notes, and snippets.

@ElieMalesys
Created April 15, 2014 08:13
Show Gist options
  • Select an option

  • Save ElieMalesys/10712870 to your computer and use it in GitHub Desktop.

Select an option

Save ElieMalesys/10712870 to your computer and use it in GitHub Desktop.
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.security.roles.ProjectRoleManager
import com.atlassian.query.operand.Operands
import com.atlassian.query.operator.Operator
import com.atlassian.jira.security.roles.RoleActorFactory
import com.atlassian.jira.security.roles.RoleActor
import com.atlassian.jira.security.roles.ProjectRole
import com.atlassian.jira.security.roles.ProjectRoleActors
import com.atlassian.jira.security.roles.actor.UserRoleActorFactory
List<Project> giveAdminRole(List<Project> projects,User user){
ComponentManager componentManager = ComponentManager.getInstance();
ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager;
RoleActorFactory roleActorFactory = ComponentManager.getComponentInstanceOfType(RoleActorFactory.class) as RoleActorFactory;
ProjectRole adminsRole = projectRoleManager.getProjectRole("Administrator");
List<Project> updatedProjects = new ArrayList<Project>();
for (project in projects){
ProjectRoleActors admins = projectRoleManager.getProjectRoleActors(adminsRole, project);
RoleActor userActor = roleActorFactory.createRoleActor(null, adminsRole.getId(), project.getId(), UserRoleActorFactory.TYPE, user.getName());
if (!admins.contains(user)){
updatedProjects.add(project);
admins = admins.addRoleActor(userActor);
projectRoleManager.updateProjectRoleActors(admins);
}
}
return updatedProjects;
}
def removeAdminRole(List<Project> projects,User user){
ComponentManager componentManager = ComponentManager.getInstance();
ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager;
RoleActorFactory roleActorFactory = ComponentManager.getComponentInstanceOfType(RoleActorFactory.class) as RoleActorFactory;
ProjectRole adminsRole = projectRoleManager.getProjectRole("Administrator");
for (project in projects){
ProjectRoleActors admins = projectRoleManager.getProjectRoleActors(adminsRole, project);
RoleActor userActor = roleActorFactory.createRoleActor(null, adminsRole.getId(), project.getId(), UserRoleActorFactory.TYPE, user.getName());
admins = admins.removeRoleActor(userActor);
projectRoleManager.updateProjectRoleActors(admins);
}
}
//initialization
def ghPlugin = ComponentAccessor.getPluginAccessor().getEnabledPlugin("com.pyxis.greenhopper.jira");
def descriptor = ghPlugin.getModuleDescriptor("greenhopper-launcher");
def applicationContext = descriptor.getModule().greenHopperCacheManager.applicationContext;
def bridgeServiceLocator = applicationContext.getBean("bridgeServiceLocator");
def greenhopper = bridgeServiceLocator.getInstance().getGreenHopper();
ComponentManager componentManager = ComponentManager.getInstance();
ProjectManager projectManager = componentManager.getProjectManager();
ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager;
def projectRoles = projectRoleManager.getProjectRoles();
SearchService searchService = componentManager.getSearchService();
User currentUser = componentManager.getJiraAuthenticationContext().getLoggedInUser();
Set<User> roleUsers = new HashSet<User>();
Set<User> projectActiveUsers = new HashSet<User>();
Set<User> totalActiveUsers = new HashSet<User>();
Set<User> agileActiveUsers = new HashSet<User>();
def agileProjectsList = projectManager.convertToProjectObjects(greenhopper.getGHConfiguration().getGrantedProjects());
def projectsList = projectManager.getProjectObjects()
Writer file = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("ActiveActors.xml"), "UTF-8"));
String projectsDisplay = '';
String rolesDisplay;
String usersDisplay;
int roleActiveUsers;
int activeProjects = 0;
int agileActiveProjects = 0;
//Processing
List<Project> updatedProjects = giveAdminRole(projectsList,currentUser);
for (project in projectsList){
def projectQuery = JqlQueryBuilder.newBuilder().where().project(project.getId()).and().updatedAfter("-90d").buildQuery();
if (searchService.searchCount(currentUser, projectQuery) != 0){
rolesDisplay = '';
projectActiveUsers.clear();
for (projectRole in projectRoles) {
if ((projectRole.getName() != "Viewer")&&(projectRole.getName() != "Eole Notification")){
roleUsers = projectRoleManager.getProjectRoleActors(projectRole, project).getUsers();
if (roleUsers.size() != 0){
usersDisplay = '';
roleActiveUsers = 0;
for (user in roleUsers){
def userQuery = JqlQueryBuilder.newBuilder().where().project(project.getId()).and().updatedAfter("-90d").and().addCondition("Participants",Operator.EQUALS,Operands.valueOf(user.getName())).buildQuery();
if (searchService.searchCount(currentUser, userQuery) != 0){
projectActiveUsers.add(user);
usersDisplay += '\t\t\t <user>' + user.getEmailAddress() + '</user>\n';
roleActiveUsers++;
}
}
if (roleActiveUsers != 0){
rolesDisplay += '\t\t <role name=\"' + projectRole.getName() + '\" activeUsers=\"'+ roleActiveUsers + '\">\n';
rolesDisplay += usersDisplay;
rolesDisplay += '\t\t </role>\n';
}
}
}
}
if (agileProjectsList.contains(project)){
projectsDisplay += '\t<project name=\"' + project.getName().replace("&","&amp;") + '\" key=\"' + project.getKey() + '\" lead=\"' + project.getLead().getEmailAddress() + '\" agileEnable=\"Yes\" activeUsers=\"' + projectActiveUsers.size() + '\">\n'
agileActiveUsers.addAll(projectActiveUsers);
agileActiveProjects++;
}else{
projectsDisplay += '\t<project name=\"' + project.getName().replace("&","&amp;") + '\" key=\"' + project.getKey() + '\" lead=\"' + project.getLead().getEmailAddress() + '\" agileEnable=\"No\" activeUsers=\"' + projectActiveUsers.size() + '\">\n'
}
projectsDisplay += rolesDisplay;
projectsDisplay += '\t</project>\n';
totalActiveUsers.addAll(projectActiveUsers);
activeProjects++;
}
}
try{
file.write('<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n');
file.write('<prjList total=\"' + projectsList.size() + '\" agile=\"' + agileProjectsList.size() + '\" activeProjects=\"' + activeProjects + '\" agileActiveProjects=\"' + agileActiveProjects + '\" totalActiveUsers=\"' + totalActiveUsers.size() + '\" agileActiveUsers=\"' + agileActiveUsers.size() + '\">\n');
file.write(projectsDisplay);
file.write('</prjList>');
} finally {
file.close();
}
removeAdminRole(updatedProjects,currentUser);
return 'file ActiveActors.xml generated';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment