@Override public String toString() { return this.field + " " + this.operator.val() + " " + this.value; }
@SuppressWarnings("unchecked") public void addTo(DBObject obj) { if (FilterOperator.EQUAL.equals(operator)) { obj.put(this.field, value); // no operator, prop equals value } else { Object inner = obj.get(field); // operator within inner object if (!(inner instanceof Map)) { inner = new HashMap<String, Object>(); obj.put(field, inner); } Object val = not ? new BasicDBObject("$not", value) : value; ((Map<String, Object>) inner).put(operator.val(), val); } }
public static boolean isCompatibleForOperator(Class<?> type, FilterOperator op, Object value) { if (value == null || type == null) return true; else if (op.equals(FilterOperator.EXISTS) && (value instanceof Boolean)) return true; else if (op.equals(FilterOperator.IN) && (value.getClass().isArray() || Iterable.class.isAssignableFrom(value.getClass()) || Map.class.isAssignableFrom(value.getClass()))) return true; else if (op.equals(FilterOperator.NOT_IN) && (value.getClass().isArray() || Iterable.class.isAssignableFrom(value.getClass()) || Map.class.isAssignableFrom(value.getClass()))) return true; else if (op.equals(FilterOperator.ALL) && (value.getClass().isArray() || Iterable.class.isAssignableFrom(value.getClass()) || Map.class.isAssignableFrom(value.getClass()))) return true; else if (value instanceof Integer && (int.class.equals(type) || long.class.equals(type) || Long.class.equals(type))) return true; else if ((value instanceof Integer || value instanceof Long) && (double.class.equals(type) || Double.class.equals(type))) return true; else if (value instanceof Pattern && String.class.equals(type)) return true; else if (value.getClass().getAnnotation(Entity.class) != null && Key.class.equals(type)) return true; else if (value instanceof List<?>) return true; else if (!value.getClass().isAssignableFrom(type) && //hack to let Long match long, and so on !value.getClass().getSimpleName().toLowerCase().equals(type.getSimpleName().toLowerCase())) { return false; } return true; }
public String getFieldName() { return FilterOperator.WHERE.val(); }
public void addTo(DBObject obj) { obj.put(FilterOperator.WHERE.val(), this.js); }
switch (operator) { case NEAR: query = BasicDBObjectBuilder.start(FilterOperator.NEAR.val(), value); break; case NEAR_SPHERE: query = BasicDBObjectBuilder.start(FilterOperator.NEAR_SPHERE.val(), value); break; case WITHIN_BOX: query = BasicDBObjectBuilder.start().push(FilterOperator.WITHIN.val()).add(operator.val(), value); break; case WITHIN_CIRCLE: query = BasicDBObjectBuilder.start().push(FilterOperator.WITHIN.val()).add(operator.val(), value); break; case WITHIN_CIRCLE_SPHERE: query = BasicDBObjectBuilder.start().push(FilterOperator.WITHIN.val()).add(operator.val(), value); break; default: