public MultipleFilterDialect(EntityDictionary dictionary) { DefaultFilterDialect defaultDialect = new DefaultFilterDialect(dictionary); joinDialects = new ArrayList<>(); joinDialects.add(defaultDialect); subqueryDialects = new ArrayList<>(); subqueryDialects.add(defaultDialect); }
@Override public Map<String, FilterExpression> parseTypedExpression(String path, MultivaluedMap<String, String> filterParams) throws ParseException { Map<String, FilterExpression> expressionMap = new HashMap<>(); List<FilterPredicate> filterPredicates = extractPredicates(filterParams); for (FilterPredicate filterPredicate : filterPredicates) { if (FilterPredicate.toManyInPath(dictionary, filterPredicate.getPath())) { throw new ParseException("Invalid toMany join: " + filterPredicate); } String entityType = dictionary.getJsonAliasFor(filterPredicate.getEntityType()); FilterExpression filterExpression = expressionMap.get(entityType); if (filterExpression != null) { expressionMap.put(entityType, new AndFilterExpression(filterExpression, filterPredicate)); } else { expressionMap.put(entityType, filterPredicate); } } return expressionMap; }
: Operator.fromString(matcher.group(3)); Path path = getPath(keyParts); List<Path.PathElement> elements = path.getPathElements(); Path.PathElement last = elements.get(elements.size() - 1);
@Override public Map<String, FilterExpression> parseTypedExpression(String path, MultivaluedMap<String, String> filterParams) throws ParseException { Map<String, FilterExpression> expressionMap = new HashMap<>(); List<FilterPredicate> filterPredicates = extractPredicates(filterParams); for (FilterPredicate filterPredicate : filterPredicates) { if (FilterPredicate.toManyInPath(dictionary, filterPredicate.getPath())) { throw new ParseException("Invalid toMany join: " + filterPredicate); } String entityType = dictionary.getJsonAliasFor(filterPredicate.getEntityType()); FilterExpression filterExpression = expressionMap.get(entityType); if (filterExpression != null) { expressionMap.put(entityType, new AndFilterExpression(filterExpression, filterPredicate)); } else { expressionMap.put(entityType, filterPredicate); } } return expressionMap; }
: Operator.fromString(matcher.group(3)); Path path = getPath(keyParts); List<Path.PathElement> elements = path.getPathElements(); Path.PathElement last = elements.get(elements.size() - 1);
public MultipleFilterDialect(EntityDictionary dictionary) { DefaultFilterDialect defaultDialect = new DefaultFilterDialect(dictionary); joinDialects = new ArrayList<>(); joinDialects.add(defaultDialect); subqueryDialects = new ArrayList<>(); subqueryDialects.add(defaultDialect); }
@Override public FilterExpression parseGlobalExpression(String path, MultivaluedMap<String, String> filterParams) throws ParseException { List<FilterPredicate> filterPredicates; filterPredicates = extractPredicates(filterParams); /* Extract the first collection in the URL */ String normalizedPath = JsonApiParser.normalizePath(path); String[] pathComponents = normalizedPath.split("/"); String firstPathComponent = ""; if (pathComponents.length > 0) { firstPathComponent = pathComponents[0]; } /* Comma separated filter parameters are joined with logical AND. */ FilterExpression joinedExpression = null; for (FilterPredicate filterPredicate : filterPredicates) { Class firstClass = filterPredicate.getPath().getPathElements().get(0).getType(); /* The first type in the predicate must match the first collection in the URL */ if (!dictionary.getJsonAliasFor(firstClass).equals(firstPathComponent)) { throw new ParseException(String.format("Invalid predicate: %s", filterPredicate)); } if (joinedExpression == null) { joinedExpression = filterPredicate; } else { joinedExpression = new AndFilterExpression(joinedExpression, filterPredicate); } } return joinedExpression; }
public ElideSettings build() { if (joinFilterDialects.isEmpty()) { joinFilterDialects.add(new DefaultFilterDialect(entityDictionary)); } if (subqueryFilterDialects.isEmpty()) { subqueryFilterDialects.add(new DefaultFilterDialect(entityDictionary)); } return new ElideSettings( auditLogger, dataStore, entityDictionary, jsonApiMapper, permissionExecutorFunction, joinFilterDialects, subqueryFilterDialects, defaultMaxPageSize, defaultPageSize, useFilterExpressions, updateStatusCode, returnErrorObjects, serdes); }
@Override public FilterExpression parseGlobalExpression(String path, MultivaluedMap<String, String> filterParams) throws ParseException { List<FilterPredicate> filterPredicates; filterPredicates = extractPredicates(filterParams); /* Extract the first collection in the URL */ String normalizedPath = JsonApiParser.normalizePath(path); String[] pathComponents = normalizedPath.split("/"); String firstPathComponent = ""; if (pathComponents.length > 0) { firstPathComponent = pathComponents[0]; } /* Comma separated filter parameters are joined with logical AND. */ FilterExpression joinedExpression = null; for (FilterPredicate filterPredicate : filterPredicates) { Class firstClass = filterPredicate.getPath().getPathElements().get(0).getType(); /* The first type in the predicate must match the first collection in the URL */ if (!dictionary.getJsonAliasFor(firstClass).equals(firstPathComponent)) { throw new ParseException(String.format("Invalid predicate: %s", filterPredicate)); } if (joinedExpression == null) { joinedExpression = filterPredicate; } else { joinedExpression = new AndFilterExpression(joinedExpression, filterPredicate); } } return joinedExpression; }
public ElideSettings build() { if (joinFilterDialects.isEmpty()) { joinFilterDialects.add(new DefaultFilterDialect(entityDictionary)); } if (subqueryFilterDialects.isEmpty()) { subqueryFilterDialects.add(new DefaultFilterDialect(entityDictionary)); } return new ElideSettings( auditLogger, dataStore, entityDictionary, jsonApiMapper, permissionExecutorFunction, joinFilterDialects, subqueryFilterDialects, defaultMaxPageSize, defaultPageSize, useFilterExpressions, updateStatusCode, returnErrorObjects, serdes); }
@Override public Elide provide() { EntityDictionary dictionary = new EntityDictionary(new HashMap<>()); DefaultFilterDialect defaultFilterStrategy = new DefaultFilterDialect(dictionary); RSQLFilterDialect rsqlFilterStrategy = new RSQLFilterDialect(dictionary); MultipleFilterDialect multipleFilterStrategy = new MultipleFilterDialect( Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy), Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy) ); return new Elide(new ElideSettingsBuilder(AbstractIntegrationTestInitializer.getDatabaseManager()) .withAuditLogger(auditLogger) .withJoinFilterDialect(multipleFilterStrategy) .withSubqueryFilterDialect(multipleFilterStrategy) .withEntityDictionary(dictionary) .withUpdate200Status() .build()); }
@Override public Elide provide() { EntityDictionary dictionary = new EntityDictionary(TestCheckMappings.MAPPINGS); DefaultFilterDialect defaultFilterStrategy = new DefaultFilterDialect(dictionary); RSQLFilterDialect rsqlFilterStrategy = new RSQLFilterDialect(dictionary); MultipleFilterDialect multipleFilterStrategy = new MultipleFilterDialect( Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy), Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy) ); return new Elide(new ElideSettingsBuilder(AbstractIntegrationTestInitializer.getDatabaseManager()) .withAuditLogger(auditLogger) .withJoinFilterDialect(multipleFilterStrategy) .withSubqueryFilterDialect(multipleFilterStrategy) .withEntityDictionary(dictionary) .build()); }
@Override public Elide provide() { EntityDictionary dictionary = new EntityDictionary(TestCheckMappings.MAPPINGS); DefaultFilterDialect defaultFilterStrategy = new DefaultFilterDialect(dictionary); RSQLFilterDialect rsqlFilterStrategy = new RSQLFilterDialect(dictionary); MultipleFilterDialect multipleFilterStrategy = new MultipleFilterDialect( Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy), Arrays.asList(rsqlFilterStrategy, defaultFilterStrategy) ); return new Elide(new ElideSettingsBuilder(AbstractIntegrationTestInitializer.getDatabaseManager()) .withAuditLogger(auditLogger) .withJoinFilterDialect(multipleFilterStrategy) .withSubqueryFilterDialect(multipleFilterStrategy) .withEntityDictionary(dictionary) .withReturnErrorObjects(true) .build()); }