@Override
  public SearchRequest getSearchUrlSuffix(TimePeriod value, SearchRequest searchRequest) {
    TimePeriod timePeriod = value;
    Date startDate = timePeriod.getStart();
    Date endDate = new Date(timePeriod.getEnd().getTime());

    // copy the old searchrequest's query
    JqlQueryBuilder builder = JqlQueryBuilder.newBuilder(searchRequest.getQuery());
    builder.where().defaultAnd().addDateRangeCondition(documentConstant, startDate, endDate);

    return new SearchRequest(builder.buildQuery(), searchRequest.getOwnerUserName(), null, null);
  }
 private String createIssueNavigatorUrl(
     final SearchRequest searchRequest,
     final VelocityRequestContext velocityRequestContext,
     final User remoteUser) {
   if (searchRequest == null) {
     return null;
   } else {
     final Query optimizedQuery =
         new RedundantClausesQueryOptimizer().optimizeQuery(searchRequest.getQuery());
     return velocityRequestContext.getCanonicalBaseUrl()
         + "/secure/IssueNavigator.jspa?reset=true"
         + searchService.getQueryString(remoteUser, optimizedQuery);
   }
 }
  /**
   * Test that the manager executes the correct search to find the recent comments.
   *
   * @param issueIds the issue ids to limit the comment search by.
   * @param request the search request being used to find the comments. This is the request that is
   *     normally used to find all the issue ids to form the scope of the comment search. The
   *     request may also be used to add extra "update date" criteria to the comment search.
   * @param user the user performing the search.
   * @param includeDates true if and only if the passed search request should be used to create
   *     extra "update date" criteria.
   * @param expectedQuery the query that we expect to be generated by the manager.
   * @throws Exception this is a test, just rethrow for a failure.
   */
  private void _testGetRecentComments(
      final List<Long> issueIds,
      final SearchRequest request,
      final User user,
      final boolean includeDates,
      final org.apache.lucene.search.Query expectedQuery)
      throws Exception {
    // the issue searcher is never called, but we need it there.
    final MockControl mockIssueSearcherControl =
        MockClassControl.createControl(IndexSearcher.class);
    final IndexSearcher mockIssueSearcher = (IndexSearcher) mockIssueSearcherControl.getMock();
    mockIssueSearcherControl.replay();

    // this is where we check to make sure search lucene with the correct comment.
    final MockControl mockCommentSearcherControl =
        MockClassControl.createControl(IndexSearcher.class);
    final IndexSearcher mockCommentSearcher = (IndexSearcher) mockCommentSearcherControl.getMock();

    final Sort sort =
        new Sort(
            new SortField[] {
              new SortField(DocumentConstants.COMMENT_UPDATED, SortField.STRING, true)
            });
    final ArgumentsMatcher compositeArgumentsMatcher =
        ArgumentsMatcherBuilder.newNaturalBuilder()
            .addDefaultMatcher()
            .addDefaultMatcher()
            .addArgumentMatcher(Sort.class, new LuceneSortMatcher())
            .asArgumentsMatcher();

    mockCommentSearcher.search(expectedQuery, Integer.MAX_VALUE, sort);
    mockCommentSearcherControl.setMatcher(compositeArgumentsMatcher);
    mockCommentSearcherControl.setReturnValue(null);
    mockCommentSearcherControl.replay();

    final MockSearchProviderFactory factory = new MockSearchProviderFactory();
    factory.addRegistration(SearchProviderFactory.ISSUE_INDEX, mockIssueSearcher);
    factory.addRegistration(SearchProviderFactory.COMMENT_INDEX, mockCommentSearcher);

    // create a IssueSearchProvider that will return our constant list of ids.
    MockIssueSearchProvider mockIssueSearchProvider =
        new MockIssueSearchProvider(issueIds, user, request.getQuery());
    final SearchService service = EasyMock.createMock(SearchService.class);
    EasyMock.expect(service.doesQueryFitFilterForm(user, request.getQuery()))
        .andReturn(includeDates);
    EasyMock.replay(service);

    MyLuceneQueryModifier myLuceneQueryModifier = new MyLuceneQueryModifier();

    CommentService commentService = EasyMock.createMock(CommentService.class);
    JqlOperandResolver jqlOperandResolver = MockJqlOperandResolver.createSimpleSupport();
    final DefaultRecentCommentManager defaultCommentManager =
        new DefaultRecentCommentManager(
            commentService,
            factory,
            mockIssueSearchProvider,
            dateSupport,
            jqlOperandResolver,
            service,
            myLuceneQueryModifier);
    defaultCommentManager.getRecentComments(request, user);

    mockIssueSearcherControl.verify();
    mockCommentSearcherControl.verify();
  }