@Override public String visit(Path<?> p, Templates templates) { final Path<?> parent = p.getMetadata().getParent(); final Object elem = p.getMetadata().getElement(); if (parent != null) { Template pattern = templates.getTemplate(p.getMetadata().getPathType()); if (pattern != null) { final List<?> args = Arrays.asList(parent, elem); final StringBuilder builder = new StringBuilder(); for (Template.Element element : pattern.getElements()) { Object rv = element.convert(args); if (rv instanceof Expression) { builder.append(((Expression<?>) rv).accept(this, templates)); } else { builder.append(rv.toString()); } } return builder.toString(); } else { throw new IllegalArgumentException("No pattern for " + p.getMetadata().getPathType()); } } else { return elem.toString(); } }
if (!casts.containsKey(clazz)) { PathMetadata metadata; if (pathMixin.getMetadata().getPathType() != PathType.COLLECTION_ANY) { metadata = PathMetadataFactory.forDelegate(pathMixin); } else { if (inits != null && pathMixin.getMetadata().getPathType() != PathType.VARIABLE) { rv = clazz.getConstructor(PathMetadata.class, PathInits.class).newInstance(metadata, inits); } else {
@Override public String visit(Path<?> expr, Void context) { PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { Path<?> parent = metadata.getParent(); if (parent.getMetadata().getPathType() == PathType.DELEGATE) { parent = parent.getMetadata().getParent(); } if (metadata.getPathType() == PathType.COLLECTION_ANY) { return visit(parent, context); } else if (parent.getMetadata().getPathType() != PathType.VARIABLE) { String rv = getKeyForPath(expr, metadata); String parentStr = visit(parent, context); return rv != null ? parentStr + "." + rv : parentStr; } } return getKeyForPath(expr, metadata); }
@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 String visit(Path<?> expr, Void context) { PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { Path<?> parent = metadata.getParent(); if (parent.getMetadata().getPathType() == PathType.DELEGATE) { parent = parent.getMetadata().getParent(); } if (metadata.getPathType() == PathType.COLLECTION_ANY) { return visit(parent, context); } else if (parent.getMetadata().getPathType() != PathType.VARIABLE) { String rv = getKeyForPath(expr, metadata); String parentStr = visit(parent, context); return rv != null ? parentStr + "." + rv : parentStr; } } return getKeyForPath(expr, metadata); }
/** * 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; } }
/** * 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; } }
@Override public Void visit(Path<?> path, Void context) { final PathType pathType = path.getMetadata().getPathType(); final Template template = templates.getTemplate(pathType); final Object element = path.getMetadata().getElement(); List<Object> args; if (path.getMetadata().getParent() != null) { args = ImmutableList.of(path.getMetadata().getParent(), element); } else { args = ImmutableList.of(element); } handleTemplate(template, args); return 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; }
@SuppressWarnings("rawtypes") private static <T> Path<T> replaceParent(Path<T> path, Path<?> parent) { PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); if (path instanceof CollectionExpression) { CollectionExpression<?,?> col = (CollectionExpression<?,?>) path; return (Path<T>) Expressions.listPath(col.getParameter(0), SimplePath.class, metadata); } else { return ExpressionUtils.path(path.getType(), metadata); } }
@Override public Expression<?> visit(Path<?> expr, C context) { if (expr.getMetadata().isRoot()) { return expr; } else { PathMetadata metadata = expr.getMetadata(); Path<?> parent = (Path) metadata.getParent().accept(this, context); Object element = metadata.getElement(); if (element instanceof Expression<?>) { element = ((Expression<?>) element).accept(this, context); } if (parent.equals(metadata.getParent()) && Objects.equal(element, metadata.getElement())) { return expr; } else { metadata = new PathMetadata(parent, element, metadata.getPathType()); return ExpressionUtils.path(expr.getType(), metadata); } } }
@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(); }
@Override public Void visit(Path<?> path, Void context) { final PathType pathType = path.getMetadata().getPathType(); if (pathType == PathType.PROPERTY) { final Path<?> parent = path.getMetadata().getParent();
@Override public Expression<?> visit(Path<?> expr, Context context) { if (expr.getMetadata().getPathType() == PathType.COLLECTION_ANY) { Path<?> parent = (Path<?>) expr.getMetadata().getParent().accept(this, context); expr = ExpressionUtils.path(expr.getType(), PathMetadataFactory.forCollectionAny(parent)); EntityPath<?> replacement = new EntityPathBase<Object>(expr.getType(), ExpressionUtils.createRootVariable(expr, replacedCounter++)); context.add(expr, replacement); return replacement; } else if (expr.getMetadata().getParent() != null) { Context c = new Context(); Path<?> parent = (Path<?>) expr.getMetadata().getParent().accept(this, c); if (c.replace) { context.add(c); return replaceParent(expr, parent); } } return expr; }
@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 String visit(Path<?> expr, Void context) { PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { Path<?> parent = metadata.getParent(); if (parent.getMetadata().getPathType() == PathType.DELEGATE) { parent = parent.getMetadata().getParent(); } if (metadata.getPathType() == PathType.COLLECTION_ANY) { return visit(parent, context); } else if (parent.getMetadata().getPathType() != PathType.VARIABLE) { String rv = getKeyForPath(expr, metadata); String parentStr = visit(parent, context); return rv != null ? parentStr + "." + rv : parentStr; } } return getKeyForPath(expr, metadata); }
@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(); }
@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; }
@SuppressWarnings("rawtypes") private static <T> Path<T> replaceParent(Path<T> path, Path<?> parent) { PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); if (path instanceof CollectionExpression) { CollectionExpression<?,?> col = (CollectionExpression<?,?>) path; return (Path<T>) Expressions.listPath(col.getParameter(0), SimplePath.class, metadata); } else { return ExpressionUtils.path(path.getType(), metadata); } }