Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.onresolve.jira.groovy.jql
- import com.atlassian.jira.component.ComponentAccessor
- import com.atlassian.jira.issue.link.IssueLinkManager
- import com.atlassian.jira.issue.link.IssueLink
- import com.atlassian.jira.issue.Issue
- import com.atlassian.jira.JiraDataType
- import com.atlassian.jira.JiraDataTypes
- import com.atlassian.jira.component.ComponentAccessor
- import com.atlassian.jira.jql.operand.QueryLiteral
- import com.atlassian.jira.jql.query.QueryCreationContext
- import com.atlassian.jira.permission.ProjectPermissions
- import com.atlassian.jira.project.version.VersionManager
- import com.atlassian.query.clause.TerminalClause
- import com.atlassian.query.operand.FunctionOperand
- import com.atlassian.jira.issue.link.IssueLink
- class EpicOutLink extends AbstractScriptedJqlFunction implements JqlFunction {
- @Override
- String getDescription() {
- "Получаем связанные исходящие задачи к эпику "
- }
- @Override
- List<Map> getArguments() {
- [
- [
- description: "Epic Key",
- optional: false,
- ]
- ]
- }
- @Override
- String getFunctionName() {
- "epicOutLink"
- }
- @Override
- JiraDataType getDataType() {
- JiraDataTypes.ISSUE
- }
- // Это метод, который вызывает стрипт раннер, что бы узнать на что заменить epicOutLink(TEST-1)
- // Он возвращает список ключей связанных сущностей и сркиптраннер преобразует "issue in epicOutLink(TEST-1)"
- // в issue in epicOutLink(TEST-2, TEST-3), где TEST-{2,3} - свзяанные сущности
- @Override
- List<QueryLiteral> getValues( QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause) {
- // Формируем для начала пустой список. QueryLiteral - это класс для описания, это может быть как и ключ
- // типа TEST-2, или проект типа TEST, так и какое-то выражение, которое тоже потом трансформируется, в нашем случае это ключ
- List<QueryLiteral> out = []
- // получаем из ключа, который передается в epicOutLink в качестве аргумента, объект Issue
- Issue issue = ComponentAccessor.getIssueManager().getIssueObject(operand.args.first().toUpperCase())
- // если такого issueнету, то вернем пустой список, в итоге "issue in epicOutLink(TEST-1)"
- // трансформируется в "issue in ()"
- if (issue == null) {
- retrun out
- }
- def issueLinkManager = ComponentAccessor.getIssueLinkManager()
- // Получаем связанные задачи у линка
- //def inwardLinks = issueLinkManager.getInwardLinks(issue.getId())
- def outwardLinks = issueLinkManager.getOutwardLinks(issue.getId())
- // для исходящих
- for (IssueLink link: outwardLinks) {
- if (link.getIssueLinkType().getName() == "Blocks") { // Фильтруем линки по типу
- // Добавляем к списку новый литерал, у линка есть методы для источника и назначения, т.к. это
- // исходящие линки, то берем метод для получения ишью-назначение(ишью-источник - это и есть эпик)
- out.add(new QueryLiteral(operand, link.getDestinationObject().getKey()))
- }
- }
- // для входящих
- //for (IssueLink link: inwardLinks) {
- // if (link.getIssueLinkType().getName() == "Blocks") {
- // out.add(new QueryLiteral(operand, link.getSourceObject().getKey()))
- // }
- //}
- //Возвращаем список, на который надо заменить функцию epicOutLink
- return out
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement