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.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;
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;
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();
56 final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
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);
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();
77 final NodeParserDispatcher<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(this) {
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);
91 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) {
92 return new DomToNormalizedNodeParserFactory(codecProvider, schema, strictParsing);
95 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema) {
96 return new DomToNormalizedNodeParserFactory(codecProvider, schema, true);
100 public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) {
101 return new DomToNormalizedNodeParserFactory(codecProvider);
105 public ToNormalizedNodeParser<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
106 return augmentationNodeParser;
110 public ToNormalizedNodeParser<Element, ChoiceNode, ChoiceSchemaNode> getChoiceNodeParser() {
111 return choiceNodeParser;
115 public ToNormalizedNodeParser<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
116 return containerNodeParser;
120 public ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
121 return leafNodeParser;
125 public ToNormalizedNodeParser<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser() {
126 return leafSetEntryNodeParser;
130 public ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
131 return leafSetNodeParser;
135 public ToNormalizedNodeParser<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeParser() {
136 return mapEntryNodeParser;
140 public ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
141 return mapNodeParser;
145 public ToNormalizedNodeParser<Element, UnkeyedListNode, ListSchemaNode> getUnkeyedListNodeParser() {
146 return unkeyedListNodeParser;
150 public ToNormalizedNodeParser<Element, UnkeyedListEntryNode, ListSchemaNode> getUnkeyedListEntryNodeParser() {
151 return unkeyedListEntryNodeParser;
155 public ToNormalizedNodeParser<Element, OrderedMapNode, ListSchemaNode> getOrderedListNodeParser() {
156 return orderedListNodeParser;
160 public ToNormalizedNodeParser<Element, AnyXmlNode, AnyXmlSchemaNode> getAnyXmlNodeParser() {
161 return anyXmlNodeParser;