@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) { if(uniQuery.getReturnType() != Vertex.class) return EmptyIterator.instance(); PredicatesHolder predicates = uniQuery.getPredicates(); List<? extends VirtualVertexSchema> filteredSchemas = vertexSchemas.stream() .filter(schema -> !schema.toPredicates(predicates).getClause().equals(PredicatesHolder.Clause.Abort)).collect(Collectors.toList()); Optional<HasContainer> ids = predicates.getPredicates().stream().filter(has -> has.getKey().equals(T.id.getAccessor())).findFirst(); Optional<HasContainer> labels = predicates.getPredicates().stream().filter(has -> has.getKey().equals(T.label.getAccessor())).findFirst(); if (!ids.isPresent() || !labels.isPresent()){ return EmptyIterator.instance(); } ArrayList<Map<String, Object>> elements = new ArrayList<>(); Object idObject = ids.get().getValue(); Collection<Object> idsCol = idObject instanceof Collection ? ((Collection) idObject) : Collections.singleton(idObject); Object labelObject = labels.get().getValue(); Collection<Object> labelCol = labelObject instanceof Collection ? ((Collection) labelObject) : Collections.singleton(labelObject); idsCol.forEach(id -> labelCol.forEach(label -> elements.add(createElement(id, label.toString())))); return (Iterator<E>) elements.stream().flatMap(fields -> filteredSchemas.stream().flatMap(schema -> Stream.of(schema.createElement(fields)))).filter(v -> v != null).iterator(); } }
@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); }