Advertisement
Guest User

Untitled

a guest
Jun 29th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.onresolve.jira.groovy.jql
  2.  
  3. import com.atlassian.jira.component.ComponentAccessor
  4. import com.atlassian.jira.issue.link.IssueLinkManager
  5. import com.atlassian.jira.issue.link.IssueLink
  6. import com.atlassian.jira.issue.Issue
  7.  
  8. import com.atlassian.jira.JiraDataType
  9. import com.atlassian.jira.JiraDataTypes
  10. import com.atlassian.jira.component.ComponentAccessor
  11. import com.atlassian.jira.jql.operand.QueryLiteral
  12. import com.atlassian.jira.jql.query.QueryCreationContext
  13. import com.atlassian.jira.permission.ProjectPermissions
  14. import com.atlassian.jira.project.version.VersionManager
  15. import com.atlassian.query.clause.TerminalClause
  16. import com.atlassian.query.operand.FunctionOperand
  17. import com.atlassian.jira.issue.link.IssueLink
  18.  
  19. class EpicOutLink extends AbstractScriptedJqlFunction implements JqlFunction {
  20.  
  21.     @Override
  22.     String getDescription() {
  23.         "Получаем связанные исходящие задачи к эпику "
  24.     }
  25.    
  26.  
  27.     @Override
  28.     List<Map> getArguments() {
  29.         [
  30.             [
  31.                 description: "Epic Key",
  32.                 optional: false,
  33.             ]
  34.         ]
  35.     }
  36.    
  37.  
  38.     @Override
  39.     String getFunctionName() {
  40.         "epicOutLink"
  41.     }
  42.    
  43.  
  44.     @Override
  45.     JiraDataType getDataType() {
  46.         JiraDataTypes.ISSUE
  47.     }
  48.    
  49.     // Это метод, который вызывает стрипт раннер, что бы узнать на что заменить epicOutLink(TEST-1)
  50.     // Он возвращает список ключей связанных сущностей и сркиптраннер преобразует "issue in epicOutLink(TEST-1)"
  51.     // в issue in epicOutLink(TEST-2, TEST-3), где TEST-{2,3} - свзяанные сущности
  52.     @Override
  53.     List<QueryLiteral> getValues( QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause) {
  54.         // Формируем для начала пустой список. QueryLiteral - это класс для описания, это может быть как и ключ
  55.         // типа TEST-2, или проект типа TEST, так и какое-то выражение, которое тоже потом трансформируется, в нашем случае это ключ
  56.         List<QueryLiteral> out = []
  57.         // получаем из ключа, который передается в epicOutLink в качестве аргумента, объект Issue
  58.         Issue issue = ComponentAccessor.getIssueManager().getIssueObject(operand.args.first().toUpperCase())
  59.         // если такого issueнету, то вернем пустой список, в итоге "issue in epicOutLink(TEST-1)"
  60.         // трансформируется в "issue in ()"
  61.         if (issue == null) {
  62.             retrun out
  63.         }
  64.  
  65.         def issueLinkManager = ComponentAccessor.getIssueLinkManager()
  66.          
  67.         // Получаем связанные задачи у линка
  68.         //def inwardLinks = issueLinkManager.getInwardLinks(issue.getId())
  69.         def outwardLinks = issueLinkManager.getOutwardLinks(issue.getId())
  70.         // для исходящих
  71.         for (IssueLink link: outwardLinks) {
  72.             if (link.getIssueLinkType().getName() == "Blocks") { // Фильтруем линки по типу
  73.                 // Добавляем к списку новый литерал, у линка есть методы для источника и назначения, т.к. это
  74.                 // исходящие линки, то берем метод для получения ишью-назначение(ишью-источник - это и есть эпик)
  75.                 out.add(new QueryLiteral(operand, link.getDestinationObject().getKey()))
  76.             }
  77.         }
  78.         // для входящих
  79.         //for (IssueLink link: inwardLinks) {
  80.         //  if (link.getIssueLinkType().getName() == "Blocks") {
  81.         //      out.add(new QueryLiteral(operand, link.getSourceObject().getKey()))
  82.         //  }
  83.         //}
  84.  
  85.     //Возвращаем список, на который надо заменить функцию epicOutLink
  86.     return out
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement