Class DefaultPaginatedFlexibleSearchService
- java.lang.Object
-
- de.hybris.platform.servicelayer.search.paginated.impl.DefaultPaginatedFlexibleSearchService
-
- All Implemented Interfaces:
PaginatedFlexibleSearchService
public class DefaultPaginatedFlexibleSearchService extends java.lang.Object implements PaginatedFlexibleSearchService
Default implementation ofPaginatedFlexibleSearchService
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
DefaultPaginatedFlexibleSearchService.SearchResultInfo
-
Constructor Summary
Constructors Constructor Description DefaultPaginatedFlexibleSearchService()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.String
buildSortsAppliedQuery(java.lang.String query, SearchPageData searchPageData, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias)
Builds a requested sorts applied query based on given query by appending list ofSortData
passed from given searchPageData.protected <T> SearchPageData<T>
createPagedSearchResult(SearchResult<T> searchResult, SearchPageData searchPageData, DefaultPaginatedFlexibleSearchService.SearchResultInfo searchResultInfo)
Returns an instance of {link SearchPageData} with givenSearchResult
.protected <T> PaginationData
createPagination(SearchPageData searchPageDataInput, DefaultPaginatedFlexibleSearchService.SearchResultInfo searchResultInfo)
CreatesPaginationData
based on searchPageDataInput.pagination and calculates the numberOfPages based on the totalNumberOfResults.protected <T> SearchPageData<T>
createSearchPageData()
Returns a new instance ofSearchPageData
protected java.util.List<SortData>
filterSearchPageDataSorts(SearchPageData searchPageData, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias)
Returns a list ofSortData
where each of it exists from given sortCodeToQueryAlias map.protected AbstractQueryHelper
getAbstractQueryHelper()
protected FlexibleSearchService
getFlexibleSearchService()
protected SortDataParsingStrategy
getSortDataParsingStrategy()
protected FlexibleSearchQuery
populateSearchQuery(SearchPageData searchPageData, FlexibleSearchQuery searchQuery, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias, boolean nextElementAdded)
Populates aFlexibleSearchQuery
based on given searchQuery by appending "ORDER BY" clause if given searchPageData has list ofSortData
.<T> SearchPageData<T>
search(PaginatedFlexibleSearchParameter parameter)
Searches according toPaginatedFlexibleSearchParameter
.void
setAbstractQueryHelper(AbstractQueryHelper abstractQueryHelper)
void
setFlexibleSearchService(FlexibleSearchService flexibleSearchService)
void
setSortDataParsingStrategy(SortDataParsingStrategy sortDataParsingStrategy)
protected void
validatePaginatedFlexibleSearchParameter(PaginatedFlexibleSearchParameter parameter)
Validates if the givenPaginatedFlexibleSearchParameter
contains valid parameters.
-
-
-
Method Detail
-
search
public <T> SearchPageData<T> search(PaginatedFlexibleSearchParameter parameter)
Description copied from interface:PaginatedFlexibleSearchService
Searches according toPaginatedFlexibleSearchParameter
.- Specified by:
search
in interfacePaginatedFlexibleSearchService
- Type Parameters:
T
- The type of item returned from the search- Parameters:
parameter
- A parameter object containing all attributes needed for paginated flexible search. The sort info should be only populated inPaginatedFlexibleSearchParameter.searchPageData
PaginatedFlexibleSearchParameter.flexibleSearchQuery
- The flexible search query containing String query and flexible search query parameters as Map<String, Object>PaginatedFlexibleSearchParameter.searchPageData
- The search page data containing requested pagination and sort dataPaginatedFlexibleSearchParameter.sortCodeToQueryAlias
- The map between sort code and query alias which will be used to dynamically generate "ORDER BY" clause by appending to the given flexible search query based on requested sorts.
- Returns:
- an instance of
SearchPageData
containing the search results with applied sorts and pagination data
-
validatePaginatedFlexibleSearchParameter
protected void validatePaginatedFlexibleSearchParameter(PaginatedFlexibleSearchParameter parameter)
Validates if the givenPaginatedFlexibleSearchParameter
contains valid parameters.- Parameters:
parameter
- the PaginatedFlexibleSearchParameter- Throws:
java.lang.IllegalArgumentException
- if parameter contains invalid data
-
populateSearchQuery
protected FlexibleSearchQuery populateSearchQuery(SearchPageData searchPageData, FlexibleSearchQuery searchQuery, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias, boolean nextElementAdded)
Populates aFlexibleSearchQuery
based on given searchQuery by appending "ORDER BY" clause if given searchPageData has list ofSortData
.- Parameters:
searchPageData
- the searchPageData contains requested pagination and sorting informationsearchQuery
- the searchQuerysortCodeToQueryAlias
- the sortCodeToQueryAlias contains mapping between sort code and query alias which will be used to dynamically generate "ORDER BY" clause.nextElementAdded
-- Returns:
- the
FlexibleSearchQuery
with requested sorts applied
-
filterSearchPageDataSorts
protected java.util.List<SortData> filterSearchPageDataSorts(SearchPageData searchPageData, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias)
Returns a list ofSortData
where each of it exists from given sortCodeToQueryAlias map. The intention of method is to filter out the undefined sort code from givenSearchPageData.getSorts()
based on given sortCodeToQueryAlias map, so that oncebuildSortsAppliedQuery(String, SearchPageData, Map)
is called, sortDataParsingStrategy is guaranteed to return the mapped query alias for each sort code.It also converts sortData's code to lower case to meet the expectation of
SortDataParsingStrategy
- Parameters:
searchPageData
- the searchPageData contains list ofSortData
which will be used as requested sort listsortCodeToQueryAlias
- the sortCodeToQueryAlias contains mapping between sort code and query alias which will be used to generate "ORDER BY" clause dynamically based on requested sort codes- Returns:
- the list of
SortData
where each of them found from given sortCodeToQueryAlias - See Also:
SortDataParsingStrategy
-
buildSortsAppliedQuery
protected java.lang.String buildSortsAppliedQuery(java.lang.String query, SearchPageData searchPageData, java.util.Map<java.lang.String,java.lang.String> sortCodeToQueryAlias)
Builds a requested sorts applied query based on given query by appending list ofSortData
passed from given searchPageData. It usesSortDataParsingStrategy
to properly generate "ORDER BY {queryAlias:sortCode} asc|desc" search query dynamically based on the requested sorts. If the list ofSortData
from given searchPageData is empty, the given query will be returned without any modification.- Parameters:
query
- the querysearchPageData
- the searchPageData contains requested pagination and sorting informationsortCodeToQueryAlias
- the sortCodeToQueryAlias contains mapping between sort code and query alias which will be used to generate "ORDER BY" clause dynamically based on requested sort codes- Returns:
- a requested sorts applied query
-
createPagedSearchResult
protected <T> SearchPageData<T> createPagedSearchResult(SearchResult<T> searchResult, SearchPageData searchPageData, DefaultPaginatedFlexibleSearchService.SearchResultInfo searchResultInfo)
Returns an instance of {link SearchPageData} with givenSearchResult
. It also contains updated pagination and applied sorts information- Type Parameters:
T
- the type of item returned from the search- Parameters:
searchResult
- the searchResultsearchPageData
- the searchPageData containing pagination and sorting informationsearchResultInfo
- the search result info needed to properly calculate slicing (hasNext, hasPrevious values)- Returns:
- an instance of
SearchPageData
with searchResult, pagination and sorting information
-
createPagination
protected <T> PaginationData createPagination(SearchPageData searchPageDataInput, DefaultPaginatedFlexibleSearchService.SearchResultInfo searchResultInfo)
CreatesPaginationData
based on searchPageDataInput.pagination and calculates the numberOfPages based on the totalNumberOfResults.- Type Parameters:
T
- the type of item returned from the search- Parameters:
searchPageDataInput
- the searchPageDataInput contains pagination and sorting informationsearchResultInfo
- the search result info needed to properly calculate slicing (hasNext, hasPrevious values)- Returns:
- PaginationData based on input paginationData and calculated numberOfPages of the given searchResult
-
createSearchPageData
protected <T> SearchPageData<T> createSearchPageData()
Returns a new instance ofSearchPageData
- Type Parameters:
T
- The type of item returned from the search- Returns:
SearchPageData
-
getFlexibleSearchService
protected FlexibleSearchService getFlexibleSearchService()
-
setFlexibleSearchService
public void setFlexibleSearchService(FlexibleSearchService flexibleSearchService)
-
getSortDataParsingStrategy
protected SortDataParsingStrategy getSortDataParsingStrategy()
-
setSortDataParsingStrategy
public void setSortDataParsingStrategy(SortDataParsingStrategy sortDataParsingStrategy)
-
getAbstractQueryHelper
protected AbstractQueryHelper getAbstractQueryHelper()
-
setAbstractQueryHelper
public void setAbstractQueryHelper(AbstractQueryHelper abstractQueryHelper)
-
-