如何在Jira插件中进行数据库查询?

时间:2012-07-25 09:22:24

标签: jira-plugin

我正在编写一个自定义Jql函数来执行普通Jql无法实现的高级查询。我需要找到包含多个组件的所有问题或者(只有一个组件和给定的自定义字段不为空)。

我可以在插件中注入哪些Manager类,以便我可以发出SQL,Hibernate或其他类型的数据库查询?

我的自定义函数的目的是返回匹配问题的列表,以便它可以在Jira的Jql搜索中使用。

1 个答案:

答案 0 :(得分:0)

尝试查看JIRA API参考: http://docs.atlassian.com/jira/4.1/com/atlassian/jira/jql/builder/JqlClauseBuilder.htmlhttp://docs.atlassian.com/jira/4.1/com/atlassian/jira/jql/builder/ConditionBuilder.html

您总是可以为插件类创建一个如下所示的方法:

public class MyPlugin
{
    JiraAuthenticationContext authenticationContext;
    SearchProvider searchProvider; 
    public MyPlugin(JiraAuthenticationContext authenticationContext, SearchProvider searchProvider){
        this.authenticationContext = authenticationContext;
        this.searchProvider = searchProvider; 
    }

    public List<Issue> getIssues(CustomField your_cf) throws SearchException{
        User user = authenticationContext.getLoggedInUser();

        JqlClauseBuilder jqb = JqlQueryBuilder.newBuilder().where();
        jqb = jqb.not().componentIsEmpty();
        Query query = jqb.endWhere().buildQuery(); 

        List<Issue> issues = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter()).getIssues();

        List<Issue> result = new ArrayList<Issue>(); 
        for(Issue issue : issues){
                Collection<GenericValue> components = issue.getComponents(); 
                //component size already > 0 from query
                if(components.size() > 1 || (issue.getCustomFieldValue(your_cf) != null)) 
                        result.add(issue); 
        }
        return result; 
    }
}