private <P extends Path<?>> P assertRoot(P p) { if (!p.getRoot().equals(p)) { throw new IllegalArgumentException(p + " is not a root path"); } return p; }
public PathMetadata(@Nullable Path<?> parent, Object element, PathType type) { this.parent = parent; this.element = element; this.pathType = type; this.rootPath = parent != null ? parent.getRoot() : null; this.hashCode = 31 * element.hashCode() + pathType.name().hashCode(); }
/** * Wrap a Querydsl predicate into a Guava predicate * * @param predicate predicate to wrapped * @return Guava predicate */ public static <T> com.google.common.base.Predicate<T> wrap(Predicate predicate) { Path<?> path = predicate.accept(PathExtractor.DEFAULT, null); if (path != null) { final Evaluator<Boolean> ev = createEvaluator(path.getRoot(), predicate); return new com.google.common.base.Predicate<T>() { @Override public boolean apply(T input) { return ev.evaluate(input); } }; } else { throw new IllegalArgumentException("No path in " + predicate); } }
/** * Wrap a Querydsl expression into a Guava function * * @param projection projection to wrap * @return Guava function */ public static <F,T> Function<F,T> wrap(Expression<T> projection) { Path<?> path = projection.accept(PathExtractor.DEFAULT, null); if (path != null) { final Evaluator<T> ev = createEvaluator(path.getRoot(), projection); return new Function<F,T>() { @Override public T apply(F input) { return ev.evaluate(input); } }; } else { throw new IllegalArgumentException("No path in " + projection); } }
@SuppressWarnings("unchecked") @Nullable protected Predicate createJoinFilter(QueryMetadata metadata) { Multimap<Expression<?>, Predicate> predicates = HashMultimap.create(); List<JoinExpression> joins = metadata.getJoins(); for (int i = joins.size() - 1; i >= 0; i--) { JoinExpression join = joins.get(i); Path<?> source = (Path) ((Operation<?>) join.getTarget()).getArg(0); Path<?> target = (Path) ((Operation<?>) join.getTarget()).getArg(1); Collection<Predicate> extraFilters = predicates.get(target.getRoot()); Predicate filter = ExpressionUtils.allOf(join.getCondition(), allOf(extraFilters)); List<? extends Object> ids = getIds(target.getType(), filter); if (ids.isEmpty()) { throw new NoResults(); } Path<?> path = ExpressionUtils.path(String.class, source, "$id"); predicates.put(source.getRoot(), ExpressionUtils.in((Path<Object>) path, ids)); } Path<?> source = (Path) ((Operation) joins.get(0).getTarget()).getArg(0); return allOf(predicates.get(source.getRoot())); }
@SuppressWarnings("unchecked") @Nullable protected Predicate createJoinFilter(QueryMetadata metadata) { LinkedMultiValueMap<Expression<?>, Predicate> predicates = new LinkedMultiValueMap<>(); List<JoinExpression> joins = metadata.getJoins(); for (int i = joins.size() - 1; i >= 0; i--) { JoinExpression join = joins.get(i); Path<?> source = (Path) ((Operation<?>) join.getTarget()).getArg(0); Path<?> target = (Path) ((Operation<?>) join.getTarget()).getArg(1); Collection<Predicate> extraFilters = predicates.get(target.getRoot()); Predicate filter = ExpressionUtils.allOf(join.getCondition(), allOf(extraFilters)); List<? extends Object> ids = getIds(target.getType(), filter); if (ids.isEmpty()) { return ExpressionUtils.predicate(QuerydslMongoOps.NO_MATCH, source); } Path<?> path = ExpressionUtils.path(String.class, source, "$id"); predicates.add(source.getRoot(), ExpressionUtils.in((Path<Object>) path, ids)); } Path<?> source = (Path) ((Operation) joins.get(0).getTarget()).getArg(0); return allOf(predicates.get(source.getRoot())); }
Path<?> source = (Path) ((Operation<?>) join.getTarget()).getArg(0); Path<?> target = (Path) ((Operation<?>) join.getTarget()).getArg(1); Collection<Mono<Predicate>> extraFilters = predicates.get(target.getRoot()); }); predicates.add(source.getRoot(), predicate); return allOf(predicates.get(source.getRoot())).onErrorResume(NoMatchException.class, e -> Mono.just(ExpressionUtils.predicate(QuerydslMongoOps.NO_MATCH, e.source)));
@SuppressWarnings("unchecked") @Test public void various() { List<Path<?>> paths = new ArrayList<Path<?>>(); paths.add(new ArrayPath(String[].class, "p")); paths.add(new BeanPath(Object.class, "p")); paths.add(new BooleanPath("p")); paths.add(new CollectionPath(String.class, StringPath.class, "p")); paths.add(new ComparablePath(String.class,"p")); paths.add(new DatePath(Date.class,"p")); paths.add(new DateTimePath(Date.class,"p")); paths.add(new EnumPath(ExampleEnum.class,"p")); paths.add(new ListPath(String.class, StringPath.class, "p")); paths.add(new MapPath(String.class, String.class, StringPath.class, "p")); paths.add(new NumberPath(Integer.class,"p")); paths.add(new SetPath(String.class, StringPath.class, "p")); paths.add(new SimplePath(String.class,"p")); paths.add(new StringPath("p")); paths.add(new TimePath(Time.class,"p")); for (Path<?> path : paths) { Path other = ExpressionUtils.path(path.getType(), "p"); assertEquals(path.toString(), path.accept(ToStringVisitor.DEFAULT, null)); assertEquals(path.hashCode(), other.hashCode()); assertEquals(path, other); assertNotNull(path.getMetadata()); assertNotNull(path.getType()); assertEquals(path, path.getRoot()); } }
@SuppressWarnings("unchecked") @Test public void various_properties() { Path<?> parent = ExpressionUtils.path(Object.class, "parent"); List<Path<?>> paths = new ArrayList<Path<?>>(); paths.add(new ArrayPath(String[].class, parent, "p")); paths.add(new BeanPath(Object.class, parent, "p")); paths.add(new BooleanPath(parent, "p")); paths.add(new CollectionPath(String.class, StringPath.class, parent, "p")); paths.add(new ComparablePath(String.class, parent, "p")); paths.add(new DatePath(Date.class, parent, "p")); paths.add(new DateTimePath(Date.class, parent, "p")); paths.add(new EnumPath(ExampleEnum.class, parent, "p")); paths.add(new ListPath(String.class, StringPath.class, parent, "p")); paths.add(new MapPath(String.class, String.class, StringPath.class, parent, "p")); paths.add(new NumberPath(Integer.class, parent, "p")); paths.add(new SetPath(String.class, StringPath.class, parent, "p")); paths.add(new SimplePath(String.class, parent, "p")); paths.add(new StringPath(parent, "p")); paths.add(new TimePath(Time.class, parent, "p")); for (Path<?> path : paths) { Path other = ExpressionUtils.path(path.getType(), PathMetadataFactory.forProperty(parent, "p")); assertEquals(path.toString(), path.accept(ToStringVisitor.DEFAULT, Templates.DEFAULT)); assertEquals(path.hashCode(), other.hashCode()); assertEquals(path, other); assertNotNull(path.getMetadata()); assertNotNull(path.getType()); assertEquals(parent, path.getRoot()); } }
@SuppressWarnings("unchecked") @Nullable protected Predicate createJoinFilter(QueryMetadata metadata) { LinkedMultiValueMap<Expression<?>, Predicate> predicates = new LinkedMultiValueMap<>(); List<JoinExpression> joins = metadata.getJoins(); for (int i = joins.size() - 1; i >= 0; i--) { JoinExpression join = joins.get(i); Path<?> source = (Path) ((Operation<?>) join.getTarget()).getArg(0); Path<?> target = (Path) ((Operation<?>) join.getTarget()).getArg(1); Collection<Predicate> extraFilters = predicates.get(target.getRoot()); Predicate filter = ExpressionUtils.allOf(join.getCondition(), allOf(extraFilters)); List<? extends Object> ids = getIds(target.getType(), filter); if (ids.isEmpty()) { return ExpressionUtils.predicate(QuerydslMongoOps.NO_MATCH, source); } Path<?> path = ExpressionUtils.path(String.class, source, "$id"); predicates.add(source.getRoot(), ExpressionUtils.in((Path<Object>) path, ids)); } Path<?> source = (Path) ((Operation) joins.get(0).getTarget()).getArg(0); return allOf(predicates.get(source.getRoot())); }
private <P extends Path<?>> P assertRoot(P p) { if (!p.getRoot().equals(p)) { throw new IllegalArgumentException(p + " is not a root path"); } return p; }
/** * Recursively creates a dot-separated path for the property path. * * @param path must not be {@literal null}. * @return */ private static String preparePropertyPath(Path<?> path) { Path<?> root = path.getRoot(); return root == null || path.equals(root) ? path.toString() : path.toString().substring(root.toString().length() + 1); } }
public PathMetadata(@Nullable Path<?> parent, Object element, PathType type) { this.parent = parent; this.element = element; this.pathType = type; this.rootPath = parent != null ? parent.getRoot() : null; this.hashCode = 31 * element.hashCode() + pathType.name().hashCode(); }
/** * Wrap a Querydsl expression into a Guava function * * @param projection projection to wrap * @return Guava function */ public static <F,T> Function<F,T> wrap(Expression<T> projection) { Path<?> path = projection.accept(PathExtractor.DEFAULT, null); if (path != null) { final Evaluator<T> ev = createEvaluator(path.getRoot(), projection); return new Function<F,T>() { @Override public T apply(F input) { return ev.evaluate(input); } }; } else { throw new IllegalArgumentException("No path in " + projection); } }
public static Property property( Path<?> entityPath ) { return identifier( entityPath.getRoot().toString() ).property( entityPath.getMetadata().getElement() .toString() ); }
public static NumericExpression number( Path<?> entityPath ) { return identifier( entityPath.getRoot().toString() ).number( entityPath.getMetadata().getElement() .toString() ); }
public static StringExpression string( Path<?> entityPath ) { return identifier( entityPath.getRoot().toString() ).string( entityPath.getMetadata().getElement() .toString() ); }
/** * Constructor * @param path Property path (required not null) */ public DefaultQueryDslProperty(Path<T> path) { super(pathName(path), (path != null) ? path.getType() : null); ObjectUtils.argumentNotNull(path, "Path must be not null"); this.path = path; // set parent if (path != null && path.getRoot() != null) { parent(JpaTarget.of(path.getRoot().getType())); } }