/* * Copyright 2016 Hewlett-Packard Development Company, L.P. * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. */ package com.hp.autonomy.frontend.find.idol.comparison; import com.hp.autonomy.searchcomponents.core.search.DocumentsService; import com.hp.autonomy.searchcomponents.core.search.QueryRestrictions; import com.hp.autonomy.searchcomponents.core.search.SearchResult; import com.hp.autonomy.types.requests.Documents; import org.apache.commons.collections4.ListUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping(ComparisonController.BASE_PATH) class ComparisonController<Q extends QueryRestrictions<?>, R extends SearchResult, E extends Exception> { static final String BASE_PATH = "/api/bi/comparison"; static final String COMPARE_PATH = "compare"; static final String RESULTS_PATH = "results"; static final int STATE_TOKEN_MAX_RESULTS = Integer.MAX_VALUE; private static final String TEXT_PARAM = "text"; private static final String FIELD_TEXT_PARAM = "field_text"; static final String STATE_MATCH_PARAM = "state_match_ids"; static final String STATE_DONT_MATCH_PARAM = "state_dont_match_ids"; static final String RESULTS_START_PARAM = "start"; static final String MAX_RESULTS_PARAM = "max_results"; static final String SUMMARY_PARAM = "summary"; static final String SORT_PARAM = "sort"; static final String HIGHLIGHT_PARAM = "highlight"; private static final String PROMOTIONS = "promotions"; private final ComparisonService<R, E> comparisonService; private final DocumentsService<?, ?, ?, Q, R, E> documentsService; @Autowired public ComparisonController(final ComparisonService<R, E> comparisonService, final DocumentsService<?, ?, ?, Q, R, E> documentsService) { this.comparisonService = comparisonService; this.documentsService = documentsService; } @RequestMapping(value = COMPARE_PATH, method = RequestMethod.POST) public ComparisonStateTokens getCompareStateTokens(@RequestBody final ComparisonRequest<Q> body) throws E { // If either query state token is null then try and fetch one using the query restrictions final String firstStateToken = body.getFirstQueryStateToken() != null ? body.getFirstQueryStateToken() : documentsService.getStateToken(body.getFirstRestrictions(), STATE_TOKEN_MAX_RESULTS, false); final String secondStateToken = body.getSecondQueryStateToken() != null ? body.getSecondQueryStateToken() : documentsService.getStateToken(body.getSecondRestrictions(), STATE_TOKEN_MAX_RESULTS, false); return comparisonService.getCompareStateTokens(firstStateToken, secondStateToken); } @SuppressWarnings("MethodWithTooManyParameters") @RequestMapping(value = RESULTS_PATH, method = RequestMethod.GET) public Documents<R> getResults( @RequestParam(STATE_MATCH_PARAM) final List<String> stateMatchIds, @RequestParam(value = STATE_DONT_MATCH_PARAM, required = false) final List<String> stateDontMatchIds, @RequestParam(value = TEXT_PARAM, required = false, defaultValue = "*") final String text, @RequestParam(value = FIELD_TEXT_PARAM, defaultValue = "") final String fieldText, @RequestParam(value = RESULTS_START_PARAM, required = false, defaultValue = "1") final int resultsStart, @RequestParam(MAX_RESULTS_PARAM) final int maxResults, @RequestParam(SUMMARY_PARAM) final String summary, @RequestParam(value = SORT_PARAM, required = false) final String sort, @RequestParam(value = HIGHLIGHT_PARAM, required = false, defaultValue = "true") final boolean highlight, @RequestParam(value = PROMOTIONS, defaultValue = "false") final boolean promotions ) throws E { return comparisonService.getResults( stateMatchIds, ListUtils.emptyIfNull(stateDontMatchIds), text, fieldText, resultsStart, maxResults, summary, sort, highlight ); } }