@Override protected void addToMergeList(Map<String, List<FieldRangeCriterion>> criterionsToMerge, FieldRangeCriterion criterionToMerge) { if (!criterionsToMerge.containsKey(criterionToMerge.getField())) { criterionsToMerge.put(criterionToMerge.getField(), new LinkedList<FieldRangeCriterion>()); } criterionsToMerge.get(criterionToMerge.getField()).add(criterionToMerge); }
@Override protected SearchCriterion fieldRangeCriterionHandler(FieldRangeCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { if (scheme.getSpecialFieldTypes().containsKey(criterion.getField())) { String specialFieldType = scheme.getSpecialFieldTypes().get(criterion.getField()); if (specialFieldsTransformers.containsKey(specialFieldType)) { return specialFieldsTransformers.get(specialFieldType).transformFieldRangeCriterion(criterion, hint); } } return criterion; } }
@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; }
/** * Creates the range query.<BR> * * @param criterion * the criterion * @return the single range query */ public static String createRangeQuery(final FieldRangeCriterion criterion) { final String name = criterion.getField(); if (anyEmpty(name)) { return ""; } String from = criterion.getFrom(); String to = criterion.getTo(); // * is treated as no boundary. otherwise escape all all special // symbols. from = "*".equals(from) ? null : Formatter.escapeSpecialSymbols(from); to = "*".equals(to) ? null : Formatter.escapeSpecialSymbols(to); final String value = Formatter.buildRangeQueryValue(from, to, criterion.isInclusive()); final StringBuilder query = new StringBuilder(); return query.append(name).append(":").append(value).toString(); }
@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 String extractFieldHash(SearchCriterion criterion) { if (criterion instanceof FieldCriterion) { return ((FieldCriterion) criterion).getField() + criterion.getOperator().getName(); } else if (criterion instanceof FieldRangeCriterion) { return ((FieldRangeCriterion) criterion).getField(); } else if (criterion instanceof BooleanCriterion) { return "boolean" + extractFieldHash(((BooleanCriterion) criterion).getCriteria().get(0)); } else { return StringUtils.EMPTY; } }
@Override protected FieldRangeCriterion mergeConditions(List<FieldRangeCriterion> rangeCriterions) { if (CollectionUtils.isEmpty(rangeCriterions)) { return null; } String lowerBound = null; String upperBound = null; for (FieldRangeCriterion range : rangeCriterions) { if (range.getFrom() != null && (lowerBound == null || range.getFrom().compareTo(lowerBound) > 0)) { lowerBound = range.getFrom(); } if (range.getTo() != null && (upperBound == null || range.getTo().compareTo(upperBound) < 0)) { upperBound = range.getTo(); } } return new FieldRangeCriterion(rangeCriterions.get(0).getField(), lowerBound, upperBound); }
@Override protected SearchCriterion fieldRangeCriterionHandler(FieldRangeCriterion criterion, SearchScheme scheme, SearchCriterionTransformerHint hint) { List<String> fieldNames = getLanguageFieldName(scheme, criterion.getField()); if(fieldNames.size()>1) { BooleanCriterion result = new BooleanCriterion(); for(String fieldName:fieldNames) { FieldRangeCriterion fieldCriterion = new FieldRangeCriterion(fieldName, criterion.getFrom(), criterion.getTo(), criterion.isInclusive()); result.addCriterion(fieldCriterion, SearchOperator.OR); } return result; }else { String fieldName = fieldNames.get(0); criterion.setField(fieldName); hint.getFieldsUsed().add(fieldName); return criterion; } } /**
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()})); } }
case RANGE: final FieldRangeCriterion fieldRangeCriterion = (FieldRangeCriterion) criterion; criterionQueryType = detectQueryType(fieldRangeCriterion.getField(), fieldRangeCriterion.getFrom() + fieldRangeCriterion.getTo(), schema); break;