Skip to content

Instantly share code, notes, and snippets.

@ElieMalesys
Last active August 29, 2015 13:58
Show Gist options
  • Select an option

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

Select an option

Save ElieMalesys/10126324 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("AgileActors.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 AgileActors.xml generated';
@NupurSarkar
Copy link

I am facing problem regarding greenHopperCacheManager and applicationContext in the variation of this code in java. Can someone please share the corresponding code snippet in java?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment