import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@Beta
-public abstract class DOMQueryPredicate implements Immutable, Predicate<Object> {
- abstract static class AbstractValueDOMQueryPredicate<T> extends DOMQueryPredicate {
+public abstract class DOMQueryPredicate implements Immutable, Predicate<NormalizedNode<?, ?>> {
+ abstract static class AbstractLeafDOMQueryPredicate extends DOMQueryPredicate {
+ AbstractLeafDOMQueryPredicate(final YangInstanceIdentifier relativePath) {
+ super(relativePath);
+ }
+
+ @Override
+ public final boolean test(final NormalizedNode<?, ?> data) {
+ return testValue(data instanceof LeafNode ? ((LeafNode<?>) data).getValue() : null);
+ }
+
+ abstract boolean testValue(Object data);
+ }
+
+ abstract static class AbstractValueDOMQueryPredicate<T> extends AbstractLeafDOMQueryPredicate {
private final @NonNull T value;
AbstractValueDOMQueryPredicate(final YangInstanceIdentifier relativePath, final T value) {
@Override
@SuppressWarnings("unchecked")
- public final boolean test(final Object data) {
+ public final boolean testValue(final Object data) {
return data != null && test(value().compareTo((T) data));
}
}
@Override
- public final boolean test(final Object data) {
+ public final boolean testValue(final Object data) {
return data instanceof String && test((String) data);
}
}
@Override
- public boolean test(final Object data) {
+ public boolean test(final NormalizedNode<?, ?> data) {
return data != null;
}
}
}
@Override
- public boolean test(final Object data) {
+ public boolean test(final NormalizedNode<?, ?> data) {
return data == null;
}
}
}
@Override
- public boolean test(final Object data) {
+ public boolean testValue(final Object data) {
return value().equals(data);
}
}
}
}
- public static final class MatchesPattern extends DOMQueryPredicate {
+ public static final class MatchesPattern extends AbstractLeafDOMQueryPredicate {
private final Pattern pattern;
public MatchesPattern(final YangInstanceIdentifier relativePath, final Pattern pattern) {
}
@Override
- ToStringHelper addToStringAttributes(final ToStringHelper helper) {
- return helper.add("pattern", pattern);
+ public boolean testValue(final Object data) {
+ return data instanceof CharSequence && pattern.matcher((CharSequence) data).matches();
}
@Override
- public boolean test(final Object data) {
- return data instanceof CharSequence && pattern.matcher((CharSequence) data).matches();
+ ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return helper.add("pattern", pattern);
}
}
}
@Override
- public abstract boolean test(@Nullable Object data);
+ public abstract boolean test(@Nullable NormalizedNode<?, ?> data);
@Override
public String toString() {