X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftransform%2Fdom%2Fparser%2FDomToNormalizedNodeParserFactory.java;h=fc4cae62e2e6a8d9009385ca0c8199ff14370089;hb=ea32c2c6fac2ebe9d0e30c9c4e5279c5ef0d2314;hp=af58c481543eb5b0a459fb381605d484507721ac;hpb=9e5540fb30986583d69e51f9290dbb651338f4b0;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java index af58c48154..fc4cae62e2 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; @@ -19,9 +20,15 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; +import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.ToNormalizedNodeParserFactory; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.BaseDispatcherParser; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ExtensibleParser; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafNodeBaseParser; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafSetEntryNodeBaseParser; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ListNodeBaseParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -31,9 +38,11 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode; import org.w3c.dom.Element; public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory { + private final AugmentationNodeDomParser augmentationNodeParser; private final ChoiceNodeDomParser choiceNodeParser; private final ContainerNodeDomParser containerNodeParser; @@ -45,9 +54,10 @@ public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeP private final UnkeyedListEntryNodeDomParser unkeyedListEntryNodeParser; private final UnkeyedListNodeDomParser unkeyedListNodeParser; private final OrderedListNodeDomParser orderedListNodeParser; + private final YangModeledAnyXmlDomParser yangModeledAnyXmlNodeParser; private final AnyXmlDomParser anyXmlNodeParser; - private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema) { + private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) { leafNodeParser = new LeafNodeDomParser(codecProvider, schema); leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema); leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser); @@ -57,44 +67,60 @@ public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeP }; - containerNodeParser = new ContainerNodeDomParser(dispatcher); - mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher); + yangModeledAnyXmlNodeParser = new YangModeledAnyXmlDomParser(dispatcher); + containerNodeParser = new ContainerNodeDomParser(dispatcher, strictParsing); + mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher, strictParsing); mapNodeParser = new MapNodeDomParser(mapEntryNodeParser); orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser); unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher); unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser); choiceNodeParser = new ChoiceNodeDomParser(dispatcher); - augmentationNodeParser = new AugmentationNodeDomParser(dispatcher); + augmentationNodeParser = new AugmentationNodeDomParser(dispatcher, strictParsing); } - @Deprecated - private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) { - leafNodeParser = new LeafNodeDomParser(codecProvider); - leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider); + private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider, final SchemaContext schema, + final BuildingStrategyProvider buildingStratProvider, final boolean strictParsing) { + leafNodeParser = new LeafNodeDomParser(codecProvider, schema, buildingStratProvider.forLeaf()); + leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider, schema, buildingStratProvider.forLeafSetEntry()); + + // no buildingStrategy for Augment (no use case for now) leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser); + // no buildingStrategy for anyXml (probably not necessary) anyXmlNodeParser = new AnyXmlDomParser(); final NodeParserDispatcher dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher(this) { }; - containerNodeParser = new ContainerNodeDomParser(dispatcher); - mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher); - mapNodeParser = new MapNodeDomParser(mapEntryNodeParser); - orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser); - unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(dispatcher); - unkeyedListNodeParser = new UnkeyedListNodeDomParser(unkeyedListEntryNodeParser); - choiceNodeParser = new ChoiceNodeDomParser(dispatcher); - augmentationNodeParser = new AugmentationNodeDomParser(dispatcher); + yangModeledAnyXmlNodeParser = new YangModeledAnyXmlDomParser(dispatcher); + containerNodeParser = new ContainerNodeDomParser(dispatcher, buildingStratProvider.forContainer(), strictParsing); + mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher, buildingStratProvider.forMapEntry(), strictParsing); + mapNodeParser = new MapNodeDomParser(mapEntryNodeParser, buildingStratProvider.forMap()); + orderedListNodeParser = new OrderedListNodeDomParser(mapEntryNodeParser, buildingStratProvider.forOrderedList()); + unkeyedListEntryNodeParser = new UnkeyedListEntryNodeDomParser(buildingStratProvider.forUnkeyedListEntry(), dispatcher); + unkeyedListNodeParser = new UnkeyedListNodeDomParser(buildingStratProvider.forUnkeyedList(), unkeyedListEntryNodeParser); + choiceNodeParser = new ChoiceNodeDomParser(dispatcher, buildingStratProvider.forChoice()); + // no buildingStrategy for Augment (no use case for now) + augmentationNodeParser = new AugmentationNodeDomParser(buildingStratProvider.forAugmentation(), dispatcher, strictParsing); + } + + public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, final boolean strictParsing) { + return new DomToNormalizedNodeParserFactory(codecProvider, schema, strictParsing); } public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema) { - return new DomToNormalizedNodeParserFactory(codecProvider, schema); + return new DomToNormalizedNodeParserFactory(codecProvider, schema, true); + } + + public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, + final BuildingStrategyProvider buildingStratProvider) { + return new DomToNormalizedNodeParserFactory(codecProvider, schema, buildingStratProvider, true); } - @Deprecated - public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) { - return new DomToNormalizedNodeParserFactory(codecProvider); + public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider, final SchemaContext schema, + final BuildingStrategyProvider buildingStratProvider, + final boolean strictParsing) { + return new DomToNormalizedNodeParserFactory(codecProvider, schema, buildingStratProvider, strictParsing); } @Override @@ -152,8 +178,60 @@ public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeP return orderedListNodeParser; } + @Override + public ToNormalizedNodeParser getYangModeledAnyXmlNodeParser() { + return yangModeledAnyXmlNodeParser; + } + @Override public ToNormalizedNodeParser getAnyXmlNodeParser() { return anyXmlNodeParser; } + + /** + * Base provider of building strategies used for customizing parsing process + */ + public static abstract class BuildingStrategyProvider { + + protected ExtensibleParser.BuildingStrategy> forLeaf() { + return new LeafNodeBaseParser.SimpleLeafBuildingStrategy(); + } + + protected ExtensibleParser.BuildingStrategy> forLeafSetEntry() { + return new LeafSetEntryNodeBaseParser.SimpleLeafSetEntryBuildingStrategy(); + } + + protected ExtensibleParser.BuildingStrategy forContainer() { + return new BaseDispatcherParser.SimpleBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forMapEntry() { + return new BaseDispatcherParser.SimpleBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forMap() { + return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forOrderedList() { + return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forUnkeyedListEntry() { + return new BaseDispatcherParser.SimpleBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forUnkeyedList() { + return new ListNodeBaseParser.SimpleListNodeBuildingStrategy<>(); + } + + protected ExtensibleParser.BuildingStrategy forChoice() { + return new BaseDispatcherParser.SimpleBuildingStrategy<>(); + } + + public ExtensibleParser.BuildingStrategy forAugmentation() { + return new BaseDispatcherParser.SimpleBuildingStrategy<>(); + } + } + }