Fix XPathExpr parsing
[yangtools.git] / yang / yang-xpath-api / src / main / java / org / opendaylight / yangtools / yang / xpath / api / YangPathExpr.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.xpath.api;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import java.util.Objects;
14 import java.util.Optional;
15 import org.eclipse.jdt.annotation.Nullable;
16
17 @Beta
18 public class YangPathExpr implements YangExpr {
19     private static final class WithLocation extends YangPathExpr {
20         private static final long serialVersionUID = 1L;
21
22         private final YangLocationPath locationPath;
23
24         WithLocation(final YangExpr filterExpr, final YangLocationPath locationPath) {
25             super(filterExpr);
26             this.locationPath = requireNonNull(locationPath);
27         }
28
29         @Override
30         public Optional<YangLocationPath> getLocationPath() {
31             return Optional.of(locationPath);
32         }
33     }
34
35     private static final long serialVersionUID = 1L;
36
37     private final YangExpr filterExpr;
38
39     YangPathExpr(final YangExpr filterExpr) {
40         this.filterExpr = requireNonNull(filterExpr);
41     }
42
43     public static YangPathExpr of(final YangExpr filterExpr) {
44         return new YangPathExpr(filterExpr);
45     }
46
47     public static YangPathExpr of(final YangExpr expr, final YangLocationPath locationPath) {
48         return new WithLocation(expr, locationPath);
49     }
50
51     public final YangExpr getFilterExpr() {
52         return filterExpr;
53     }
54
55     public Optional<YangLocationPath> getLocationPath() {
56         return Optional.empty();
57     }
58
59     @Override
60     public final int hashCode() {
61         return Objects.hash(filterExpr, getLocationPath());
62     }
63
64     @Override
65     public final boolean equals(final @Nullable Object obj) {
66         if (this == obj) {
67             return true;
68         }
69         if (!(obj instanceof YangPathExpr)) {
70             return false;
71         }
72         final YangPathExpr other = (YangPathExpr) obj;
73         return filterExpr.equals(((YangPathExpr) obj).filterExpr) && getLocationPath().equals(other.getLocationPath());
74     }
75
76     @Override
77     public final String toString() {
78         // FIXME: this is not right
79         return "-(" + filterExpr + ")";
80     }
81 }