@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 SearchCriterion transformFieldCriterion(FieldCriterion criterion, SearchCriterionTransformerHint hint) { String dateString = criterion.getValue(); FieldRangeCriterion dateRangeCriterion = new FieldRangeCriterion(criterion.getField()); dateRangeCriterion.setOperator(criterion.getOperator()); dateRangeCriterion.setFrom(appendMissingDateFormat(dateString, false)); dateRangeCriterion.setTo(appendMissingDateFormat(dateString, true)); return dateRangeCriterion; }
@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); }
private FulltextSearchQuery createIndexQuery(final String observedUserId, String userId, Date fromDate, Date toDate) { final List<FieldRequest> fieldRequestList = new ArrayList<FieldRequest>(); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_EXID)); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP)); final ResultsFormat resultsFormat = new ResultsFormat(fieldRequestList); final List<SearchCriterion> fieldCriterionList = new ArrayList<SearchCriterion>(); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_USER_UID_CREATOR, observedUserId, SearchOperator.AND)); String fromDateString = IndexUtils.dateToString(new DateTime(fromDate)); String toDateString = IndexUtils.dateToString(new DateTime(toDate)); fieldCriterionList.add(new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP, fromDateString, toDateString)); final List<Order> orderList = new ArrayList<Order>(); orderList.add(new Order(PublicationIndexFieldConstants.FIELD_CREATED_BY_USER_TIMESTAMP)); orderList.add(Order.relevanceOrder()); final FulltextSearchQuery searchQuery = new FulltextSearchQuery(0, getAggregationNumberLimit()+1, resultsFormat, orderList, fieldCriterionList); return searchQuery; }
/** * 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 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()})); } }
FieldRangeCriterion rangeCriterion = new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_INDEXED_EXTERNAL_IDENTIFIERS + IndexFieldConstants.SEP + PublicationIndexFieldConstants.ORGIN_CURRENT + IndexFieldConstants.SEP + "bwmeta1.id-class.ISSN", "*", "*"); rangeCriterion.setOperator(SearchOperator.NOT); fieldCriterionList.add(rangeCriterion);
@Override public boolean validateFieldRangeCriterion(FieldRangeCriterion criterion, SearchCriterionTransformerHint hint) { String from = criterion.getFrom(); String to = criterion.getTo(); if ((StringUtils.isBlank(from) || isDate(from, hint.isLenientCheck())) && (StringUtils.isBlank(to) || isDate(to, hint.isLenientCheck()))) { return true; } hint.addError(new SearchCriterionError(FieldErrorType.INVALID_DATE_FORMAT, new String[] { from, to })); return false; }
@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 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); }
private FulltextSearchQuery createIndexQuery(final String publicationId, String userId, Date fromDate, Date toDate) { final List<FieldRequest> fieldRequestList = new ArrayList<FieldRequest>(); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_USER)); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP)); final ResultsFormat resultsFormat = new ResultsFormat(fieldRequestList); final List<SearchCriterion> fieldCriterionList = new ArrayList<SearchCriterion>(); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_EXID, publicationId, SearchOperator.AND)); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_USER, userId, SearchOperator.NOT)); String fromDateString = IndexUtils.dateToString(new DateTime(fromDate)); String toDateString = IndexUtils.dateToString(new DateTime(toDate)); fieldCriterionList.add(new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP, fromDateString, toDateString)); final List<Order> orderList = new ArrayList<Order>(); orderList.add(new Order(PublicationIndexFieldConstants.FIELD_CONTENT_LAST_MODIFICATION_TIMESTAMP)); orderList.add(Order.relevanceOrder()); final FulltextSearchQuery searchQuery = new FulltextSearchQuery(0, 1, resultsFormat, orderList, fieldCriterionList); return searchQuery; }
public SearchCriterion transformFieldRangeCriterion(FieldRangeCriterion criterion, SearchCriterionTransformerHint hint) { String from = criterion.getFrom(); if (from != null) { criterion.setFrom(appendMissingDateFormat(from, false)); } String to = criterion.getTo(); if (to != null) { criterion.setTo(appendMissingDateFormat(to, true)); } return criterion; }
@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; } }
private FulltextSearchQuery createIndexQuery(final String journalId, String userId, Date fromDate, Date toDate) { final List<FieldRequest> fieldRequestList = new ArrayList<FieldRequest>(); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_EXID)); fieldRequestList.add(new FieldRequest(PublicationIndexFieldConstants.FIELD_DATE + SEP + "creationTimestamp")); final ResultsFormat resultsFormat = new ResultsFormat(fieldRequestList); final List<SearchCriterion> fieldCriterionList = new ArrayList<SearchCriterion>(); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_ANCESTOR_ID + SEP + HierarchyWithLevelIds.EXT_LEVEL_JOURNAL_JOURNAL, journalId, SearchOperator.AND)); fieldCriterionList.add(new FieldCriterion(PublicationIndexFieldConstants.FIELD_USER_UID_CREATOR, userId, SearchOperator.NOT)); String fromDateString = IndexUtils.dateToString(new DateTime(fromDate)); String toDateString = IndexUtils.dateToString(new DateTime(toDate)); fieldCriterionList.add(new FieldRangeCriterion(PublicationIndexFieldConstants.FIELD_DATE + SEP + "creationTimestamp", fromDateString, toDateString)); final List<Order> orderList = new ArrayList<Order>(); orderList.add(new Order(PublicationIndexFieldConstants.FIELD_DATE + SEP + "creationTimestamp")); orderList.add(Order.relevanceOrder()); final FulltextSearchQuery searchQuery = new FulltextSearchQuery(0, getAggregationNumberLimit()+1, resultsFormat, orderList, fieldCriterionList); return searchQuery; }
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; } }
private FulltextSearchQuery prepareSearchQuery(final List<SearchCriterion> fieldCriterionList) { final SearchCriterion fieldRangeCriterion = new FieldRangeCriterion(FIELD_DESCRIPTION, ALL, ALL); fieldRangeCriterion.setOperator(SearchOperator.AND); fieldCriterionList.add(fieldRangeCriterion); final List<Order> orderList = new ArrayList<Order>(); orderList.add(Order.relevanceOrder()); final ResultsFormat resultsFormat = new ResultsFormat(new FieldRequest(FIELD_EXID, true)); return new FulltextSearchQuery(0, searchedElementSize, resultsFormat, orderList, fieldCriterionList); }