protected String getKeyForPath(Path<?> expr, PathMetadata<?> metadata) { if (expr.getType().equals(ObjectId.class)) { return "_id"; } else { return metadata.getElement().toString(); } }
/** * @param path * @return */ private String toString(Path<?> path) { return path.getMetadata().getElement().toString(); }
@Override public NODE visit(Path<?> expr, Bindings bindings) { return bindings.get(expr.getMetadata().getElement().toString()); }
@Override protected String getKeyForPath(Path<?> expr, PathMetadata<?> metadata) { if (expr.getAnnotatedElement().isAnnotationPresent(Id.class)) { return "_id"; } else if (metadata.getPathType() == PathType.PROPERTY && expr.getAnnotatedElement().isAnnotationPresent(Property.class)) { return expr.getAnnotatedElement().getAnnotation(Property.class).value(); } else { return metadata.getElement().toString(); } }
private static String getName(Expression<?> expression) { if (expression instanceof Path<?>) { @SuppressWarnings("rawtypes") PathMetadata<?> metadata = ((Path) expression).getMetadata(); if (metadata.getPathType() == PathType.PROPERTY) { return metadata.getElement().toString(); } else { throw new MappingException("Unexpected expression " + expression); } } else { throw new MappingException("Unexpected expression " + expression); } }
@Override public Void visit(Path<?> expr, Void context) { if (expr.getMetadata().getElement() instanceof Expression) { handle((Expression) expr.getMetadata().getElement()); } handle(expr.getMetadata().getParent()); return null; }
@Override public Expression<?> visit(Path<?> expr, @Nullable Void context) { if (expr.getMetadata().isRoot()) { return expr; } else { PathMetadata metadata = expr.getMetadata(); Path<?> parent = (Path)metadata.getParent().accept(this, null); Object element = metadata.getElement(); if (element instanceof Expression<?>) { element = ((Expression) element).accept(this, null); } if (parent.equals(metadata.getParent()) && Objects.equal(element, metadata.getElement())) { return expr; } else { metadata = new PathMetadata(parent, element, metadata.getPathType()); return new PathImpl(expr.getType(), metadata); } } }
@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(); } }
@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; }
@SuppressWarnings("unchecked") private static <T> Path<T> replaceParent(Path<T> path, Path<?> parent) { PathMetadata<?> metadata = new PathMetadata(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); return new PathImpl<T>(path.getType(), metadata); }
private MappedPath getMappedPath(Path<?> path) { PathMetadata<?> md = path.getMetadata(); if (path.getMetadata().getPathType() != PathType.PROPERTY) { md = md.getParent().getMetadata(); } MappedClass mc = configuration.getMappedClass(md.getParent().getType()); return mc.getMappedPath(md.getElement().toString()); }
@SuppressWarnings("rawtypes") private static <T> Path<T> replaceParent(Path<T> path, Path<?> parent) { PathMetadata<?> metadata = new PathMetadata<Object>(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); if (path instanceof CollectionExpression) { CollectionExpression<?,?> col = (CollectionExpression<?,?>)path; return new ListPath(col.getParameter(0), SimplePath.class, metadata); } else { return new PathImpl<T>(path.getType(), metadata); } }
args.add((Expression<?>)path.getMetadata().getParent()); args.add(path.getMetadata().getElement()); final Template template = getTemplate(pathType); for (Template.Element element : template.getElements()) {
@SuppressWarnings("unchecked") private Operation<?> transformPathEqNeConstant(Operation<?> operation) { Path<?> path = (Path<?>) operation.getArg(0); Constant<?> constant = (Constant<?>) operation.getArg(1); MappedPath mappedPath = getMappedPath(path); // id property if (path.getMetadata().getPathType() == PathType.PROPERTY && constant.getType().equals(String.class) && mappedPath.getPredicatePath().isEmpty()) { operation = PredicateOperation.create((Operator) operation.getOperator(), path, new ConstantImpl<ID>(session.getId(new LID(constant.toString())))); // localized property } else if (mappedPath.getMappedProperty().isLocalized()) { Locale locale; if (path.getMetadata().getPathType() == PathType.PROPERTY) { locale = session.getCurrentLocale(); } else { locale = (Locale) path.getMetadata().getElement(); } operation = PredicateOperation.create((Operator) operation.getOperator(), path, new ConstantImpl<LIT>(new LIT(constant.toString(), locale))); } return operation; }
int index = ((Integer) md.getElement()).intValue(); for (int i = 0; i < index; i++) { pathNode = var(varNames.next()); MappedProperty<?> mappedProperty = mappedPath.getMappedProperty(); if (!mappedProperty.isLocalized()) { Object element = path.getMetadata().getElement(); Expression<?> expr = transform(element instanceof Expression ? (Expression) element : new ConstantImpl(element), filters);