294ac0232dc0d8ff51e095dc987000a694eec2d4
[yangtools.git] / yang / yang-data-codec-gson / src / test / java / org / opendaylight / yangtools / yang / data / codec / gson / TestingNormalizedNodeStructuresCreator.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.data.codec.gson;
9
10 import com.google.common.collect.Lists;
11 import com.google.common.collect.Sets;
12 import java.util.HashMap;
13 import java.util.Map;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
21 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
22 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
24 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
25 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
27 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
28 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
31 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
32 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder;
33 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
34 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
35 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
36
37 public class TestingNormalizedNodeStructuresCreator {
38
39     @SafeVarargs
40     static NormalizedNode<?, ?> cont1Node(
41             final DataContainerChild<? extends PathArgument, ?>... children) {
42         DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> cont1 = Builders.containerBuilder();
43         cont1.withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "cont1")));
44
45         cont1.withValue(Lists.newArrayList(children));
46         return cont1.build();
47     }
48
49     private static DataContainerChild<? extends PathArgument, ?> lst12Node() {
50         CollectionNodeBuilder<UnkeyedListEntryNode, UnkeyedListNode> lst12Builder = Builders.unkeyedListBuilder()
51                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lst12")));
52         lst12Builder.withChild(lst12Entry1Node());
53         return lst12Builder.build();
54     }
55
56     private static UnkeyedListEntryNode lst12Entry1Node() {
57         DataContainerNodeAttrBuilder<NodeIdentifier, UnkeyedListEntryNode> lst12Entry1Builder = Builders
58                 .unkeyedListEntryBuilder();
59         lst12Entry1Builder
60                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lst12")));
61         lst12Entry1Builder.withChild(Builders.leafBuilder()
62                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf121")))
63                 .withValue("lf121 value").build());
64         return lst12Entry1Builder.build();
65     }
66
67     private static DataContainerChild<? extends PathArgument, ?> choc12Node() {
68         DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> choc12Builder = Builders.choiceBuilder()
69                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "choc12")));
70
71         choc12Builder.withChild(lf17Node());
72         return choc12Builder.build();
73     }
74
75     protected static LeafNode<Object> lf17Node() {
76         return Builders.leafBuilder()
77                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf17")))
78                 .withValue("lf17 value").build();
79     }
80
81     private static DataContainerChild<? extends PathArgument, ?> externalAugmentC11AWithLf15_11AndLf15_12Node() {
82         DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> augmentationBuilder = Builders
83                 .augmentationBuilder();
84         augmentationBuilder.withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(
85                 QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_11"),
86                 QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_12"))));
87         augmentationBuilder.withChild(lf15_11NodeExternal());
88         augmentationBuilder.withChild(lf15_12NodeExternal());
89         return augmentationBuilder.build();
90     }
91
92     private static LeafNode<Object> lf15_12NodeExternal() {
93         return Builders
94                 .leafBuilder()
95                 .withNodeIdentifier(
96                         new NodeIdentifier(QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_12")))
97                 .withValue("lf15_12 value from augmentation").build();
98     }
99
100     private static LeafNode<Object> lf15_11NodeExternal() {
101         return Builders
102                 .leafBuilder()
103                 .withNodeIdentifier(
104                         new NodeIdentifier(QName.create("ns:complex:json:augmentation", "2014-08-14", "lf15_11")))
105                 .withValue("lf15_11 value from augmentation").build();
106     }
107
108     @SafeVarargs
109     private static DataContainerChild<? extends PathArgument, ?> choc11Node(
110             final DataContainerChild<? extends PathArgument, ?>... children) {
111         DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> choc11Builder = Builders.choiceBuilder()
112                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "choc11")));
113         choc11Builder.withValue(Lists.newArrayList(children));
114         // choc11Builder.addChild(lf13Node());
115         // choc11Builder.addChild(augmentChoc11_c11A_lf1511AndLf1512Children());
116         // choc11Builder.addChild(augmentChoc11_c11_lf1521Children());
117         return choc11Builder.build();
118     }
119
120     private static LeafNode<Object> lf13Node() {
121         return Builders.leafBuilder()
122                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf13")))
123                 .withValue("lf13 value").build();
124     }
125
126     private static DataContainerChild<? extends PathArgument, ?> augmentC11AWithLf15_21Node() {
127         return Builders.augmentationBuilder().withNodeIdentifier(
128             new AugmentationIdentifier(Sets.newHashSet(QName.create("ns:complex:json", "2014-08-11", "lf15_21"))))
129                 .withChild(lf15_21Node()).build();
130     }
131
132     private static LeafNode<Object> lf15_21Node() {
133         return Builders.leafBuilder()
134                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_21")))
135                 .withValue("lf15_21 value").build();
136     }
137
138     private static DataContainerChild<? extends PathArgument, ?> augmentC11AWithLf15_11AndLf15_12Node() {
139         return Builders.augmentationBuilder()
140                 .withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(
141                     QName.create("ns:complex:json", "2014-08-11", "lf15_11"),
142                     QName.create("ns:complex:json", "2014-08-11", "lf15_12"))))
143                 .withChild(lf15_11Node())
144                 .withChild(lf15_12Node())
145                 .build();
146     }
147
148     private static LeafNode<Object> lf15_12Node() {
149         return Builders.leafBuilder()
150                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_12")))
151                 .withValue(QName.create("ns:complex:json", "2014-08-11", "lf11")).build();
152     }
153
154     private static LeafNode<Object> lf15_11Node() {
155         return Builders.leafBuilder()
156                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf15_11")))
157                 .withValue(Sets.newHashSet("one", "two")).build();
158     }
159
160     private static DataContainerChild<? extends PathArgument, ?> lf12_1Node() {
161         DataContainerNodeBuilder<AugmentationIdentifier, AugmentationNode> augmentBuilder = Builders
162                 .augmentationBuilder().withNodeIdentifier(
163                         new AugmentationIdentifier(Sets.newHashSet(
164                                 QName.create("ns:complex:json", "2014-08-11", "lf12_1"),
165                                 QName.create("ns:complex:json", "2014-08-11", "lf12_2"))));
166         augmentBuilder.withChild(Builders.leafBuilder()
167                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf12_1")))
168                 .withValue("lf12 value").build());
169         return augmentBuilder.build();
170     }
171
172     private static DataContainerChild<? extends PathArgument, ?> childLst11() {
173
174         DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> lst11Entry1Builder = Builders
175                 .mapEntryBuilder();
176
177         Map<QName, Object> key = new HashMap<>();
178         key.put(QName.create("ns:complex:json", "2014-08-11", "key111"), "key111 value");
179         key.put(QName.create("ns:complex:json", "2014-08-11", "lf111"), "lf111 value");
180
181         lst11Entry1Builder.withNodeIdentifier(new NodeIdentifierWithPredicates(QName.create("ns:complex:json",
182                 "2014-08-11", "lst11"), key));
183         lst11Entry1Builder.withChild(Builders.leafBuilder()
184                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "key111")))
185                 .withValue("key111 value").build());
186         lst11Entry1Builder.withChild(Builders.leafBuilder()
187                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf112")))
188                 .withValue(lf112Value()).build());
189         lst11Entry1Builder.withChild(Builders.leafBuilder()
190                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf113")))
191                 .withValue("lf113 value").build());
192         lst11Entry1Builder.withChild(Builders.leafBuilder()
193                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf111")))
194                 .withValue("lf111 value").build());
195         return Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(
196             QName.create("ns:complex:json", "2014-08-11", "lst11"))).withChild(lst11Entry1Builder.build()).build();
197     }
198
199     private static Object lf112Value() {
200         return YangInstanceIdentifier.create(
201                 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "cont1")),
202                 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11")),
203                 new NodeWithValue<>(QName.create("ns:complex:json", "2014-08-11", "lflst11"),"foo")
204         );
205     }
206
207     private static DataContainerChild<? extends PathArgument, ?> childLflst11() {
208         ListNodeBuilder<Object, LeafSetEntryNode<Object>> lflst11 = Builders.leafSetBuilder().withNodeIdentifier(
209                 new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lflst11")));
210         lflst11.withChild(Builders
211                 .leafSetEntryBuilder()
212                 .withNodeIdentifier(new NodeWithValue<>(QName.create("ns:complex:json", "2014-08-11", "lflst11"),
213                         "lflst11 value1"))
214                 .withValue("lflst11 value1").build());
215         lflst11.withChild(Builders
216                 .leafSetEntryBuilder()
217                 .withNodeIdentifier(new NodeWithValue<>(QName.create("ns:complex:json", "2014-08-11", "lflst11"),
218                         "lflst11 value2"))
219                 .withValue("lflst11 value2").build());
220         return lflst11.build();
221     }
222
223     private static DataContainerChild<? extends PathArgument, ?> childLflst11Multiline() {
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()
228                 .withNodeIdentifier(new NodeWithValue<>(QName.create("ns:complex:json", "2014-08-11", "lflst11"),
229                         "lflst11 value1\nanother line 1"))
230                 .withValue("lflst11 value1\nanother line 1").build());
231         lflst11.withChild(Builders
232                 .leafSetEntryBuilder()
233                 .withNodeIdentifier(new NodeWithValue<>(QName.create("ns:complex:json", "2014-08-11", "lflst11"),
234                         "lflst11 value2\r\nanother line 2"))
235                 .withValue("lflst11 value2\r\nanother line 2").build());
236         return lflst11.build();
237     }
238
239     public static NormalizedNode<?, ?> leafNodeInContainer() {
240         LeafNode<Object> lf11 = Builders.leafBuilder()
241                 .withNodeIdentifier(new NodeIdentifier(QName.create("ns:complex:json", "2014-08-11", "lf11")))
242                 .withValue(453).build();
243         return cont1Node(lf11);
244     }
245
246     public static NormalizedNode<?, ?> leafListNodeInContainer() {
247         return cont1Node(childLflst11());
248     }
249
250     public static NormalizedNode<?, ?> leafListNodeInContainerMultiline() {
251         return cont1Node(childLflst11Multiline());
252     }
253
254     public static NormalizedNode<?, ?> keyedListNodeInContainer() {
255         return cont1Node(childLst11());
256     }
257
258     public static NormalizedNode<?, ?> leafNodeViaAugmentationInContainer() {
259         return cont1Node(lf12_1Node());
260     }
261
262     public static NormalizedNode<?, ?> choiceNodeInContainer() {
263         return cont1Node(choc11Node(lf13Node()));
264     }
265
266     /**
267      * choc11 contains lf13, lf15_11 and lf15_12 are added via external augmentation.
268      */
269     public static NormalizedNode<?, ?> caseNodeAugmentationInChoiceInContainer() {
270         return cont1Node(choc11Node(augmentC11AWithLf15_11AndLf15_12Node(), lf13Node(), augmentC11AWithLf15_21Node()));
271     }
272
273     public static NormalizedNode<?, ?> caseNodeExternalAugmentationInChoiceInContainer() {
274         return cont1Node(choc11Node(lf13Node(), augmentC11AWithLf15_11AndLf15_12Node(),
275             externalAugmentC11AWithLf15_11AndLf15_12Node()));
276     }
277
278     public static NormalizedNode<?, ?> choiceNodeAugmentationInContainer() {
279         return cont1Node(choc12Node());
280     }
281
282     public static NormalizedNode<?, ?> unkeyedNodeInContainer() {
283         return cont1Node(lst12Node());
284     }
285
286     public static NormalizedNode<?, ?> topLevelContainer() {
287         return cont1Node();
288     }
289 }