@Override public <E extends Element> Iterator<E> search(SearchQuery<E> uniQuery) { Set<? extends DocumentSchema<E>> schemas = getSchemas(uniQuery.getReturnType()) .stream().filter(schema -> this.traversalFilter.filter(schema, uniQuery.getTraversal())) .map(schema -> ((DocumentSchema<E>) schema)) .collect(Collectors.toSet()); Map<DocumentSchema<E>, QueryBuilder> searches = schemas.stream() .collect(new SearchCollector<>((schema) -> schema.getSearch(uniQuery))); return search(uniQuery, searches); }
@Override public <E extends Element> Iterator<E> search(SearchQuery<E> uniQuery) { RestCollector<RestSchema<E>, BaseRequest, E> collector = new RestCollector<>(schema -> schema.getSearch(uniQuery), (schema, result) -> schema.parseResults(result, uniQuery)); Set<? extends RestSchema<E>> schemas = getSchemas(uniQuery.getReturnType()); Map<RestSchema<E>, BaseRequest> collect = schemas.stream() .filter(schema -> this.traversalFilter.filter(schema,uniQuery.getTraversal())).collect(collector); return search(uniQuery, collect, collector); }
@Override public <E extends Element> Iterator<E> search(SearchQuery<E> uniQuery) { SelectCollector<JdbcSchema<E>, Select, E> collector = new SelectCollector<>( schema -> schema.getSearch(uniQuery, schema.toPredicates(uniQuery.getPredicates())), (schema, results) -> schema.parseResults(results, uniQuery) ); Set<? extends JdbcSchema<E>> schemas = this.getSchemas(uniQuery.getReturnType()); Map<JdbcSchema<E>, Select> selects = schemas.stream() .filter(schema -> this.traversalFilter.filter(schema, uniQuery.getTraversal())).collect(collector); return this.search(uniQuery, selects, collector); }