blob: d3dedee6448450077c74c9509f4f3d1f38d015aa [file] [log] [blame]
package com.fasterxml.jackson.core.filter;
import com.fasterxml.jackson.core.JsonPointer;
/**
* Simple {@link TokenFilter} implementation that takes a single
* {@link JsonPointer} and matches a single value accordingly.
* Instances are immutable and fully thread-safe, shareable,
* and efficient to use.
*
* @since 2.6
*/
public class JsonPointerBasedFilter extends TokenFilter
{
protected final JsonPointer _pathToMatch;
public JsonPointerBasedFilter(String ptrExpr) {
this(JsonPointer.compile(ptrExpr));
}
public JsonPointerBasedFilter(JsonPointer match) {
_pathToMatch = match;
}
@Override
public TokenFilter includeElement(int index) {
JsonPointer next = _pathToMatch.matchElement(index);
if (next == null) {
return null;
}
if (next.matches()) {
return TokenFilter.INCLUDE_ALL;
}
return new JsonPointerBasedFilter(next);
}
@Override
public TokenFilter includeProperty(String name) {
JsonPointer next = _pathToMatch.matchProperty(name);
if (next == null) {
return null;
}
if (next.matches()) {
return TokenFilter.INCLUDE_ALL;
}
return new JsonPointerBasedFilter(next);
}
@Override
public TokenFilter filterStartArray() {
return this;
}
@Override
public TokenFilter filterStartObject() {
return this;
}
@Override
protected boolean _includeScalar() {
// should only occur for root-level scalars, path "/"
return _pathToMatch.matches();
}
@Override
public String toString() {
return "[JsonPointerFilter at: "+_pathToMatch+"]";
}
}