如何从所有链接的问题中获取选民名单

How to get voters lists from all linked issues

我正在尝试创建一个执行以下操作的 JIRA 插件:

  1. 对于每个问题,获取所有 linked 问题,这些问题由 "duplicates" 或 "is duplicated by"(或其他预定义的 link 类型)linked。
  2. 对于每个此类问题,获取该问题的选民列表(不一定是 List 对象)。

我的问题是 javadoc 几乎没有信息。按照教程,我目前有:

public class VotersCount extends AbstractJiraContextProvider {

    @Override
    public Map<String, Integer> getContextMap(User user, JiraHelper jiraHelper) {

        Map<String, Integer> contextMap = new HashMap<>();
        Issue currentIssue = (Issue) jiraHelper.getContextParams().get("issue");
//      Issue[] linkedIssues = currentIssue.getLinkedIssuesBy(...); //Step 1 mock code
//      Voter[] voters = linkedissues[3].getVoters(); //Step 2 mock code
        int count = voters.length; //Pretend there is some calculation here
        contextMap.put("votersCount", count);
        return contextMap;
    }
}

(我在 .vm 文件中使用 votersCount。)

但是,我在 javadoc 中没有看到 AbstractJiraContextProvidergetContextMap 的解释,所以我什至不确定这是否是正确的方法。

在我自己的研究中,我发现 class ViewVoters 具有方法 Collection<UserBean> getVoters(),这是我可以使用的东西,但我不知道如何获取或以与给定问题交互的方式构建这样的对象。

我正在寻找一个工作代码来替换我的 2 行模拟代码。

1) 使用 IssueLinkService 中的方法之一。也许 getIssueLinks

2) issueVoterAccessor.getVoterUserkeys

IssueLinkService 和 IssueVoterAccessor 的实例应该作为参数注入到 VotersCount 的构造函数中。

我使用以下方法解决了它:

  1. 要通过指定的 link 类型将问题 link 编辑到 Issue issue

    LinkCollection linkCollection = ComponentAccessor.getIssueLinkManager().getLinkCollectionOverrideSecurity(issue);
    Set<IssueLinkType> linkTypes = linkCollection.getLinkTypes();
    // Perform operations on the set to get the issues you want.
    for (IssueLinkType linkType : linkTypes) {
        List<Issue> l1 = linkCollection.getOutwardIssues(linkType.getName());
        List<Issue> l2 = linkCollection.getInwardIssues(linkType.getName());
    }
    
  2. 让所有选民在 Issue issue:

    ComponentAccessor.getVoteManager().getVoterUserkeys(issue);
    

后来有人告诉我,可以扩展 CalculatedCFType 并覆盖 getValueFromIssue,它将当前问题作为参数传递给您,而不是使用

Issue currentIssue = (Issue) jiraHelper.getContextParams().get("issue");