[ONOS-3898/4069] Yang Utils Extension to support RPC/Notification/Choice/Case/Union
Change-Id: I405852caff3464719e8e586fa8e9ae9b6ed043ff
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
new file mode 100644
index 0000000..94ec601
--- /dev/null
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.datamodel;
+
+import java.util.LinkedList;
+import java.util.List;
+import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.parser.Parsable;
+import org.onosproject.yangutils.utils.YangConstructType;
+
+import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "output" statement, which is optional, is used to define output
+ * parameters to the RPC operation. It does not take an argument. The
+ * substatements to "output" define nodes under the RPC's output node.
+ *
+ * If a leaf in the output tree has a "mandatory" statement with the
+ * value "true", the leaf MUST be present in a NETCONF RPC reply.
+ *
+ * If a leaf in the output tree has a default value, the NETCONF client
+ * MUST use this value in the same cases as described in Section 7.6.1.
+ * In these cases, the client MUST operationally behave as if the leaf
+ * was present in the NETCONF RPC reply with the default value as its
+ * value.
+ *
+ * If a "config" statement is present for any node in the output tree,
+ * the "config" statement is ignored.
+ *
+ * If any node has a "when" statement that would evaluate to false, then
+ * this node MUST NOT be present in the output tree.
+ *
+ * The output substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | -not supported |
+ * | choice | 7.9 | 0..n | -child nodes |
+ * | container | 7.5 | 0..n | -child nodes |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | leaf | 7.6 | 0..n | -YangLeaf |
+ * | leaf-list | 7.7 | 0..n | -YangLeafList |
+ * | list | 7.8 | 0..n | -child nodes |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * | uses | 7.12 | 0..n | -child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Data model node to maintain information defined in YANG output.
+ */
+public class YangOutput extends YangNode implements YangLeavesHolder, Parsable, CollisionDetector {
+
+ /**
+ * Name of the output.
+ */
+ private String name;
+
+ /**
+ * List of leaves contained.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists contained.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * Create a rpc output node.
+ */
+ public YangOutput() {
+ super(YangNodeType.OUTPUT_NODE);
+ listOfLeaf = new LinkedList<YangLeaf>();
+ listOfLeafList = new LinkedList<YangLeafList>();
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException {
+ if (this.getName().equals(identifierName)) {
+ throw new DataModelException("YANG file error: Duplicate identifier detected, same as output \""
+ + this.getName() + "\"");
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.OUTPUT_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return listOfLeaf;
+ }
+
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ getListOfLeaf().add(leaf);
+ }
+
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return listOfLeafList;
+ }
+
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ getListOfLeafList().add(leafList);
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public void setName(String name) {
+ this.name = name;
+ }
+}