Populate xpath/ hierarchy
[yangtools.git] / xpath / yang-xpath-api / src / main / java / org / opendaylight / yangtools / yang / xpath / api / YangFunction.java
diff --git a/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunction.java b/xpath/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangFunction.java
new file mode 100644 (file)
index 0000000..4e82369
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2018 Pantheon Technologies, s.r.o.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.xpath.api;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.concepts.Identifiable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangConstants;
+import org.opendaylight.yangtools.yang.common.YangVersion;
+
+/**
+ * Functions known to a YANG XPath.
+ *
+ * @author Robert Varga
+ */
+@Beta
+public enum YangFunction implements Identifiable<QName> {
+    // XPath 1.0 functions
+    BOOLEAN("boolean"),
+    CEILING("ceiling"),
+    CONCAT("concat"),
+    CONTAINS("contains"),
+    COUNT("count"),
+    FALSE("false"),
+    FLOOR("floor"),
+    ID("id"),
+    LANG("lang"),
+    LAST("last"),
+    LOCAL_NAME("local-name"),
+    NAME("name"),
+    NUMBER("number"),
+    NAMESPACE_URI("namespace-uri"),
+    NORMALIZE_SPACE("normalize-space"),
+    NOT("not"),
+    POSITION("position"),
+    ROUND("round"),
+    STARTS_WITH("starts-with"),
+    STRING("string"),
+    STRING_LENGTH("string-length"),
+    SUM("sum"),
+    SUBSTRING("substring"),
+    SUBSTRING_AFTER("substring-after"),
+    SUBSTRING_BEFORE("substring-before"),
+    TRANSLATE("translate"),
+    TRUE("true"),
+
+    // RFC6020 functions
+    CURRENT("current"),
+
+    // RFC7950 functions
+    BIT_IS_SET("bit-is-set", YangVersion.VERSION_1_1),
+    DEREF("deref", YangVersion.VERSION_1_1),
+    DERIVED_FROM("derived-from", YangVersion.VERSION_1_1),
+    DERIVED_FROM_OR_SELF("derived-from-or-self", YangVersion.VERSION_1_1),
+    ENUM_VALUE("enum-value", YangVersion.VERSION_1_1),
+    RE_MATCH("re-match", YangVersion.VERSION_1_1);
+
+    private final QName identifier;
+    private final YangVersion yangVersion;
+
+    YangFunction(final String localName, final YangVersion yangVersion) {
+        identifier = QName.create(YangConstants.RFC6020_YIN_MODULE, localName).intern();
+        this.yangVersion = requireNonNull(yangVersion);
+    }
+
+    YangFunction(final String localName) {
+        this(localName, YangVersion.VERSION_1);
+    }
+
+    @Override
+    public QName getIdentifier() {
+        return identifier;
+    }
+
+    /**
+     * Return the minimum YANG version where this function is supported.
+     *
+     * @return First YANG version where this function appeared.
+     */
+    public YangVersion getYangVersion() {
+        return yangVersion;
+    }
+}