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