2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.xpath.api;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.Arrays;
15 import java.util.Collection;
16 import java.util.Objects;
18 import org.eclipse.jdt.annotation.Nullable;
21 public sealed class YangFilterExpr implements YangExpr, YangPredicateAware {
22 private static final class WithPredicates extends YangFilterExpr {
23 private static final long serialVersionUID = 1L;
25 private final ImmutableSet<YangExpr> predicates;
27 WithPredicates(final YangExpr expr, final ImmutableSet<YangExpr> predicates) {
29 this.predicates = requireNonNull(predicates);
33 public Set<YangExpr> getPredicates() {
38 private static final long serialVersionUID = 1L;
40 private final YangExpr expr;
42 private YangFilterExpr(final YangExpr expr) {
43 this.expr = requireNonNull(expr);
46 public static YangFilterExpr of(final YangExpr expr) {
47 return new YangFilterExpr(expr);
50 public static YangFilterExpr of(final YangExpr expr, final YangExpr... predicates) {
51 return of(expr, Arrays.asList(predicates));
54 public static YangFilterExpr of(final YangExpr expr, final Collection<YangExpr> predicates) {
55 return predicates.isEmpty() ? of(expr) : new WithPredicates(expr, ImmutableSet.copyOf(predicates));
58 public final YangExpr getExpr() {
63 public final int hashCode() {
64 return Objects.hash(expr, getPredicates());
68 public final boolean equals(final @Nullable Object obj) {
69 return this == obj || obj instanceof YangFilterExpr other
70 && expr.equals(other.expr) && getPredicates().equals(other.getPredicates());
74 public final String toString() {
75 // FIXME: this is not right
76 return "-(" + expr + ")";