/** * Creates an anonymous {@link Selector}. * * @return a new Selector * * @see ObjectSelector */ public static Selector anonymous() { Object obj = new AnonymousKey(); return $(obj); }
/** * Creates a {@link Selector} based on a URI template. * * @param uriTemplate The URI template to compile. * * @return The new {@link Selector}. * * @see UriPathTemplate */ public static Selector uriPathSelector(String uriTemplate) { return new UriPathSelector(uriTemplate); }
@Override public HeaderResolver getHeaderResolver() { return uriPathSelector != null ? uriPathSelector.getHeaderResolver() : null; }
/** * A short-hand alias for {@link Selectors#anonymous()}. * <p/> * Creates an anonymous {@link Selector}. * * @return a new Selector * * @see ObjectSelector */ public static Selector $() { return anonymous(); }
/** * Creates a {@link Selector} that matches * all objects. * @return The new {@link MatchAllSelector} * * @see MatchAllSelector */ public static Selector matchAll() { return new MatchAllSelector(); }
@Override public Object getArrayIndex(Object obj, int idx, boolean unwrap) { Object o = getProperty(obj, idx); if (o instanceof JsonNode && unwrap) { return unwrap((JsonNode) o); } else { return o; } }
@Override public boolean matches(Object key) { for (Selector s: selectors) { if (!s.matches(key)) { return false; } } return true; }
/** * Creates a {@link Selector} based on the given {@link Predicate}. * * @param predicate * The {@link Predicate} to delegate to when matching objects. * * @return PredicateSelector */ public static PredicateSelector predicateSelector(Predicate<Object> predicate) { return new PredicateSelector(predicate); }
@Override public Object getArrayIndex(Object obj, int idx) { return getProperty(obj, idx); }
@Override public void setArrayIndex(Object array, int idx, Object newValue) { setProperty(array, idx, newValue); }
@Override public Object unwrap(Object object) { if (object instanceof JsonNode) { return unwrap((JsonNode) object); } else { return object; } }
/** * Creates a {@code ClassSelector} based on the given class type that only matches if the * key being matched is assignable according to {@link Class#isAssignableFrom(Class)}. * * @param supertype The supertype to compare. * * @return The new {@link Selector}. */ public static Selector typeSelector(Class<?> supertype) { return new ClassSelector(supertype); }
/** * Creates a {@link Selector} that matches * objects on set membership. * @return The new {@link SetMembershipSelector} * * @see SetMembershipSelector */ public static Selector setMembership(Set set) { return new SetMembershipSelector(set); }
/** * Create a selector from the given uri template string. * * @param uriPathTmpl The string to compile into a {@link UriPathTemplate}. */ public UriPathSelector(String uriPathTmpl) { super(new UriPathTemplate(uriPathTmpl)); }
/** * Creates a {@link Selector} based on the given regular expression. * * @param regex * The regular expression to compile. * * @return The new {@link Selector}. */ public static Selector regexSelector(String regex) { return new RegexSelector(regex); }
@Override public boolean test(K t) { return matches(t); }
@Override @SuppressWarnings("unchecked") public Function<Object, Map<String, Object>> getHeaderResolver() { return uriPathSelector != null ? uriPathSelector.getHeaderResolver() : null; }
/** * Creates a {@link Selector} based on the given {@link Predicate}. * * @param predicate * The {@link Predicate} to delegate to when matching objects. * * @return PredicateSelector * * @see PredicateSelector */ public static Selector predicate(Predicate<Object> predicate) { return new PredicateSelector(predicate); }
@Override public Object getMapValue(Object obj, String key) { return getProperty(obj, key); }
@Override public void removeProperty(Object obj, Object key) { setProperty(obj, key, null); }