BUG 1975 - yang unkeyed list is transformed to map node
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / transform / dom / parser / DomToNormalizedNodeParserFactory.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.impl.schema.transform.dom.parser;
9
10 import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
11 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
12 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
13 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
14 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
15 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
16 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
17 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
18 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
20 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
21 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
22 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider;
23 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser;
24 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParserFactory;
25 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher;
26 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
28 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
32 import org.w3c.dom.Element;
33
34 public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory<Element> {
35     private final AugmentationNodeDomParser augmentationNodeParser;
36     private final ChoiceNodeDomParser choiceNodeParser;
37     private final ContainerNodeDomParser containerNodeParser;
38     private final LeafNodeDomParser leafNodeParser;
39     private final LeafSetEntryNodeDomParser leafSetEntryNodeParser;
40     private final LeafSetNodeDomParser leafSetNodeParser;
41     private final MapNodeDomParser mapNodeParser;
42     private final MapEntryNodeDomParser mapEntryNodeParser;
43     private final UnkeyedListEntryNodeDomParser unkeyedListEntryNodeParser;
44     private final UnkeyedListNodeDomParser unkeyedListNodeParser;
45     private final OrderedListNodeDomParser orderedListNodeParser;
46
47     private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) {
48         leafNodeParser = new LeafNodeDomParser(codecProvider);
49         leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider);
50         leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
51
52         final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
53
54         };
55
56         containerNodeParser = new ContainerNodeDomParser(dispatcher);
57         mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher);
58         mapNodeParser = new MapNodeDomParser(mapEntryNodeParser);
59         orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser);
60         unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher);
61         unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser);
62         choiceNodeParser = new ChoiceNodeDomParser(dispatcher);
63         augmentationNodeParser = new AugmentationNodeDomParser(dispatcher);
64     }
65
66     public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) {
67         return new DomToNormalizedNodeParserFactory(codecProvider);
68     }
69
70     @Override
71     public ToNormalizedNodeParser<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
72         return augmentationNodeParser;
73     }
74
75     @Override
76     public ToNormalizedNodeParser<Element, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeParser() {
77         return choiceNodeParser;
78     }
79
80     @Override
81     public ToNormalizedNodeParser<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
82         return containerNodeParser;
83     }
84
85     @Override
86     public ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
87         return leafNodeParser;
88     }
89
90     @Override
91     public ToNormalizedNodeParser<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser() {
92         return leafSetEntryNodeParser;
93     }
94
95     @Override
96     public ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
97         return leafSetNodeParser;
98     }
99
100     @Override
101     public ToNormalizedNodeParser<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeParser() {
102         return mapEntryNodeParser;
103     }
104
105     @Override
106     public ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
107         return mapNodeParser;
108     }
109
110     @Override
111     public ToNormalizedNodeParser<Element, UnkeyedListNode, ListSchemaNode> getUnkeyedListNodeParser() {
112         return unkeyedListNodeParser;
113     }
114
115     @Override
116     public ToNormalizedNodeParser<Element, UnkeyedListEntryNode, ListSchemaNode> getUnkeyedListEntryNodeParser() {
117         return unkeyedListEntryNodeParser;
118     }
119
120     @Override
121     public ToNormalizedNodeParser<Element, OrderedMapNode, ListSchemaNode> getOrderedListNodeParser() {
122         return orderedListNodeParser;
123     }
124
125     @Override
126     public ToNormalizedNodeParser<Element, AnyXmlNode, AnyXmlSchemaNode> getAnyXmlNodeParser() {
127         throw new UnsupportedOperationException();
128     }
129 }