Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.onresolve.jira.groovy.jql
- import com.atlassian.jira.issue.Issue
- import com.atlassian.jira.util.MessageSetImpl
- import com.atlassian.query.operand.FunctionOperand
- import com.atlassian.jira.util.MessageSet
- import com.atlassian.query.clause.TerminalClause
- import com.atlassian.jira.jql.query.QueryCreationContext
- import com.onresolve.scriptrunner.runner.customisers.WithPlugin
- import org.apache.lucene.index.Term
- import org.apache.lucene.search.BooleanClause
- import org.apache.lucene.search.BooleanQuery
- import org.apache.lucene.search.Query
- import org.apache.lucene.search.TermQuery
- import com.atlassian.jira.component.ComponentAccessor
- import com.atlassian.jira.user.ApplicationUser;
- import com.atlassian.jira.security.JiraAuthenticationContext;
- import com.atlassian.jira.security.roles.*
- import com.tempoplugin.timetracking.team.TeamService
- import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
- @WithPlugin("is.origo.jira.tempo-plugin")
- class UserInRoleTempo extends AbstractScriptedJqlFunction implements JqlQueryFunction {
- TeamService teamService = ScriptRunnerImpl.getPluginComponent(TeamService)
- @Override
- List<Map> getArguments() {
- [
- ["description": "Subquery"],
- ["field": "assignee or reporter"],
- ["role": "Role X"]
- ]
- }
- @Override
- String getFunctionName() {
- "UserInRoleTempo"
- }
- MessageSet validate(ApplicationUser user, FunctionOperand operand, TerminalClause terminalClause) {
- def messageSet = new MessageSetImpl()
- return messageSet
- }
- @Override
- String getDescription() {
- "Function to know if user is in any project role of the parameter"
- }
- Query getQuery(QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause) {
- JiraAuthenticationContext context = ComponentAccessor.getJiraAuthenticationContext();
- ProjectRoleManager projectRoleManager = ComponentAccessor.getOSGiComponentInstanceOfType(ProjectRoleManager.class)
- ApplicationUser applicationUser = context.loggedInUser
- ProjectRoleActors projectRoleActors = null
- def booleanQuery = new BooleanQuery()
- def typeuser
- issues = getIssues(operand.args[0], applicationUser)
- issues.each {Issue issue ->
- try{
- projectRoleActors = projectRoleManager.getProjectRoleActors(projectRoleManager.getProjectRole(operand.args[2]), issue.getProjectObject())
- if (operand.args[1] == "assignee" )
- typeuser = issue.getAssignee()
- else
- typeuser = issue.getReporter()
- if ( projectRoleActors.getUsers().contains(typeuser) ) {
- booleanQuery.add(new TermQuery(new Term("issue_id", issue.id as String)), BooleanClause.Occur.SHOULD)
- }
- }catch(NullPointerException NPE){
- }
- }
- return booleanQuery
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment