blob: 3c49c31e9d9b460df792983f5e37fe4c709913d1 [file] [log] [blame]
Thomas Vachuskaf40fb572016-11-20 11:43:57 -08001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
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
VinodKumarS-Huawei75015452016-11-23 21:03:45 +053017
18package org.onosproject.yang.model;
Thomas Vachuskaf40fb572016-11-20 11:43:57 -080019
Bharat saraswalb995d942017-01-19 16:07:30 +053020import static org.onosproject.yang.model.ModelConstants.NON_KEY_LEAF;
21
Thomas Vachuskaf40fb572016-11-20 11:43:57 -080022/**
VinodKumarS-Huawei75015452016-11-23 21:03:45 +053023 * Abstraction of an entity which represents leaf data tree node.
Thomas Vachuskaf40fb572016-11-20 11:43:57 -080024 */
Bharat saraswalb995d942017-01-19 16:07:30 +053025public final class LeafNode extends DataNode {
26
27 /**
28 * Leaf node value.
29 */
30 private Object value;
Thomas Vachuskaf40fb572016-11-20 11:43:57 -080031
VinodKumarS-Huawei75015452016-11-23 21:03:45 +053032 /**
33 * Returns value contained in leaf node.
34 *
35 * @return value contained in leaf node
36 */
Bharat saraswalb995d942017-01-19 16:07:30 +053037 public Object value() {
38 return value;
39 }
Thomas Vachuskaf40fb572016-11-20 11:43:57 -080040
VinodKumarS-Huawei75015452016-11-23 21:03:45 +053041 /**
42 * Returns value as string, for usage in serializers.
43 *
44 * @return string representation of value
45 */
Bharat saraswalb995d942017-01-19 16:07:30 +053046 public String asString() {
47 return String.valueOf(value);
48 }
VinodKumarS-Huawei75015452016-11-23 21:03:45 +053049
Bharat saraswalb995d942017-01-19 16:07:30 +053050 /**
51 * Creates an instance of leaf node.
52 *
53 * @param builder leaf node builder
54 */
55 public LeafNode(Builder builder) {
56 super(builder);
57 value = builder.value;
58 }
59
60 /**
61 * Returns data node builder instance.
62 *
63 * @param name name of node
64 * @param nameSpace namespace of node
65 * @return data node builder instance
66 */
67 public static Builder builder(String name, String nameSpace) {
68 return new Builder(name, nameSpace);
69 }
70
71 /**
72 * Returns data node copy builder.
73 *
74 * @return data node copy builder
75 */
76 @Override
77 public Builder copyBuilder() {
78 return new Builder(this);
79 }
80
81 /**
82 * Builder with get and set functions to build leaf node,
83 * builder will be used both to create leaf node from scratch or from a
84 * given leaf node.
85 */
Thomas Vachuska7c9cf602017-02-07 11:24:03 -080086 public static final class Builder extends DataNode.Builder<Builder> {
Bharat saraswalb995d942017-01-19 16:07:30 +053087
88 /**
89 * Leaf node value.
90 */
91 private Object value;
92
93 /**
94 * Creates an instance of data node builder.
95 *
96 * @param name name of node
97 * @param namespace namespace of node
98 */
99 protected Builder(String name, String namespace) {
100 keyBuilder = NodeKey.builder().schemaId(name, namespace);
101 }
102
103 /**
104 * Creates an instance of leaf node copy builder.
105 *
106 * @param node old leaf node
107 */
108 public Builder(LeafNode node) {
109 super(node);
110 value = node.value;
111 }
112
113 /**
114 * Sets value of leaf node builder.
115 *
116 * @param value value
117 * @return leaf node builder
118 */
119 public Builder value(Object value) {
120 this.value = value;
121 return this;
122 }
123
124 @Override
125 public InnerNode.Builder createChildBuilder(String name, String nameSpace) {
126 throw new IllegalStateException("leaf node can't have a child " +
127 "node");
128 }
129
130 @Override
131 public LeafNode.Builder createChildBuilder(String name, String nameSpace,
132 Object value) {
133 throw new IllegalStateException("leaf node can't have a child " +
134 "node");
135 }
136
137 @Override
138 public InnerNode.Builder deleteChild(NodeKey key) {
139 throw new IllegalStateException("leaf node can't have a child " +
140 "node");
141 }
142
143 @Override
144 public InnerNode.Builder getChildBuilder(NodeKey key) {
145 throw new IllegalStateException("leaf node can't have a child " +
146 "node");
147 }
148
149
150 @Override
151 public InnerNode.Builder addKeyLeaf(String name, String nameSpace, Object val) {
152 throw new IllegalStateException("leaf node can't have a key " +
153 "leaves node");
154 }
155
156 @Override
157 public Builder addLeafListValue(Object val) {
158 LeafListKey.LeafListKeyBuilder leafListKeyBuilder;
159 if (!(keyBuilder instanceof LeafListKey.LeafListKeyBuilder)) {
160 if (keyBuilder instanceof ListKey.ListKeyBuilder) {
161 throw new ModelException(NON_KEY_LEAF);
162 }
163
164 leafListKeyBuilder = new LeafListKey.LeafListKeyBuilder();
165 NodeKey key = keyBuilder.build();
166 leafListKeyBuilder.schemaId(key.schemaId());
167 } else {
168 leafListKeyBuilder = (LeafListKey.LeafListKeyBuilder) keyBuilder;
169 }
170
171 leafListKeyBuilder.value(val);
172 keyBuilder = leafListKeyBuilder;
173 return this;
174 }
175
176 /**
177 * Builds a leaf node object.
178 *
179 * @return leaf node
180 */
181 @Override
182 public LeafNode build() {
183 if (type == null) {
184 throw new IllegalStateException("node should have a type.");
185 }
186 if (key == null) {
187 key = keyBuilder.build();
188 }
189 return new LeafNode(this);
190 }
191 }
Thomas Vachuskaf40fb572016-11-20 11:43:57 -0800192}