2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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.ImmutableList;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Objects;
17 import org.eclipse.jdt.annotation.Nullable;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.YangConstants;
22 * Function call invocation. Function names without a prefix are mapped into {@link YangConstants#RFC6020_YIN_MODULE},
23 * as they are required to be mapped into YANG as per RFC7950 definitions.
25 * @author Robert Varga
28 public abstract class YangFunctionCallExpr implements YangExpr {
29 static class NoArgs extends YangFunctionCallExpr {
30 private static final long serialVersionUID = 1L;
32 private final QName name;
34 NoArgs(final QName name) {
35 this.name = requireNonNull(name);
39 public QName getName() {
44 private static final class WithArgs extends NoArgs {
45 private static final long serialVersionUID = 1L;
47 private final List<YangExpr> arguments;
49 WithArgs(final QName name, final List<YangExpr> arguments) {
51 this.arguments = ImmutableList.copyOf(arguments);
55 public List<YangExpr> getArguments() {
60 private static final long serialVersionUID = 1L;
62 YangFunctionCallExpr() {
66 public static YangFunctionCallExpr of(final QName name) {
67 return new NoArgs(name);
70 public static YangFunctionCallExpr of(final QName name, final List<YangExpr> arguments) {
71 return arguments.isEmpty() ? of(name) : new WithArgs(name, arguments);
74 public abstract QName getName();
76 public List<YangExpr> getArguments() {
77 return ImmutableList.of();
81 public final int hashCode() {
82 return Objects.hash(getName(), getArguments());
86 public final boolean equals(final @Nullable Object obj) {
90 if (!(obj instanceof YangFunctionCallExpr)) {
93 final YangFunctionCallExpr other = (YangFunctionCallExpr) obj;
94 return getName().equals(other.getName()) && getArguments().equals(other.getArguments());
98 public final String toString() {
99 final StringBuilder sb = new StringBuilder().append(getName()).append('(');
100 final Iterator<YangExpr> it = getArguments().iterator();
102 sb.append(it.next());
103 while (it.hasNext()) {
104 sb.append(", ").append(it.next());
107 return sb.append(')').toString();