@Override public long execute() { int rv = 0; for (T match : query.fetch()) { BeanMap beanMap = new BeanMap(match); for (Map.Entry<Path<?>,Object> entry : paths.entrySet()) { // TODO : support deep updates as well String propertyName = entry.getKey().getMetadata().getName(); beanMap.put(propertyName, entry.getValue()); } rv++; } return rv; }
private static ImmutableMap<String,Expression<?>> createBindings(Expression<?>... args) { ImmutableMap.Builder<String, Expression<?>> rv = ImmutableMap.builder(); for (Expression<?> expr : args) { if (expr instanceof Path<?>) { Path<?> path = (Path<?>) expr; rv.put(path.getMetadata().getName(), expr); } else if (expr instanceof Operation<?>) { Operation<?> operation = (Operation<?>) expr; if (operation.getOperator() == Ops.ALIAS && operation.getArg(1) instanceof Path<?>) { Path<?> path = (Path<?>) operation.getArg(1); if (isCompoundExpression(operation.getArg(0))) { rv.put(path.getMetadata().getName(), operation.getArg(0)); } else { rv.put(path.getMetadata().getName(), operation); } } else { throw new IllegalArgumentException("Unsupported expression " + expr); } } else { throw new IllegalArgumentException("Unsupported expression " + expr); } } return rv.build(); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @param maxEdits must be >= 0 and <= {@link LevenshteinAutomata#MAXIMUM_SUPPORTED_DISTANCE}. * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, int maxEdits) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, maxEdits)); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term)); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @param minimumSimilarity a value between 0 and 1 to set the required similarity * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, float minimumSimilarity) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, minimumSimilarity)); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term)); }
/** * Create a fuzzy query * * @param path * path * @param value * value to match * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term)); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @param minimumSimilarity a value between 0 and 1 to set the required similarity * @param prefixLength length of common (non-fuzzy) prefix * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, float minimumSimilarity, int prefixLength) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, minimumSimilarity, prefixLength)); }
/** * Create a fuzzy query * * @param path path * @param value value to match * @param maxEdits must be >= 0 and <= {@link LevenshteinAutomata#MAXIMUM_SUPPORTED_DISTANCE}. * @param prefixLength length of common (non-fuzzy) prefix * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, int maxEdits, int prefixLength) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, maxEdits, prefixLength)); }
/** * Create a fuzzy query * * @param path * path * @param value * value to match * @param maxEdits * must be >= 0 and <= * {@link LevenshteinAutomata#MAXIMUM_SUPPORTED_DISTANCE}. * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, int maxEdits) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, maxEdits)); }
/** * Create a fuzzy query * * @param path * path * @param value * value to match * @param maxEdits * must be >= 0 and <= * {@link LevenshteinAutomata#MAXIMUM_SUPPORTED_DISTANCE}. * @param prefixLength * length of common (non-fuzzy) prefix * @return condition */ public static BooleanExpression fuzzyLike(Path<String> path, String value, int maxEdits, int prefixLength) { Term term = new Term(path.getMetadata().getName(), value); return new QueryElement(new FuzzyQuery(term, maxEdits, prefixLength)); }
@Nullable private MongoPersistentProperty getPropertyFor(Path<?> path) { Path<?> parent = path.getMetadata().getParent(); if (parent == null || !PATH_TYPES.contains(path.getMetadata().getPathType())) { return null; } MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(parent.getType()); return entity != null ? entity.getPersistentProperty(path.getMetadata().getName()) : null; }
@Override public final AnnotatedElement getAnnotatedElement() { if (annotatedElement == null) { if (metadata.getPathType() == PathType.PROPERTY) { Class<?> beanClass = metadata.getParent().getType(); String propertyName = metadata.getName(); annotatedElement = ReflectionUtils.getAnnotatedElement(beanClass, propertyName, getType()); } else { annotatedElement = getType(); } } return annotatedElement; }
@Override protected String getKeyForPath(Path<?> expr, PathMetadata metadata) { if (!metadata.getPathType().equals(PathType.PROPERTY)) { return super.getKeyForPath(expr, metadata); } Path<?> parent = metadata.getParent(); MongoPersistentEntity<?> entity = mappingContext.getRequiredPersistentEntity(parent.getType()); MongoPersistentProperty property = entity.getPersistentProperty(metadata.getName()); return property == null ? super.getKeyForPath(expr, metadata) : property.getFieldName(); }
public Expression<?> visit(Path<?> expr, @Nullable Void context) { if (expr.getMetadata().isRoot()) { return ExpressionUtils.path(expr.getType(), expr.getMetadata().getName() + "_"); } else { return super.visit(expr, context); } } };
/** * template method, override to customize * * @param path path * @return field name */ protected String toField(Path<?> path) { PathMetadata md = path.getMetadata(); if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); } else { String rv = md.getName(); if (md.getParent() != null) { Path<?> parent = md.getParent(); if (parent.getMetadata().getPathType() != PathType.VARIABLE) { rv = toField(parent) + "." + rv; } } return rv; } }
if (pathType == PathType.PROPERTY) { final Path<?> parent = path.getMetadata().getParent(); final String property = path.getMetadata().getName(); final Class<?> parentType = parent.getType(); try {
/** * template method, override to customize * * @param path * path * @return field name */ protected String toField(Path<?> path) { PathMetadata md = path.getMetadata(); if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); } else { String rv = md.getName(); if (md.getParent() != null) { Path<?> parent = md.getParent(); if (parent.getMetadata().getPathType() != PathType.VARIABLE) { rv = toField(parent) + "." + rv; } } return rv; } }
/** * template method, override to customize * * @param path path * @return field name */ protected String toField(Path<?> path) { PathMetadata md = path.getMetadata(); if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); } else { String rv = md.getName(); if (md.getParent() != null) { Path<?> parent = md.getParent(); if (parent.getMetadata().getPathType() != PathType.VARIABLE) { rv = toField(parent) + "." + rv; } } return rv; } }
@Test public void comparableEntity_property() { ComparableEntity entity = Alias.alias(ComparableEntity.class); Path<String> propertyPath = $(entity.getProperty()); assertEquals(String.class, propertyPath.getType()); assertEquals("property", propertyPath.getMetadata().getName()); }