final boolean maxInclusive = CommonAttributes.MAX_INCLUSIVE.resolveModelAttribute(context, node).asBoolean();
return new LevelRangeFilter(min, minInclusive, max, maxInclusive);
} else if (node.hasDefined(CommonAttributes.MATCH.getName())) {
return new RegexFilter(CommonAttributes.PATTERN.resolveModelAttribute(context, node).asString());
} else if (node.hasDefined(CommonAttributes.NOT.getName())) {
return new InvertFilter(parseFilter(context, CommonAttributes.NOT.resolveModelAttribute(context, node)));
} else if (node.hasDefined(CommonAttributes.REPLACE.getName())) {
final String pattern = CommonAttributes.PATTERN.resolveModelAttribute(context, node).asString();
final String replacement = CommonAttributes.REPLACEMENT.resolveModelAttribute(context, node).asString();
final boolean replaceAll = CommonAttributes.REPLACE_ALL.resolveModelAttribute(context, node).asBoolean();
return new SubstituteFilter(pattern, replacement, replaceAll);