blob: 091a15f5a88469fd5db07eb423bd5690bd8c395f [file] [log] [blame]
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.datamodel;
18
Bharat saraswalb1170bd2016-07-14 13:26:18 +053019import java.util.ArrayList;
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053020import java.util.LinkedList;
21import java.util.List;
Bharat saraswald9822e92016-04-05 15:13:44 +053022
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053023import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
Bharat saraswal96dfef02016-06-16 00:29:12 +053024import org.onosproject.yangutils.datamodel.utils.Parsable;
25import org.onosproject.yangutils.datamodel.utils.YangConstructType;
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053026
27import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
28
29/*
30 * Reference RFC 6020.
31 *
32 * The "input" statement, which is optional, is used to define input
33 * parameters to the RPC operation. It does not take an argument. The
34 * substatements to "input" define nodes under the RPC's input node.
35 *
36 * If a leaf in the input tree has a "mandatory" statement with the
37 * value "true", the leaf MUST be present in a NETCONF RPC invocation.
38 * Otherwise, the server MUST return a "missing-element" error.
39 *
40 * If a leaf in the input tree has a default value, the NETCONF server
41 * MUST use this value in the same cases as described in Section 7.6.1.
42 * In these cases, the server MUST operationally behave as if the leaf
43 * was present in the NETCONF RPC invocation with the default value as
44 * its value.
45 *
46 * If a "config" statement is present for any node in the input tree,
47 * the "config" statement is ignored.
48 *
49 * If any node has a "when" statement that would evaluate to false, then
50 * this node MUST NOT be present in the input tree.
51 *
52 * The input substatements
53 *
54 * +--------------+---------+-------------+------------------+
55 * | substatement | section | cardinality |data model mapping|
56 * +--------------+---------+-------------+------------------+
57 * | anyxml | 7.10 | 0..n | -not supported |
58 * | choice | 7.9 | 0..n | -child nodes |
59 * | container | 7.5 | 0..n | -child nodes |
60 * | grouping | 7.11 | 0..n | -child nodes |
61 * | leaf | 7.6 | 0..n | -YangLeaf |
62 * | leaf-list | 7.7 | 0..n | -YangLeafList |
63 * | list | 7.8 | 0..n | -child nodes |
64 * | typedef | 7.3 | 0..n | -child nodes |
65 * | uses | 7.12 | 0..n | -child nodes |
66 * +--------------+---------+-------------+------------------+
67 */
68
69/**
Bharat saraswald9822e92016-04-05 15:13:44 +053070 * Represents data model node to maintain information defined in YANG input.
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053071 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053072public class YangInput
73 extends YangNode
Bharat saraswalb1170bd2016-07-14 13:26:18 +053074 implements YangLeavesHolder, Parsable, CollisionDetector, YangAugmentableNode {
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053075
Bharat saraswal96dfef02016-06-16 00:29:12 +053076 private static final long serialVersionUID = 806201608L;
77
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053078 /**
79 * Name of the input.
80 */
81 private String name;
82
83 /**
84 * List of leaves contained.
85 */
86 private List<YangLeaf> listOfLeaf;
87
88 /**
89 * List of leaf-lists contained.
90 */
91 private List<YangLeafList> listOfLeafList;
92
Bharat saraswalb1170bd2016-07-14 13:26:18 +053093 private List<YangAugmentedInfo> yangAugmentedInfo = new ArrayList<>();
94
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +053095 /**
96 * Create a rpc input node.
97 */
98 public YangInput() {
99 super(YangNodeType.INPUT_NODE);
100 listOfLeaf = new LinkedList<YangLeaf>();
101 listOfLeafList = new LinkedList<YangLeafList>();
102 }
103
104 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530105 public void detectCollidingChild(String identifierName, YangConstructType dataType)
106 throws DataModelException {
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530107 // Detect colliding child.
108 detectCollidingChildUtil(identifierName, dataType, this);
109 }
110
111 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530112 public void detectSelfCollision(String identifierName, YangConstructType dataType)
113 throws DataModelException {
Bharat saraswal96dfef02016-06-16 00:29:12 +0530114 if (getName().equals(identifierName)) {
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530115 throw new DataModelException("YANG file error: Duplicate input identifier detected, same as input \""
Bharat saraswal96dfef02016-06-16 00:29:12 +0530116 + getName() + "\"");
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530117 }
118 }
119
120 @Override
121 public YangConstructType getYangConstructType() {
122 return YangConstructType.INPUT_DATA;
123 }
124
125 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530126 public void validateDataOnEntry()
127 throws DataModelException {
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530128 //TODO: implement the method.
129 }
130
131 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530132 public void validateDataOnExit()
133 throws DataModelException {
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530134 //TODO: implement the method.
135 }
136
137 @Override
138 public List<YangLeaf> getListOfLeaf() {
139 return listOfLeaf;
140 }
141
142 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530143 public void setListOfLeaf(List<YangLeaf> leafsList) {
144 listOfLeaf = leafsList;
145 }
146
147
148 @Override
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530149 public void addLeaf(YangLeaf leaf) {
150 getListOfLeaf().add(leaf);
151 }
152
153 @Override
154 public List<YangLeafList> getListOfLeafList() {
155 return listOfLeafList;
156 }
157
158 @Override
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530159 public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
160 this.listOfLeafList = listOfLeafList;
161 }
162
163 @Override
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530164 public void addLeafList(YangLeafList leafList) {
165 getListOfLeafList().add(leafList);
166 }
167
168 @Override
169 public String getName() {
170 return name;
171 }
172
173 @Override
174 public void setName(String name) {
175 this.name = name;
176 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530177
178 @Override
179 public void addAugmentation(YangAugmentedInfo augmentInfo) {
180 yangAugmentedInfo.add(augmentInfo);
181 }
182
183 @Override
184 public void removeAugmentation(YangAugmentedInfo augmentInfo) {
185 yangAugmentedInfo.remove(augmentInfo);
186 }
187
188 @Override
189 public List<YangAugmentedInfo> getAugmentedInfoList() {
190 return yangAugmentedInfo;
191 }
Gaurav Agrawale3ed0d92016-03-23 19:04:17 +0530192}