/** * Creates a matcher that handles $notInQuery constraints. */ private <T extends ParseObject> ConstraintMatcher<T> createNotInQueryMatcher(ParseUser user, Object constraint, final String key) { final ConstraintMatcher<T> inQueryMatcher = createInQueryMatcher(user, constraint, key); return new ConstraintMatcher<T>(user) { @Override public Task<Boolean> matchesAsync(T object, ParseSQLiteDatabase db) { return inQueryMatcher.matchesAsync(object, db).onSuccess(new Continuation<Boolean, Boolean>() { @Override public Boolean then(Task<Boolean> task) { return !task.getResult(); } }); } }; }
private <T extends ParseObject> ConstraintMatcher<T> createMatcher(ParseUser user, final String operator, final Object constraint, final String key, final KeyConstraints allKeyConstraints) { switch (operator) { case "$inQuery": return createInQueryMatcher(user, constraint, key); case "$notInQuery": return createNotInQueryMatcher(user, constraint, key); case "$select": return createSelectMatcher(user, constraint, key); case "$dontSelect": return createDontSelectMatcher(user, constraint, key); default: /* * All of the other operators we know about are stateless, so return a simple matcher. */ return new ConstraintMatcher<T>(user) { @Override public Task<Boolean> matchesAsync(T object, ParseSQLiteDatabase db) { try { Object value = getValue(object, key); return Task.forResult(matchesStatelessConstraint(operator, constraint, value, allKeyConstraints)); } catch (ParseException e) { return Task.forError(e); } } }; } }