use of org.broadleafcommerce.common.extension.ExtensionResultStatusType in project BroadleafCommerce by BroadleafCommerce.
the class SolrHelperServiceImpl method getCategoryId.
@Override
public Long getCategoryId(Category category) {
Long[] returnId = new Long[1];
ExtensionResultStatusType result = searchExtensionManager.getProxy().getCategoryId(category, returnId);
if (result.equals(ExtensionResultStatusType.HANDLED)) {
return returnId[0];
}
return category.getId();
}
use of org.broadleafcommerce.common.extension.ExtensionResultStatusType in project BroadleafCommerce by BroadleafCommerce.
the class SolrHelperServiceImpl method attachSortClause.
@Override
public void attachSortClause(SolrQuery query, SearchCriteria searchCriteria, String defaultSort) {
String sortQuery = searchCriteria.getSortQuery();
if (StringUtils.isBlank(sortQuery)) {
sortQuery = defaultSort;
}
if (StringUtils.isNotBlank(sortQuery)) {
String[] sortFields = sortQuery.split(",");
List<String> sortableFieldTypes = getSortableFieldTypes();
for (String sortField : sortFields) {
String[] sortFieldsSegments = sortField.split(" ");
String requestedSortFieldName = sortFieldsSegments[0];
ORDER order = getSortOrder(sortFieldsSegments, sortQuery);
ExtensionResultStatusType result = searchExtensionManager.getProxy().attachSortField(query, requestedSortFieldName, order);
if (!ExtensionResultStatusType.NOT_HANDLED.equals(result)) {
// if an index field was not found, or the extension handler handled attaching the sort field, move to the next field
continue;
}
List<IndexFieldType> fieldTypes = indexFieldDao.getIndexFieldTypesByAbbreviation(requestedSortFieldName);
// Used to determine if, by looping through the index field types managed in the database, we actually
// attach the sort field that is being requested. If we do, then we shouldn't manually add the requested
// sort field ourselves but if not, we should
boolean requestedSortFieldAdded = false;
// and some not give a preference to NOT tokenized fields, and remove tokenized.
// In case you have tokenized only just add them all
List<SortClause> sortClauses = new ArrayList<>();
boolean foundNotTokenizedField = false;
// this sorts by them all
for (IndexFieldType fieldType : fieldTypes) {
String field = getPropertyNameForIndexField(fieldType.getIndexField(), fieldType.getFieldType());
// be checked
if (fieldType.getIndexField().getField().getAbbreviation().equals(requestedSortFieldName)) {
requestedSortFieldAdded = true;
}
SortClause sortClause = new SortClause(field, order);
if (sortableFieldTypes.contains(fieldType.getFieldType().getType())) {
if (!sortClauses.isEmpty() && !foundNotTokenizedField) {
sortClauses.clear();
}
sortClauses.add(sortClause);
foundNotTokenizedField = true;
} else if (!foundNotTokenizedField) {
sortClauses.add(sortClause);
}
}
if (!foundNotTokenizedField) {
LOG.warn(String.format("Sorting on a tokenized field, this could have adverse effects on the ordering of results. " + "Add a field type for this field from the following list to ensure proper result ordering: [%s]", StringUtils.join(sortableFieldTypes, ", ")));
}
if (!sortClauses.isEmpty()) {
for (SortClause sortClause : sortClauses) {
query.addSort(sortClause);
}
}
// field anyway since we're trusting that the field was actually added to the index by some programmatic means
if (!requestedSortFieldAdded) {
query.addSort(new SortClause(requestedSortFieldName, order));
}
}
}
}
use of org.broadleafcommerce.common.extension.ExtensionResultStatusType in project BroadleafCommerce by BroadleafCommerce.
the class SolrHelperServiceImpl method getIndexableId.
@Override
public Long getIndexableId(Indexable indexable) {
Long[] returnId = new Long[1];
ExtensionResultStatusType result = indexExtensionManager.getProxy().getIndexableId(indexable, returnId);
if (result.equals(ExtensionResultStatusType.HANDLED)) {
return returnId[0];
}
return indexable.getId();
}
use of org.broadleafcommerce.common.extension.ExtensionResultStatusType in project BroadleafCommerce by BroadleafCommerce.
the class SolrSearchServiceImpl method getCategoryFacets.
@Override
public List<SearchFacetDTO> getCategoryFacets(Category category) {
List<SearchFacet> searchFacets = new ArrayList<>();
ExtensionResultStatusType status = extensionManager.getProxy().getCategorySearchFacets(category, searchFacets);
if (Objects.equals(ExtensionResultStatusType.NOT_HANDLED, status)) {
List<CategorySearchFacet> categorySearchFacets = category.getCumulativeSearchFacets();
for (CategorySearchFacet categorySearchFacet : categorySearchFacets) {
searchFacets.add(categorySearchFacet.getSearchFacet());
}
}
return buildSearchFacetDTOs(searchFacets);
}
Aggregations