Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 搜索请求视图插件实现类_Java_Eclipse_Jira_Jira Plugin - Fatal编程技术网

Java 搜索请求视图插件实现类

Java 搜索请求视图插件实现类,java,eclipse,jira,jira-plugin,Java,Eclipse,Jira,Jira Plugin,我已将请求更新到当前状态。 我只留下了一个错误,我不知道如何解决它。 首先,这是我的代码: package com.example.plugins.tutorial; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.IssueFactory; import com.atlassian.jira.issue.search.SearchException; import com.atlassian.jir

我已将请求更新到当前状态。
我只留下了一个错误,我不知道如何解决它。
首先,这是我的代码:

package com.example.plugins.tutorial;

import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueFactory;
import com.atlassian.jira.issue.search.SearchException;
import com.atlassian.jira.issue.search.SearchProviderFactory;
import com.atlassian.jira.issue.search.SearchRequest;
import com.atlassian.jira.issue.views.util.IssueWriterHitCollector;
import com.atlassian.jira.plugin.searchrequestview.AbstractSearchRequestView;
import com.atlassian.jira.plugin.searchrequestview.SearchRequestParams;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.util.JiraVelocityUtils;
import com.atlassian.sal.api.search.SearchProvider;
import com.atlassian.jira.issue.search.providers.LuceneSearchProvider;

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Collector;

import java.io.IOException;
import java.io.Writer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;


public class TestSearch extends AbstractSearchRequestView
{
    private final JiraAuthenticationContext authenticationContext;
    private final SearchProviderFactory searchProviderFactory;
    private final IssueFactory issueFactory;
    private final SearchProvider searchProvider;

    public TestSearch(JiraAuthenticationContext authenticationContext, SearchProviderFactory searchProviderFactory,
        IssueFactory issueFactory, SearchProvider searchProvider)
{
    this.authenticationContext = authenticationContext;
    this.searchProviderFactory = searchProviderFactory;
    this.issueFactory = issueFactory;
    this.searchProvider = searchProvider;
}

public void writeSearchResults(final SearchRequest searchRequest, final SearchRequestParams searchRequestParams, final Writer writer)
{
    final Map defaultParams = JiraVelocityUtils.getDefaultVelocityParams(authenticationContext);

    //Need to put the filtername into the velocity context.  This may be null if this is an anoymous filter.
    final Map headerParams = new HashMap(defaultParams);
    headerParams.put("filtername", searchRequest.getName());
    try
    {
        //First we need to write the header
        writer.write(descriptor.getHtml("header", headerParams));

        //now lets write the search results.  This basically iterates over each issue in the search results and writes
        //it to the writer using the format defined by this plugin.  To ensure that this doesn't result in huge
        //memory consumption only one issue should be loaded into memory at a time.  This can be guaranteed by using a
        //Hitcollector.
        final IndexSearcher searcher = searchProviderFactory.getSearcher(SearchProviderFactory.ISSUE_INDEX);
        final Map issueParams = new HashMap(defaultParams);
        //This hit collector is responsible for writing out each issue as it is encountered in the search results.
        //It will be called for each search result by the underlying Lucene search code.
        final Collector hitCollector = new IssueWriterHitCollector(searcher, writer, issueFactory)
        {
            protected void writeIssue(Issue issue, Writer writer) throws IOException
            {
                //put the current issue into the velocity context and render the single issue view
                issueParams.put("issue", issue);
                writer.write(descriptor.getHtml("singleissue", issueParams));
            }
        };
        //now run the search that's defined in the issue navigator and pass in the hitcollector from above which will
        //write out each issue in the format specified in this plugin.
        searchProvider.searchAndSort(searchRequest.getQuery(), authenticationContext.getLoggedInUser(), hitCollector, searchRequestParams.getPagerFilter());

        //finally lets write the footer.
        writer.write(descriptor.getHtml("footer", Collections.emptyMap()));
    }
    catch (IOException e)
    {
        throw new RuntimeException(e);
    }
    catch (SearchException e)
    {
        throw new RuntimeException(e);
    }
}
}
我的问题是searchAndSort不起作用

searchProvider.searchAndSort(searchRequest.getQuery(), authenticationContext.getLoggedInUser(), hitCollector, searchRequestParams.getPagerFilter());
Eclipse向我显示了一个错误,“类型SearchProvider的方法searchAndSort未定义”

同样的问题和第二个错误的例子:

@Override
public void writeSearchResults(final SearchRequest searchRequest,final SearchRequestParams searchRequestParams,final Writer writer) throws SearchException 
{
    final Map defaultParams = JiraVelocityUtils.getDefaultVelocityParams(authenticationContext);
    final Map headerParams = new HashMap(defaultParams);
    headerParams.put("filtername", searchRequest.getName());
    headerParams.put("user", authenticationContext.getLoggedInUser());
    try 
    {
        //Header
        writer.write(descriptor.getHtml("header", headerParams));
        //Body
        final IndexSearcher searcher = searchProviderFactory.getSearcher(SearchProviderFactory.ISSUE_INDEX);        
        final Map issueParams = new HashMap(defaultParams);
        final Collector hitCollector = new IssueWriterHitCollector(searcher, writer, issueFactory) 
        {
            protected void writeIssue(Issue issue, Writer writer) throws IOException 
            {
                //put the current issue into the velocity context and render the single issue view
                issueParams.put("issue", issue);
                writer.write(descriptor.getHtml("body", issueParams));
            }
        };
        searchProvider.searchAndSort(searchRequest.getQuery(), authenticationContext.getLoggedInUser(), hitCollector, searchRequestParams.getPagerFilter());
        //Footer
        writer.write(descriptor.getHtml("footer", MapBuilder.build("user", authenticationContext.getLoggedInUser())));
    }
    catch (IOException e) 
    {
        throw new RuntimeException(e);
    }
    catch (SearchException e) 
    {
        throw new RuntimeException(e);
    }
}
searchAndSort也有同样的问题


如果有人能帮上忙,那就太好了。

我已经解决了它,我导入了错误的SearchProvider,现在它可以工作了。 对于其他有相同问题的用户,如果他们想创建一个搜索请求视图插件,该插件将以html形式返回问题,您可以使用我的代码:

package com.example.plugins.tutorial;

import com.atlassian.jira.util.collect.MapBuilder;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueFactory;
import com.atlassian.jira.issue.search.SearchException;
import com.atlassian.jira.issue.search.SearchProviderFactory;
import com.atlassian.jira.issue.search.SearchRequest;
import com.atlassian.jira.issue.views.util.IssueWriterHitCollector;
import com.atlassian.jira.plugin.searchrequestview.AbstractSearchRequestView;
import com.atlassian.jira.plugin.searchrequestview.SearchRequestParams;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.util.JiraVelocityUtils;
import com.atlassian.jira.issue.search.SearchProvider;

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Collector;

import java.io.IOException;
import java.io.Writer;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class NextTestSearch extends AbstractSearchRequestView {

private final JiraAuthenticationContext authenticationContext;
private final SearchProviderFactory searchProviderFactory;
private final IssueFactory issueFactory;
private final SearchProvider searchProvider;

public NextTestSearch(JiraAuthenticationContext authenticationContext, SearchProviderFactory searchProviderFactory,
        IssueFactory issueFactory, SearchProvider searchProvider)
{
    this.authenticationContext = authenticationContext;
    this.searchProviderFactory = searchProviderFactory;
    this.issueFactory = issueFactory;
    this.searchProvider = searchProvider;
}

@Override
public void writeSearchResults(final SearchRequest searchRequest,final SearchRequestParams searchRequestParams,final Writer writer) throws SearchException 
{
    final Map defaultParams = JiraVelocityUtils.getDefaultVelocityParams(authenticationContext);
    final Map headerParams = new HashMap(defaultParams);
    headerParams.put("filtername", searchRequest.getName());
    headerParams.put("user", authenticationContext.getLoggedInUser());
    try 
    {
        //Header
        writer.write(descriptor.getHtml("header", headerParams));
        //Body
        final IndexSearcher searcher = searchProviderFactory.getSearcher(SearchProviderFactory.ISSUE_INDEX);        
        final Map issueParams = new HashMap(defaultParams);
        final Collector hitCollector = new IssueWriterHitCollector(searcher, writer, issueFactory) 
        {
            protected void writeIssue(Issue issue, Writer writer) throws IOException 
            {
                //put the current issue into the velocity context and render the single issue view
                issueParams.put("issue", issue);
                writer.write(descriptor.getHtml("body", issueParams));
            }
        };
        searchProvider.searchAndSort(searchRequest.getQuery(), authenticationContext.getLoggedInUser(), hitCollector, searchRequestParams.getPagerFilter());
        //Footer
        writer.write(descriptor.getHtml("footer", MapBuilder.build("user", authenticationContext.getLoggedInUser())));
    }
    catch (IOException e) 
    {
        throw new RuntimeException(e);
    }
    catch (SearchException e) 
    {
        throw new RuntimeException(e);
    }
}
}
插件所需的其余部分应该由officele教程完成,虽然有教程,但java源代码已被弃用