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.impl.schema.transform.dom.parser;
10 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
11 import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
12 import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
13 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
14 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
15 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
16 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
17 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
18 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
20 import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
21 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
22 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
23 import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider;
24 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser;
25 import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParserFactory;
26 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.BaseDispatcherParser;
27 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ExtensibleParser;
28 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafNodeBaseParser;
29 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafSetEntryNodeBaseParser;
30 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ListNodeBaseParser;
31 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher;
32 import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
33 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
34 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
35 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
36 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
37 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
38 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
39 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
40 import org.w3c.dom.Element;
42 public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory<Element> {
44 private final AugmentationNodeDomParser augmentationNodeParser;
45 private final ChoiceNodeDomParser choiceNodeParser;
46 private final ContainerNodeDomParser containerNodeParser;
47 private final LeafNodeDomParser leafNodeParser;
48 private final LeafSetEntryNodeDomParser leafSetEntryNodeParser;
49 private final LeafSetNodeDomParser leafSetNodeParser;
50 private final MapNodeDomParser mapNodeParser;
51 private final MapEntryNodeDomParser mapEntryNodeParser;
52 private final UnkeyedListEntryNodeDomParser unkeyedListEntryNodeParser;
53 private final UnkeyedListNodeDomParser unkeyedListNodeParser;
54 private final OrderedListNodeDomParser orderedListNodeParser;
55 private final AnyXmlDomParser anyXmlNodeParser;
57 private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) {
58 leafNodeParser = new LeafNodeDomParser(codecProvider, schema);
59 leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema);
60 leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
61 anyXmlNodeParser = new AnyXmlDomParser();
63 final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
67 containerNodeParser = new ContainerNodeDomParser(dispatcher, strictParsing);
68 mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher, strictParsing);
69 mapNodeParser = new MapNodeDomParser(mapEntryNodeParser);
70 orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser);
71 unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher);
72 unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser);
73 choiceNodeParser = new ChoiceNodeDomParser(dispatcher);
74 augmentationNodeParser = new AugmentationNodeDomParser(dispatcher, strictParsing);
77 private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema,
78 final BuildingStrategyProvider buildingStratProvider, final boolean strictParsing) {
79 leafNodeParser = new LeafNodeDomParser(codecProvider, schema, buildingStratProvider.forLeaf());
80 leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema, buildingStratProvider.forLeafSetEntry());
82 // no buildingStrategy for Augment (no use case for now)
83 leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
84 // no buildingStrategy for anyXml (probably not necessary)
85 anyXmlNodeParser = new AnyXmlDomParser();
87 final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
91 containerNodeParser = new ContainerNodeDomParser(dispatcher, buildingStratProvider.forContainer(), strictParsing);
92 mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher, buildingStratProvider.forMapEntry(), strictParsing);
93 mapNodeParser = new MapNodeDomParser(mapEntryNodeParser, buildingStratProvider.forMap());
94 orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser, buildingStratProvider.forOrderedList());
95 unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(buildingStratProvider.forUnkeyedListEntry(), dispatcher);
96 unkeyedListNodeParser = new UnkeyedListNodeDomParser(buildingStratProvider.forUnkeyedList(), unkeyedListEntryNodeParser);
97 choiceNodeParser = new ChoiceNodeDomParser(dispatcher, buildingStratProvider.forChoice());
98 // no buildingStrategy for Augment (no use case for now)
99 augmentationNodeParser = new AugmentationNodeDomParser(buildingStratProvider.forAugmentation(), dispatcher, strictParsing);
103 private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) {
104 leafNodeParser = new LeafNodeDomParser(codecProvider);
105 leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider);
106 leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser);
107 anyXmlNodeParser = new AnyXmlDomParser();
109 final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
113 containerNodeParser = new ContainerNodeDomParser(dispatcher);
114 mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher);
115 mapNodeParser = new MapNodeDomParser(mapEntryNodeParser);
116 orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser);
117 unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher);
118 unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser);
119 choiceNodeParser = new ChoiceNodeDomParser(dispatcher);
120 augmentationNodeParser = new AugmentationNodeDomParser(dispatcher);
123 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) {
124 return new DomToNormalizedNodeParserFactory(codecProvider, schema, strictParsing);
127 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema) {
128 return new DomToNormalizedNodeParserFactory(codecProvider, schema, true);
131 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema,
132 final BuildingStrategyProvider buildingStratProvider) {
133 return new DomToNormalizedNodeParserFactory(codecProvider, schema, buildingStratProvider, true);
136 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema,
137 final BuildingStrategyProvider buildingStratProvider,
138 final boolean strictParsing) {
139 return new DomToNormalizedNodeParserFactory(codecProvider, schema, buildingStratProvider, strictParsing);
143 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) {
144 return new DomToNormalizedNodeParserFactory(codecProvider);
148 public ToNormalizedNodeParser<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
149 return augmentationNodeParser;
153 public ToNormalizedNodeParser<Element, ChoiceNode, ChoiceSchemaNode> getChoiceNodeParser() {
154 return choiceNodeParser;
158 public ToNormalizedNodeParser<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
159 return containerNodeParser;
163 public ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
164 return leafNodeParser;
168 public ToNormalizedNodeParser<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser() {
169 return leafSetEntryNodeParser;
173 public ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
174 return leafSetNodeParser;
178 public ToNormalizedNodeParser<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeParser() {
179 return mapEntryNodeParser;
183 public ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
184 return mapNodeParser;
188 public ToNormalizedNodeParser<Element, UnkeyedListNode, ListSchemaNode> getUnkeyedListNodeParser() {
189 return unkeyedListNodeParser;
193 public ToNormalizedNodeParser<Element, UnkeyedListEntryNode, ListSchemaNode> getUnkeyedListEntryNodeParser() {
194 return unkeyedListEntryNodeParser;
198 public ToNormalizedNodeParser<Element, OrderedMapNode, ListSchemaNode> getOrderedListNodeParser() {
199 return orderedListNodeParser;
203 public ToNormalizedNodeParser<Element, AnyXmlNode, AnyXmlSchemaNode> getAnyXmlNodeParser() {
204 return anyXmlNodeParser;
208 * Base provider of building strategies used for customizing parsing process
210 public static abstract class BuildingStrategyProvider {
212 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,LeafNode<?>> forLeaf() {
213 return new LeafNodeBaseParser.SimpleLeafBuildingStrategy();
216 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeWithValue,LeafSetEntryNode<?>> forLeafSetEntry() {
217 return new LeafSetEntryNodeBaseParser.SimpleLeafSetEntryBuildingStrategy();
220 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,ContainerNode> forContainer() {
221 return new BaseDispatcherParser.SimpleBuildingStrategy<>();
224 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifierWithPredicates,MapEntryNode> forMapEntry() {
225 return new BaseDispatcherParser.SimpleBuildingStrategy<>();
228 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,MapNode> forMap() {
229 return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>();
232 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,OrderedMapNode> forOrderedList() {
233 return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>();
236 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,UnkeyedListEntryNode> forUnkeyedListEntry() {
237 return new BaseDispatcherParser.SimpleBuildingStrategy<>();
240 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,UnkeyedListNode> forUnkeyedList() {
241 return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>();
244 protected ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.NodeIdentifier,ChoiceNode> forChoice() {
245 return new BaseDispatcherParser.SimpleBuildingStrategy<>();
248 public ExtensibleParser.BuildingStrategy<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> forAugmentation() {
249 return new BaseDispatcherParser.SimpleBuildingStrategy<>();