public BooleanCriterion fieldConditionsListToBooleanCriterion(List<FieldCondition> conditions, SearchOperator operator) { BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(operator); for (FieldCondition condition : conditions) { SearchCriterion criterion = fieldConditionToFieldCriterion(condition, operator); if (criterion != null) { bc.addCriterion(criterion); } } return bc; }
public SearchCriterion transformConditionsListToSearchCriterion(List<FieldCondition> conditions, SearchOperator mainOperator) { BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(SearchOperator.AND); for (FieldCondition condition : conditions) { if (condition instanceof AdvancedFieldCondition) { bc.addCriterion(advancedFieldConditionToBooleanCriterion((AdvancedFieldCondition)condition, mainOperator)); } else { bc.addCriterion(fieldConditionToFieldCriterion(condition, mainOperator)); } } if (bc.getCriteria().size() == 1) { return bc.getCriteria().get(0); } return bc; }
private AbstractSearchCriterion createBooleanCriterion(final List<SearchCriterionProto> list) { BooleanCriterion booleanCriterion = new BooleanCriterion(); for (SearchCriterionProto searchCriterionProto : list) { SearchCriterion criterion = convertFrom(searchCriterionProto); booleanCriterion.addCriterion(criterion); } return booleanCriterion; }
@Override protected SearchCriterion fieldCriterionHandler(FieldCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (!isFieldUsageAllowed(criterion.getField(), scheme)) { hint.addError(new SearchCriterionError(FieldErrorType.INVALID_FIELD, new Object[] { criterion.getField() })); return new BooleanCriterion(); } if (StringUtils.isBlank(criterion.getValue())) { hint.addError(new SearchCriterionError(FieldErrorType.EMPTY_VALUE, null)); return new BooleanCriterion(); } if (criterion.getValue().length() > CRITERION_VALUE_MAX_LENGTH) { hint.addError(new SearchCriterionError(FieldErrorType.TO_LONG_VALUE, new Object[] { CRITERION_VALUE_MAX_LENGTH })); return new BooleanCriterion(); } SearchCriterionTypeValidator additionalValidator = getValidator(criterion.getField(), scheme); if (additionalValidator != null && !additionalValidator.validateFieldCriterion(criterion, hint)) { return new BooleanCriterion(); } return criterion; }
List<FieldCriterion> multipleFields = new LinkedList<FieldCriterion>(); ListIterator<SearchCriterion> it = criterion.getCriteria().listIterator(); while(it.hasNext()) { SearchCriterion subcriterion = it.next(); BooleanCriterion expandedCondition = expandMultipleField(fieldCriterion, scheme.getMultipleFields().get(fieldCriterion.getField())); if (fieldCriterion.getOperator() == SearchOperator.NOT) { for (SearchCriterion singleExpandedCondition : expandedCondition.getCriteria()) { criterion.getCriteria().add(singleExpandedCondition); expandedCondition.setOperator(SearchOperator.OR); criterion.getCriteria().add(expandedCondition);
@Override protected boolean isCriterionSupported(SearchCriterion criterion) { if (criterion instanceof BooleanCriterion) { for (SearchCriterion subcriterion : ((BooleanCriterion) criterion).getCriteria()) { if (!(subcriterion instanceof FieldCriterion)) { return false; } } return true; } return false; }
List<String> criterionsOrder = new ArrayList<>(); ListIterator<SearchCriterion> it = criterion.getCriteria().listIterator(); while (it.hasNext()) { SearchCriterion subcriterion = it.next(); T mergedCondition = mergeConditions(entry.getValue()); if (mergedCondition != null) { ((BooleanCriterion) criterion).getCriteria().add(mergedCondition); Collections.sort(((BooleanCriterion) criterion).getCriteria(), new ListPositionBasedCriterionComparator<SearchCriterion>(criterionsOrder)); if (criterion.getCriteria().size() == 1) { if (criterion.getOperator() == SearchOperator.OR) { criterion.getCriteria().get(0).setOperator(SearchOperator.OR); return criterion.getCriteria().get(0);
private BooleanCriterion disjunction(String query, String... fieldNames) { BooleanCriterion result = new BooleanCriterion(); for (String fName : fieldNames) { result.addCriterion(fieldCriterion(fName, query), SearchOperator.OR); } return result; }
@Override protected SearchCriterion fieldRangeCriterionHandler(FieldRangeCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (!isFieldUsageAllowed(criterion.getField(), scheme)) { hint.addError(new SearchCriterionError(FieldErrorType.INVALID_FIELD, new Object[] { criterion.getField() })); return new BooleanCriterion(); } if (StringUtils.isBlank(criterion.getFrom()) && StringUtils.isBlank(criterion.getTo())) { hint.addError(new SearchCriterionError(FieldErrorType.EMPTY_VALUE, null)); return new BooleanCriterion(); } final String specialFieldType = scheme.getSpecialFieldTypes().get(criterion.getField()); if(!StringUtils.equals(specialFieldType, "dateType")){ hint.addError(new SearchCriterionError(FieldErrorType.INVALID_RANGE_FIELD, new Object[] { criterion.getField() })); return new BooleanCriterion(); } SearchCriterionTypeValidator additionalValidator = getValidator(criterion.getField(), scheme); if (additionalValidator != null && !additionalValidator.validateFieldRangeCriterion(criterion, hint)) { return new BooleanCriterion(); } return criterion; }
public static boolean isCriterionEmpty(SearchCriterion criterion) { if (criterion instanceof BooleanCriterion) { return ((BooleanCriterion)criterion).getCriteria().isEmpty(); } return criterion == null; } }
public void translateSearchCriterionToFormField(SearchCriterion criterion, List<AdvancedFormFieldCondition> advancedForm, BooleanCriterion parent, SearchScheme scheme) { if (criterion instanceof BooleanCriterion) { BooleanCriterion bc = (BooleanCriterion)criterion; boolean firstChild = true; for (SearchCriterion subcriterion : bc.getCriteria()) { translateSearchCriterionToFormField(subcriterion, advancedForm, bc, scheme); if (firstChild && parent != null && bc.getOperator() == SearchOperator.OR) { advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.OR_OPERATOR); } else if (firstChild && parent != null) { advancedForm.get(advancedForm.size()-1).setOperator(AdvancedFormFieldCondition.AND_OPERATOR); } firstChild = false; } } else if (criterion instanceof FieldCriterion) { FieldCriterion fieldCriterion = (FieldCriterion)criterion; String presentationFieldName = getPresentationFieldName(scheme, fieldCriterion.getField()); advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldCriterion.getOperator(), parent), presentationFieldName, fieldCriterion.getValue())); } else if (criterion instanceof FieldRangeCriterion) { FieldRangeCriterion fieldRangeCriterion = (FieldRangeCriterion)criterion; String presentationFieldName = getPresentationFieldName(scheme, fieldRangeCriterion.getField()); advancedForm.add(new AdvancedFormFieldCondition(translateSearchOperator(fieldRangeCriterion.getOperator(), parent), presentationFieldName, new String[] {fieldRangeCriterion.getFrom(), fieldRangeCriterion.getTo()})); } }
private SearchCriterion domainQueryBuilder(Set<String> emailDomains) { if (emailDomains.size() == 1) { return new FieldCriterion(PeopleIndexFieldConstants.FIELD_EMAIL_DOMAIN, emailDomains.iterator().next()); } else { BooleanCriterion crit = new BooleanCriterion(); crit.setOperator(SearchOperator.OR); for (String domain : emailDomains) { crit.addCriterion(new FieldCriterion(PeopleIndexFieldConstants.FIELD_EMAIL_DOMAIN, domain)); } return crit; } }
public SearchCriterion transformRequestToSearchCriterion(AdvancedSearchRequest request) { SearchOperator mainOperator = getSearchOperator(request.getExpressionsOperator()); BooleanCriterion bc = new BooleanCriterion(); bc.setOperator(SearchOperator.AND); for (Map.Entry<String, AdvancedFieldCondition> conditionEntry : request.getFieldsHierarchy().entrySet()) { if (conditionEntry.getValue().getConditionType().equals(AdvancedFieldConditionType.NORMAL)) { bc.addCriterion(advancedFieldConditionToBooleanCriterion(conditionEntry.getValue(), mainOperator)); } } if (bc.getCriteria().size() == 1) { return bc.getCriteria().get(0); } return bc; }
protected void addFieldCriterionsDisjunction(List<FieldQuery> fieldQueries) { BooleanCriterion disjunctionCriterion = new BooleanCriterion(); for (FieldQuery fieldQuery : fieldQueries) { if(StringUtils.isNotBlank(fieldQuery.getQuery())) { disjunctionCriterion.addCriterion(fieldCriterion(fieldQuery.getFieldName(), fieldQuery.getQuery().trim()), SearchOperator.OR); } } criteria.add(disjunctionCriterion); }
@Override protected SearchCriterion fieldRangeCriterionHandler(FieldRangeCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (scheme.getMultipleFields().containsKey(criterion.getField())) { hint.addError(new SearchCriterionError(FieldErrorType.NOT_SUPPORTED, new String[] { criterion.getType().name(), criterion.getField()})); return new BooleanCriterion(); } return criterion; }
@Override protected SearchCriterion booleanCriterionHandler(BooleanCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { ListIterator<SearchCriterion> it = criterion.getCriteria().listIterator(); while(it.hasNext()) { SearchCriterion subcriterion = it.next(); it.set(transform(subcriterion, scheme, hint)); } return criterion; }
protected SearchCriterion buildAuthorYearCriterion(PublicationMetadata template) { if (template.getYear() == null || template.getAuthors() == null || template.getAuthors().isEmpty()) return null; BooleanCriterion criterion = new BooleanCriterion(); criterion.setOperator(SearchOperator.AND); criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_YEAR, template.getYear())); for (PublicationAuthor author : template.getAuthors()) if (author.getSurname() != null) { criterion.addCriterion(new FieldCriterion(MetadataIndexConstants.F_AUTHOR_SURNAME, author.getSurname())); } return criterion; }
@Override protected BooleanCriterion mergeConditions(List<BooleanCriterion> criterions) { if (CollectionUtils.isEmpty(criterions)) { return null; } BooleanCriterion result = new BooleanCriterion(); result.setOperator(criterions.get(0).getOperator()); Map<String, List<FieldCriterion>> subCriterionsToMerge = new HashMap<>(); List<String> criterionsOrder = new ArrayList<>(); for (BooleanCriterion criterion : criterions) { for(SearchCriterion subCriterion : criterion.getCriteria()){ fieldCriterionMerger.addToMergeList(subCriterionsToMerge, (FieldCriterion) subCriterion); criterionsOrder.add(ListPositionBasedCriterionComparator.extractFieldHash(subCriterion)); } } for (Map.Entry<String, List<FieldCriterion>> entry : subCriterionsToMerge.entrySet()) { FieldCriterion mergedCondition = fieldCriterionMerger.mergeConditions(entry.getValue()); if (mergedCondition != null) { result.getCriteria().add(mergedCondition); } } if (subCriterionsToMerge.size() > 0 && criterionsOrder.size() > 1) { Collections.sort(result.getCriteria(), new ListPositionBasedCriterionComparator<SearchCriterion>(criterionsOrder)); } return result; }
private BooleanCriterion expandMultipleField(FieldCriterion criterion, Set<String> multipleExpandFieldNames) { BooleanCriterion fieldCriterion = new BooleanCriterion(); String value = criterion.getValue(); for (String field : multipleExpandFieldNames) { fieldCriterion.addCriterion(new FieldCriterion(field, value), (criterion.getOperator() == SearchOperator.NOT) ? SearchOperator.NOT :SearchOperator.OR); } return fieldCriterion; }
@Override protected SearchCriterion booleanCriterionHandler(BooleanCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { ListIterator<SearchCriterion> it = criterion.getCriteria().listIterator(); while(it.hasNext()) { SearchCriterion subcriterion = it.next(); it.set(transform(subcriterion, scheme, hint)); } return criterion; }