private static Object serializeExpression(SerializerProvider serializerProvider, JsonSerializer<?> serializer, Expression<?> expression) { if (expression instanceof Aggregation.FieldPath) { return ((Aggregation.FieldPath) expression).toString(); } if (expression instanceof Aggregation.Literal<?>) { return new BasicDBObject("$literal", ((Aggregation.Literal<?>) expression).value()); } if (expression instanceof Aggregation.ExpressionObject) { BasicDBObject object = new BasicDBObject(); for (Entry<String, Expression<?>> property : ((Aggregation.ExpressionObject) expression).properties()) { object.append(property.getKey(), serializeExpression(serializerProvider, serializer, property.getValue())); } return object; } if (expression instanceof Aggregation.OperatorExpression) { Aggregation.OperatorExpression<?> oe = (Aggregation.OperatorExpression<?>) expression; BasicDBList operands = new BasicDBList(); for (Expression<?> e : oe.operands()) { operands.add(serializeExpression(serializerProvider, serializer, e)); } return new BasicDBObject(oe.operator(), operands); } throw new IllegalArgumentException(expression.getClass().getName()); } }
private static Object serializeExpression(SerializerProvider serializerProvider, JsonSerializer<?> serializer, Expression<?> expression) { if (expression instanceof Aggregation.FieldPath) { return ((Aggregation.FieldPath) expression).toString(); } if (expression instanceof Aggregation.Literal<?>) { return new Document("$literal", ((Aggregation.Literal<?>) expression).value()); } if (expression instanceof Aggregation.ExpressionObject) { Document object = new Document(); for (Entry<String, Expression<?>> property : ((Aggregation.ExpressionObject) expression).properties()) { object.append(property.getKey(), serializeExpression(serializerProvider, serializer, property.getValue())); } return object; } if (expression instanceof Aggregation.OperatorExpression) { Aggregation.OperatorExpression<?> oe = (Aggregation.OperatorExpression<?>) expression; List<Bson> operands = new ArrayList<>(); for (Expression<?> e : oe.operands()) { operands.add((Document) serializeExpression(serializerProvider, serializer, e)); } return new Document(oe.operator(), operands); } throw new IllegalArgumentException(expression.getClass().getName()); } }
public static Expression<Object> object(Map<String, Expression<?>> properties) { return new ExpressionObject(properties); }