Add parser support for non-strict schema lookup.
[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.ChoiceSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
33 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
34 import org.w3c.dom.Element;
35
36 public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory<Element> {
37     private final AugmentationNodeDomParser augmentationNodeParser;
38     private final ChoiceNodeDomParser choiceNodeParser;
39     private final ContainerNodeDomParser containerNodeParser;
40     private final LeafNodeDomParser leafNodeParser;
41     private final LeafSetEntryNodeDomParser leafSetEntryNodeParser;
42     private final LeafSetNodeDomParser leafSetNodeParser;
43     private final MapNodeDomParser mapNodeParser;
44     private final MapEntryNodeDomParser mapEntryNodeParser;
45     private final UnkeyedListEntryNodeDomParser unkeyedListEntryNodeParser;
46     private final UnkeyedListNodeDomParser unkeyedListNodeParser;
47     private final OrderedListNodeDomParser orderedListNodeParser;
48     private final AnyXmlDomParser anyXmlNodeParser;
49
50     private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) {
51         leafNodeParser = new LeafNodeDomParser(codecProvider, schema);
52         leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema);
53         leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
54         anyXmlNodeParser = new AnyXmlDomParser();
55
56         final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
57
58         };
59
60         containerNodeParser = new ContainerNodeDomParser(dispatcher, strictParsing);
61         mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher, strictParsing);
62         mapNodeParser = new MapNodeDomParser(mapEntryNodeParser);
63         orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser);
64         unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher);
65         unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser);
66         choiceNodeParser = new ChoiceNodeDomParser(dispatcher);
67         augmentationNodeParser = new AugmentationNodeDomParser(dispatcher, strictParsing);
68     }
69
70     @Deprecated
71     private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) {
72         leafNodeParser = new LeafNodeDomParser(codecProvider);
73         leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider);
74         leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
75         anyXmlNodeParser = new AnyXmlDomParser();
76
77         final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
78
79         };
80
81         containerNodeParser = new ContainerNodeDomParser(dispatcher);
82         mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher);
83         mapNodeParser = new MapNodeDomParser(mapEntryNodeParser);
84         orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser);
85         unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher);
86         unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser);
87         choiceNodeParser = new ChoiceNodeDomParser(dispatcher);
88         augmentationNodeParser = new AugmentationNodeDomParser(dispatcher);
89     }
90
91     public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) {
92         return new DomToNormalizedNodeParserFactory(codecProvider, schema, strictParsing);
93     }
94
95     public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema) {
96         return new DomToNormalizedNodeParserFactory(codecProvider, schema, true);
97     }
98
99     @Deprecated
100     public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) {
101         return new DomToNormalizedNodeParserFactory(codecProvider);
102     }
103
104     @Override
105     public ToNormalizedNodeParser<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
106         return augmentationNodeParser;
107     }
108
109     @Override
110     public ToNormalizedNodeParser<Element, ChoiceNode, ChoiceSchemaNode> getChoiceNodeParser() {
111         return choiceNodeParser;
112     }
113
114     @Override
115     public ToNormalizedNodeParser<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
116         return containerNodeParser;
117     }
118
119     @Override
120     public ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
121         return leafNodeParser;
122     }
123
124     @Override
125     public ToNormalizedNodeParser<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser() {
126         return leafSetEntryNodeParser;
127     }
128
129     @Override
130     public ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
131         return leafSetNodeParser;
132     }
133
134     @Override
135     public ToNormalizedNodeParser<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeParser() {
136         return mapEntryNodeParser;
137     }
138
139     @Override
140     public ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
141         return mapNodeParser;
142     }
143
144     @Override
145     public ToNormalizedNodeParser<Element, UnkeyedListNode, ListSchemaNode> getUnkeyedListNodeParser() {
146         return unkeyedListNodeParser;
147     }
148
149     @Override
150     public ToNormalizedNodeParser<Element, UnkeyedListEntryNode, ListSchemaNode> getUnkeyedListEntryNodeParser() {
151         return unkeyedListEntryNodeParser;
152     }
153
154     @Override
155     public ToNormalizedNodeParser<Element, OrderedMapNode, ListSchemaNode> getOrderedListNodeParser() {
156         return orderedListNodeParser;
157     }
158
159     @Override
160     public ToNormalizedNodeParser<Element, AnyXmlNode, AnyXmlSchemaNode> getAnyXmlNodeParser() {
161         return anyXmlNodeParser;
162     }
163 }