2 * Copyright (c) 2014 Cisco Systems, Inc. and others. 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.data.codec.gson;
10 import com.google.common.collect.Lists;
11 import com.google.common.collect.Sets;
12 import java.util.HashMap;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
16 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
23 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
24 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
27 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
28 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
34 import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
35 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
36 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
37 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
38 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
39 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
40 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
42 public class TestingNormalizedNodeStructuresCreator {
44 static NormalizedNode<?, ?> cont1Node(
45 DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>... children) {
46 DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> cont1 = Builders.containerBuilder();
47 cont1.withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "cont1")));
49 cont1.withValue(Lists.newArrayList(children));
53 private static DataContainerChild<? extends PathArgument, ?> lst12Node() {
54 CollectionNodeBuilder<UnkeyedListEntryNode, UnkeyedListNode> lst12Builder = Builders.unkeyedListBuilder()
55 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lst12")));
56 lst12Builder.withChild(lst12Entry1Node());
57 return lst12Builder.build();
60 private static UnkeyedListEntryNode lst12Entry1Node() {
61 DataContainerNodeAttrBuilder<NodeIdentifier, UnkeyedListEntryNode> lst12Entry1Builder = Builders
62 .unkeyedListEntryBuilder();
64 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lst12")));
65 lst12Entry1Builder.withChild(Builders.leafBuilder()
66 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf121")))
67 .withValue("lf121 value").build());
68 return lst12Entry1Builder.build();
71 private static DataContainerChild<? extends PathArgument, ?> choc12Node() {
72 DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> choc12Builder = Builders.choiceBuilder()
73 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "choc12")));
75 // DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> choc12Augmentation = Builders
76 // .augmentationBuilder();
77 // choc12Augmentation.withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(QName.create(
78 // "ns:complex:json", "2014-08-11", "c12B"))));
79 // choc12Augmentation.withChild(lf17Node());
81 choc12Builder.withChild(lf17Node());
82 return choc12Builder.build();
85 protected static LeafNode<Object> lf17Node() {
86 return Builders.leafBuilder()
87 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf17")))
88 .withValue("lf17 value").build();
91 private static DataContainerChild<? extends PathArgument, ?> externalAugmentC11AWithLf15_11AndLf15_12Node() {
92 DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> augmentationBuilder = Builders
93 .augmentationBuilder();
94 augmentationBuilder.withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(
95 QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_11"),
96 QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_12"))));
97 augmentationBuilder.withChild(lf15_11NodeExternal());
98 augmentationBuilder.withChild(lf15_12NodeExternal());
99 return augmentationBuilder.build();
102 private static LeafNode<Object> lf15_12NodeExternal() {
106 new NodeIdentifier(QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_12")))
107 .withValue("lf15_12 value from augmentation").build();
110 private static LeafNode<Object> lf15_11NodeExternal() {
114 new NodeIdentifier(QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_11")))
115 .withValue("lf15_11 value from augmentation").build();
118 private static DataContainerChild<? extends PathArgument, ?> choc11Node(
119 DataContainerChild<? extends PathArgument, ?>... children) {
120 DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> choc11Builder = Builders.choiceBuilder()
121 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "choc11")));
122 choc11Builder.withValue(Lists.newArrayList(children));
123 // choc11Builder.addChild(lf13Node());
124 // choc11Builder.addChild(augmentChoc11_c11A_lf1511AndLf1512Children());
125 // choc11Builder.addChild(augmentChoc11_c11_lf1521Children());
126 return choc11Builder.build();
129 private static LeafNode<Object> lf13Node() {
130 return Builders.leafBuilder()
131 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf13")))
132 .withValue("lf13 value").build();
135 private static DataContainerChild<? extends PathArgument, ?> augmentC11AWithLf15_21Node() {
136 DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> choc11_c11AugmentBuilder = Builders
137 .augmentationBuilder();
138 choc11_c11AugmentBuilder.withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(QName.create(
139 "ns:complex:json", "2014-08-11", "lf15_21"))));
141 choc11_c11AugmentBuilder.withChild(lf15_21Node());
142 return choc11_c11AugmentBuilder.build();
145 private static LeafNode<Object> lf15_21Node() {
146 return Builders.leafBuilder()
147 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_21")))
148 .withValue("lf15_21 value").build();
151 private static DataContainerChild<? extends PathArgument, ?> augmentC11AWithLf15_11AndLf15_12Node() {
152 DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> choc11_c11AugmentBuilder = Builders
153 .augmentationBuilder();
154 choc11_c11AugmentBuilder.withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(
155 QName.create("ns:complex:json", "2014-08-11", "lf15_11"),
156 QName.create("ns:complex:json", "2014-08-11", "lf15_12"))));
157 choc11_c11AugmentBuilder.withChild(lf15_11Node());
158 choc11_c11AugmentBuilder.withChild(lf15_12Node());
159 return choc11_c11AugmentBuilder.build();
162 private static LeafNode<Object> lf15_12Node() {
163 return Builders.leafBuilder()
164 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_12")))
165 .withValue(QName.create("ns:complex:json", "2014-08-11", "lf11")).build();
168 private static LeafNode<Object> lf15_11Node() {
169 return Builders.leafBuilder()
170 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_11")))
171 .withValue(Sets.newHashSet("one", "two")).build();
174 private static DataContainerChild<? extends PathArgument, ?> lf12_1Node() {
175 DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> augmentBuilder = Builders
176 .augmentationBuilder().withNodeIdentifier(
177 new AugmentationIdentifier(Sets.newHashSet(
178 QName.create("ns:complex:json", "2014-08-11", "lf12_1"),
179 QName.create("ns:complex:json", "2014-08-11", "lf12_2"))));
180 augmentBuilder.withChild(Builders.leafBuilder()
181 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf12_1")))
182 .withValue("lf12 value").build());
183 return augmentBuilder.build();
186 private static DataContainerChild<? extends PathArgument, ?> childLst11() {
187 CollectionNodeBuilder<MapEntryNode, MapNode> lst11 = Builders.mapBuilder().withNodeIdentifier(
188 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lst11")));
190 DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> lst11Entry1Builder = Builders
193 Map<QName, Object> key = new HashMap<>();
194 key.put(QName.create("ns:complex:json", "2014-08-11", "key111"), "key111 value");
195 key.put(QName.create("ns:complex:json", "2014-08-11", "lf111"), "lf111 value");
197 lst11Entry1Builder.withNodeIdentifier(new NodeIdentifierWithPredicates(QName.create("ns:complex:json",
198 "2014-08-11", "lst11"), key));
199 lst11Entry1Builder.withChild(Builders.leafBuilder()
200 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "key111")))
201 .withValue("key111 value").build());
202 lst11Entry1Builder.withChild(Builders.leafBuilder()
203 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf112")))
204 .withValue(lf112Value()).build());
205 lst11Entry1Builder.withChild(Builders.leafBuilder()
206 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf113")))
207 .withValue("lf113 value").build());
208 lst11Entry1Builder.withChild(Builders.leafBuilder()
209 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf111")))
210 .withValue("lf111 value").build());
211 lst11.withChild(lst11Entry1Builder.build());
212 return lst11.build();
215 private static Object lf112Value() {
216 return YangInstanceIdentifier.create(
217 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "cont1")),
218 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11")),
219 new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"),"foo")
223 private static DataContainerChild<? extends PathArgument, ?> childLflst11() {
224 ListNodeBuilder<Object, LeafSetEntryNode<Object>> lflst11 = Builders.leafSetBuilder().withNodeIdentifier(
225 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11")));
226 lflst11.withChild(Builders
227 .leafSetEntryBuilder()
229 new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value1"))
230 .withValue("lflst11 value1").build());
231 lflst11.withChild(Builders
232 .leafSetEntryBuilder()
234 new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value2"))
235 .withValue("lflst11 value2").build());
236 return lflst11.build();
239 private static DataContainerChild<? extends PathArgument, ?> childLflst11Multiline() {
240 ListNodeBuilder<Object, LeafSetEntryNode<Object>> lflst11 = Builders.leafSetBuilder().withNodeIdentifier(
241 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11")));
242 lflst11.withChild(Builders
243 .leafSetEntryBuilder()
245 new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value1\nanother line 1"))
246 .withValue("lflst11 value1\nanother line 1").build());
247 lflst11.withChild(Builders
248 .leafSetEntryBuilder()
250 new NodeWithValue(QName.create("ns:complex:json", "2014-08-11", "lflst11"), "lflst11 value2\r\nanother line 2"))
251 .withValue("lflst11 value2\r\nanother line 2").build());
252 return lflst11.build();
255 private static CompositeNode prepareLf12Value() {
256 SimpleNode<?> anyxmlInData = NodeFactory.createImmutableSimpleNode(
257 QName.create("ns:complex:json", "2014-08-11", "anyxml-in-data"), null, "foo");
258 return ImmutableCompositeNode.builder().add(anyxmlInData)
259 .setQName(QName.create("ns:complex:json", "2014-08-11", "lf12-any")).build();
262 private static CompositeNode prepareLf13Value() {
263 SimpleNode<?> anyxmlInData = NodeFactory.createImmutableSimpleNode(
264 QName.create("ns:complex:json", "2014-08-11", "anyxml-in-data"), null, "foo");
265 return ImmutableCompositeNode.builder().add(anyxmlInData)
266 .setQName(QName.create("ns:complex:json", "2014-08-11", "lf13-any")).build();
269 public static NormalizedNode<?, ?> leafNodeInContainer() {
270 LeafNode<Object> lf11 = Builders.leafBuilder()
271 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf11")))
272 .withValue(453).build();
273 return cont1Node(lf11);
276 public static NormalizedNode<?, ?> leafListNodeInContainer() {
277 return cont1Node(childLflst11());
279 public static NormalizedNode<?, ?> leafListNodeInContainerMultiline() {
280 return cont1Node(childLflst11Multiline());
283 public static NormalizedNode<?, ?> keyedListNodeInContainer() {
284 return cont1Node(childLst11());
287 public static NormalizedNode<?, ?> leafNodeViaAugmentationInContainer() {
288 return cont1Node(lf12_1Node());
291 public static NormalizedNode<?, ?> choiceNodeInContainer() {
292 return cont1Node(choc11Node(lf13Node()));
296 * choc11 contains lf13, lf15_11 and lf15_12 are added via external augmentation
300 public static NormalizedNode<?, ?> caseNodeAugmentationInChoiceInContainer() {
301 return cont1Node(choc11Node(lf13Node(), lf15_11Node(), lf15_12Node(), lf15_21Node()));
304 public static NormalizedNode<?, ?> caseNodeExternalAugmentationInChoiceInContainer() {
305 return cont1Node(choc11Node(lf13Node(), lf15_11Node(), lf15_12Node(), lf15_11NodeExternal(), lf15_12NodeExternal()));
308 public static NormalizedNode<?, ?> choiceNodeAugmentationInContainer() {
309 return cont1Node(choc12Node());
312 public static NormalizedNode<?, ?> unkeyedNodeInContainer() {
313 return cont1Node(lst12Node());