From 622176f72f73ff3ab3dab71a9d58fd872c40eb65 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 21 Mar 2014 17:56:57 +0100 Subject: [PATCH] Update interface to hide Dispatcher Dispatcher is really an internal implementation thing. Expose a parser factory instead. Change-Id: I1a597d3c4417dd09b8f7fcce0785b0eb5a8a3856 Signed-off-by: Robert Varga --- .../FromNormalizedNodeSerializerFactory.java | 39 +++++++ .../transform/ToNormalizedNodeParser.java | 2 - .../ToNormalizedNodeParserFactory.java | 39 +++++++ .../base/parser/NodeParserDispatcher.java | 37 +++---- .../serializer/NodeSerializerDispatcher.java | 31 +++--- .../dom/parser/AugmentationNodeDomParser.java | 11 +- .../dom/parser/ChoiceNodeDomParser.java | 12 +-- .../dom/parser/ContainerNodeDomParser.java | 12 +-- .../dom/parser/DomNodeDispatcher.java | 67 ------------ .../DomToNormalizedNodeParserFactory.java | 98 +++++++++++++++++ .../dom/parser/LeafNodeDomParser.java | 4 +- .../dom/parser/LeafSetEntryNodeDomParser.java | 7 +- .../dom/parser/LeafSetNodeDomParser.java | 4 +- .../dom/parser/MapEntryNodeDomParser.java | 11 +- .../dom/parser/MapNodeDomParser.java | 4 +- .../AugmentationNodeDomSerializer.java | 4 +- .../serializer/ChoiceNodeDomSerializer.java | 4 +- .../ContainerNodeDomSerializer.java | 6 +- ...omFromNormalizedNodeSerializerFactory.java | 101 ++++++++++++++++++ .../DomNodeSerializerDispatcher.java | 99 ----------------- .../dom/serializer/LeafNodeDomSerializer.java | 10 +- .../LeafSetEntryNodeDomSerializer.java | 9 +- .../serializer/LeafSetNodeDomSerializer.java | 6 +- .../serializer/MapEntryNodeDomSerializer.java | 8 +- .../dom/serializer/MapNodeDomSerializer.java | 4 +- .../NormalizedNodeXmlTranslationTest.java | 13 +-- 26 files changed, 361 insertions(+), 281 deletions(-) create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/FromNormalizedNodeSerializerFactory.java create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParserFactory.java delete mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomNodeDispatcher.java create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomFromNormalizedNodeSerializerFactory.java delete mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomNodeSerializerDispatcher.java diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/FromNormalizedNodeSerializerFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/FromNormalizedNodeSerializerFactory.java new file mode 100644 index 0000000000..48fedda860 --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/FromNormalizedNodeSerializerFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.impl.schema.transform; + +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; +import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; + +/** + * Factory for different normalized node serializers. + * + * @param + * type of resulting/serialized element from NormalizedNode + */ +public interface FromNormalizedNodeSerializerFactory { + FromNormalizedNodeSerializer getAugmentationNodeSerializer(); + FromNormalizedNodeSerializer getChoiceNodeSerializer(); + FromNormalizedNodeSerializer getContainerNodeSerializer(); + FromNormalizedNodeSerializer, LeafSchemaNode> getLeafNodeSerializer(); + FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetEntryNodeSerializer(); + FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetNodeSerializer(); + FromNormalizedNodeSerializer getMapEntryNodeSerializer(); + FromNormalizedNodeSerializer getMapNodeSerializer(); +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParser.java index 25cd3308b9..a300cc07d4 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParser.java @@ -34,6 +34,4 @@ public interface ToNormalizedNodeParser, S> { * @return NormalizedNode as a result of parsing list of E elements with schema S */ N parse(Iterable xmlDom, S schema); - - } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParserFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParserFactory.java new file mode 100644 index 0000000000..f99cbcff28 --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParserFactory.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.impl.schema.transform; + +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; +import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; + +/** + * Factory for different normalized node parsers. + * + * @param + * type of element to be parsed into NormalizedNode + */ +public interface ToNormalizedNodeParserFactory { + ToNormalizedNodeParser getAugmentationNodeParser(); + ToNormalizedNodeParser getChoiceNodeParser(); + ToNormalizedNodeParser getContainerNodeParser(); + ToNormalizedNodeParser, LeafSchemaNode> getLeafNodeParser(); + ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetEntryNodeParser(); + ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetNodeParser(); + ToNormalizedNodeParser getMapEntryNodeParser(); + ToNormalizedNodeParser getMapNodeParser(); +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/NodeParserDispatcher.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/NodeParserDispatcher.java index e18db0dba2..40722b3aee 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/NodeParserDispatcher.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/NodeParserDispatcher.java @@ -9,13 +9,8 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser; import java.util.List; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -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.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; @@ -40,39 +35,31 @@ public interface NodeParserDispatcher { * The same instance of parser can be provided in case it is immutable. */ public static abstract class BaseNodeParserDispatcher implements NodeParserDispatcher { + private final ToNormalizedNodeParserFactory factory; + + protected BaseNodeParserDispatcher(final ToNormalizedNodeParserFactory factory) { + this.factory = Preconditions.checkNotNull(factory); + } @Override public final DataContainerChild dispatchChildElement(Object schema, List childNodes) { Preconditions.checkArgument(childNodes.isEmpty() == false); if (schema instanceof ContainerSchemaNode) { - return getContainerNodeParser().parse(childNodes, (ContainerSchemaNode) schema); + return factory.getContainerNodeParser().parse(childNodes, (ContainerSchemaNode) schema); } else if (schema instanceof LeafSchemaNode) { - return getLeafNodeParser().parse(childNodes, (LeafSchemaNode) schema); + return factory.getLeafNodeParser().parse(childNodes, (LeafSchemaNode) schema); } else if (schema instanceof LeafListSchemaNode) { - return getLeafSetNodeParser().parse(childNodes, (LeafListSchemaNode) schema); + return factory.getLeafSetNodeParser().parse(childNodes, (LeafListSchemaNode) schema); } else if (schema instanceof ListSchemaNode) { - return getMapNodeParser().parse(childNodes, (ListSchemaNode) schema); + return factory.getMapNodeParser().parse(childNodes, (ListSchemaNode) schema); } else if (schema instanceof ChoiceNode) { - return getChoiceNodeParser().parse(childNodes, (ChoiceNode) schema); + return factory.getChoiceNodeParser().parse(childNodes, (ChoiceNode) schema); } else if (schema instanceof AugmentationSchema) { - return getAugmentationNodeParser().parse(childNodes, (AugmentationSchema) schema); + return factory.getAugmentationNodeParser().parse(childNodes, (AugmentationSchema) schema); } throw new IllegalArgumentException("Unable to parse node, unknown schema type: " + schema.getClass()); } - - protected abstract ToNormalizedNodeParser getContainerNodeParser(); - - protected abstract ToNormalizedNodeParser, LeafSchemaNode> getLeafNodeParser(); - - protected abstract ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetNodeParser(); - - protected abstract ToNormalizedNodeParser getMapNodeParser(); - - protected abstract ToNormalizedNodeParser getChoiceNodeParser(); - - protected abstract ToNormalizedNodeParser getAugmentationNodeParser(); - } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/serializer/NodeSerializerDispatcher.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/serializer/NodeSerializerDispatcher.java index e19b625ef2..9c1adfc623 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/serializer/NodeSerializerDispatcher.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/serializer/NodeSerializerDispatcher.java @@ -16,7 +16,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.MixinNode; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.FromNormalizedNodeSerializer; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.FromNormalizedNodeSerializerFactory; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; @@ -42,6 +42,11 @@ public interface NodeSerializerDispatcher { * The same instance of serializer can be provided in case it is immutable. */ public static abstract class BaseNodeSerializerDispatcher implements NodeSerializerDispatcher { + private final FromNormalizedNodeSerializerFactory factory; + + protected BaseNodeSerializerDispatcher(final FromNormalizedNodeSerializerFactory factory) { + this.factory = Preconditions.checkNotNull(factory); + } @Override public final Iterable dispatchChildElement(Object childSchema, @@ -67,7 +72,7 @@ public interface NodeSerializerDispatcher { private Iterable onAugmentationSchema(Object childSchema, DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, AugmentationSchema.class, dataContainerChild); - return getAugmentationNodeSerializer().serialize((AugmentationSchema) childSchema, + return factory.getAugmentationNodeSerializer().serialize((AugmentationSchema) childSchema, (AugmentationNode) dataContainerChild); } @@ -75,7 +80,7 @@ public interface NodeSerializerDispatcher { DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, org.opendaylight.yangtools.yang.model.api.ChoiceNode.class, dataContainerChild); - return getChoiceNodeSerializer() + return factory.getChoiceNodeSerializer() .serialize((org.opendaylight.yangtools.yang.model.api.ChoiceNode) childSchema, (ChoiceNode) dataContainerChild); } @@ -83,20 +88,20 @@ public interface NodeSerializerDispatcher { private Iterable onListNode(Object childSchema, DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, ListSchemaNode.class, dataContainerChild); - return getMapNodeSerializer().serialize((ListSchemaNode) childSchema, (MapNode) dataContainerChild); + return factory.getMapNodeSerializer().serialize((ListSchemaNode) childSchema, (MapNode) dataContainerChild); } private Iterable onLeafListNode(Object childSchema, DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, LeafListSchemaNode.class, dataContainerChild); - return getLeafSetNodeSerializer().serialize((LeafListSchemaNode) childSchema, + return factory.getLeafSetNodeSerializer().serialize((LeafListSchemaNode) childSchema, (LeafSetNode) dataContainerChild); } private Iterable onLeafNode(Object childSchema, DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, LeafSchemaNode.class, dataContainerChild); - Iterable elements = getLeafNodeSerializer().serialize((LeafSchemaNode) childSchema, + Iterable elements = factory.getLeafNodeSerializer().serialize((LeafSchemaNode) childSchema, (LeafNode) dataContainerChild); checkOnlyOneSerializedElement(elements, dataContainerChild); return elements; @@ -114,7 +119,7 @@ public interface NodeSerializerDispatcher { DataContainerChild dataContainerChild) { checkSchemaCompatibility(childSchema, ContainerSchemaNode.class, dataContainerChild); - Iterable elements = getContainerNodeSerializer().serialize((ContainerSchemaNode) childSchema, + Iterable elements = factory.getContainerNodeSerializer().serialize((ContainerSchemaNode) childSchema, (ContainerNode) dataContainerChild); checkOnlyOneSerializedElement(elements, dataContainerChild); return elements; @@ -126,17 +131,5 @@ public interface NodeSerializerDispatcher { "Incompatible schema: %s with node: %s, expected: %s", childSchema, dataContainerChild, containerSchemaNodeClass); } - - protected abstract FromNormalizedNodeSerializer getContainerNodeSerializer(); - - protected abstract FromNormalizedNodeSerializer, LeafSchemaNode> getLeafNodeSerializer(); - - protected abstract FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetNodeSerializer(); - - protected abstract FromNormalizedNodeSerializer getMapNodeSerializer(); - - protected abstract FromNormalizedNodeSerializer getChoiceNodeSerializer(); - - protected abstract FromNormalizedNodeSerializer getAugmentationNodeSerializer(); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/AugmentationNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/AugmentationNodeDomParser.java index 0b351f1baf..7a5b551578 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/AugmentationNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/AugmentationNodeDomParser.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.AugmentationNodeBaseParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher; import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; @@ -17,12 +16,12 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; import com.google.common.collect.LinkedListMultimap; -public final class AugmentationNodeDomParser extends AugmentationNodeBaseParser { +final class AugmentationNodeDomParser extends AugmentationNodeBaseParser { - private final XmlCodecProvider codecProvider; + private final NodeParserDispatcher dispatcher; - public AugmentationNodeDomParser(XmlCodecProvider codecProvider) { - this.codecProvider = Preconditions.checkNotNull(codecProvider); + AugmentationNodeDomParser(final NodeParserDispatcher dispatcher) { + this.dispatcher = Preconditions.checkNotNull(dispatcher); } @Override @@ -32,7 +31,7 @@ public final class AugmentationNodeDomParser extends AugmentationNodeBaseParser< @Override protected NodeParserDispatcher getDispatcher() { - return DomNodeDispatcher.getInstance(codecProvider); + return dispatcher; } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ChoiceNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ChoiceNodeDomParser.java index 5e077207aa..97e8a6171c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ChoiceNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ChoiceNodeDomParser.java @@ -8,7 +8,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ChoiceNodeBaseParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher; import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; @@ -17,12 +16,12 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; import com.google.common.collect.LinkedListMultimap; -public final class ChoiceNodeDomParser extends ChoiceNodeBaseParser { +final class ChoiceNodeDomParser extends ChoiceNodeBaseParser { - private final XmlCodecProvider codecProvider; + private final NodeParserDispatcher dispatcher; - public ChoiceNodeDomParser(XmlCodecProvider codecProvider) { - this.codecProvider = Preconditions.checkNotNull(codecProvider); + ChoiceNodeDomParser(NodeParserDispatcher dispatcher) { + this.dispatcher = Preconditions.checkNotNull(dispatcher); } @Override @@ -32,7 +31,6 @@ public final class ChoiceNodeDomParser extends ChoiceNodeBaseParser { @Override protected NodeParserDispatcher getDispatcher() { - return DomNodeDispatcher.getInstance(codecProvider); + return dispatcher; } - } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ContainerNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ContainerNodeDomParser.java index 2b0b63c9f5..c03113af22 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ContainerNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ContainerNodeDomParser.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.ContainerNodeBaseParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher; import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; @@ -19,13 +18,14 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; import com.google.common.collect.LinkedListMultimap; -public final class ContainerNodeDomParser extends ContainerNodeBaseParser { +final class ContainerNodeDomParser extends ContainerNodeBaseParser { - private final XmlCodecProvider codecProvider; + private final NodeParserDispatcher dispatcher; - public ContainerNodeDomParser(XmlCodecProvider codecProvider) { - this.codecProvider = Preconditions.checkNotNull(codecProvider); + ContainerNodeDomParser(final NodeParserDispatcher dispatcher) { + this.dispatcher = Preconditions.checkNotNull(dispatcher); } + @Override protected Map getAttributes(Element element) { return DomUtils.toAttributes(element.getAttributes()); @@ -33,7 +33,7 @@ public final class ContainerNodeDomParser extends ContainerNodeBaseParser getDispatcher() { - return DomNodeDispatcher.getInstance(codecProvider); + return dispatcher; } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomNodeDispatcher.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomNodeDispatcher.java deleted file mode 100644 index ae725f5eea..0000000000 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomNodeDispatcher.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; - -import org.opendaylight.yangtools.yang.data.api.schema.*; -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.base.parser.NodeParserDispatcher; -import org.opendaylight.yangtools.yang.model.api.*; -import org.opendaylight.yangtools.yang.model.api.ChoiceNode; -import org.w3c.dom.Element; - -public class DomNodeDispatcher extends NodeParserDispatcher.BaseNodeParserDispatcher { - - private final ContainerNodeDomParser containerNodeDomParser; - private final LeafNodeDomParser leafNodeDomParser; - private final LeafSetNodeDomParser leafSetNodeDomParser; - private final MapNodeDomParser mapNodeDomParser; - private final ChoiceNodeDomParser choiceNodeDomParser; - private final AugmentationNodeDomParser augmentationNodeDomParser; - - private static DomNodeDispatcher instance = null; - - private DomNodeDispatcher(XmlCodecProvider codecProvider) { - leafNodeDomParser = new LeafNodeDomParser(codecProvider); - containerNodeDomParser = new ContainerNodeDomParser(codecProvider); - leafSetNodeDomParser = new LeafSetNodeDomParser(new LeafSetEntryNodeDomParser(codecProvider)); - mapNodeDomParser = new MapNodeDomParser(new MapEntryNodeDomParser(codecProvider)); - choiceNodeDomParser = new ChoiceNodeDomParser(codecProvider); - augmentationNodeDomParser = new AugmentationNodeDomParser(codecProvider); - } - - @Override - protected ToNormalizedNodeParser getContainerNodeParser() { - return containerNodeDomParser; - } - - @Override - protected ToNormalizedNodeParser, LeafSchemaNode> getLeafNodeParser() { - return leafNodeDomParser; - } - - @Override - protected ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetNodeParser() { - return leafSetNodeDomParser; - } - - @Override - protected ToNormalizedNodeParser getMapNodeParser() { - return mapNodeDomParser; - } - - @Override - protected ToNormalizedNodeParser getChoiceNodeParser() { - return choiceNodeDomParser; - } - - @Override - protected ToNormalizedNodeParser getAugmentationNodeParser() { - return augmentationNodeDomParser; - } - - public static NodeParserDispatcher getInstance(XmlCodecProvider codecProvider) { - if (instance == null) { - instance = new DomNodeDispatcher(codecProvider); - } - return instance; - } -} 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 new file mode 100644 index 0000000000..53d68f8872 --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; + +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; +import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +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.NodeParserDispatcher; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +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.w3c.dom.Element; + +public final class DomToNormalizedNodeParserFactory implements ToNormalizedNodeParserFactory { + private final AugmentationNodeDomParser augmentationNodeParser; + private final ChoiceNodeDomParser choiceNodeParser; + private final ContainerNodeDomParser containerNodeParser; + private final LeafNodeDomParser leafNodeParser; + private final LeafSetEntryNodeDomParser leafSetEntryNodeParser; + private final LeafSetNodeDomParser leafSetNodeParser; + private final MapNodeDomParser mapNodeParser; + private final MapEntryNodeDomParser mapEntryNodeParser; + + private DomToNormalizedNodeParserFactory(final XmlCodecProvider codecProvider) { + leafNodeParser = new LeafNodeDomParser(codecProvider); + leafSetEntryNodeParser = new LeafSetEntryNodeDomParser(codecProvider); + leafSetNodeParser = new LeafSetNodeDomParser(leafSetEntryNodeParser); + + final NodeParserDispatcher dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher(this) { + + }; + + containerNodeParser = new ContainerNodeDomParser(dispatcher); + mapEntryNodeParser = new MapEntryNodeDomParser(dispatcher); + mapNodeParser = new MapNodeDomParser(mapEntryNodeParser); + choiceNodeParser = new ChoiceNodeDomParser(dispatcher); + augmentationNodeParser = new AugmentationNodeDomParser(dispatcher); + } + + public static DomToNormalizedNodeParserFactory getInstance(final XmlCodecProvider codecProvider) { + return new DomToNormalizedNodeParserFactory(codecProvider); + } + + @Override + public ToNormalizedNodeParser getAugmentationNodeParser() { + return augmentationNodeParser; + } + + @Override + public ToNormalizedNodeParser getChoiceNodeParser() { + return choiceNodeParser; + } + + @Override + public ToNormalizedNodeParser getContainerNodeParser() { + return containerNodeParser; + } + + @Override + public ToNormalizedNodeParser, LeafSchemaNode> getLeafNodeParser() { + return leafNodeParser; + } + + @Override + public ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetEntryNodeParser() { + return leafSetEntryNodeParser; + } + + @Override + public ToNormalizedNodeParser, LeafListSchemaNode> getLeafSetNodeParser() { + return leafSetNodeParser; + } + + @Override + public ToNormalizedNodeParser getMapEntryNodeParser() { + return mapEntryNodeParser; + } + + @Override + public ToNormalizedNodeParser getMapNodeParser() { + return mapNodeParser; + } +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java index 59ad9f8402..6c5d064268 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java @@ -18,11 +18,11 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; -public class LeafNodeDomParser extends LeafNodeBaseParser { +final class LeafNodeDomParser extends LeafNodeBaseParser { private final XmlCodecProvider codecProvider; - public LeafNodeDomParser(XmlCodecProvider codecProvider) { + LeafNodeDomParser(XmlCodecProvider codecProvider) { this.codecProvider = Preconditions.checkNotNull(codecProvider); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java index 047cd2b282..2b224a0e71 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; import java.util.Map; -import com.google.common.base.Preconditions; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.LeafSetEntryNodeBaseParser; @@ -17,11 +16,13 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.w3c.dom.Element; -public class LeafSetEntryNodeDomParser extends LeafSetEntryNodeBaseParser { +import com.google.common.base.Preconditions; + +final class LeafSetEntryNodeDomParser extends LeafSetEntryNodeBaseParser { private final XmlCodecProvider codecProvider; - public LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider) { + LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider) { this.codecProvider = Preconditions.checkNotNull(codecProvider); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetNodeDomParser.java index 8a771aac9c..8f6ee6ee21 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetNodeDomParser.java @@ -13,11 +13,11 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.Le import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.w3c.dom.Element; -public class LeafSetNodeDomParser extends LeafSetNodeBaseParser { +final class LeafSetNodeDomParser extends LeafSetNodeBaseParser { private final LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser; - public LeafSetNodeDomParser(LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser) { + LeafSetNodeDomParser(LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser) { this.leafSetEntryNodeBaseParser = leafSetEntryNodeBaseParser; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapEntryNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapEntryNodeDomParser.java index e3c5e7d328..65dde5cf5b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapEntryNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapEntryNodeDomParser.java @@ -10,7 +10,6 @@ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser; import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.MapEntryNodeBaseParser; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.NodeParserDispatcher; import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; @@ -19,12 +18,12 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; import com.google.common.collect.LinkedListMultimap; -public final class MapEntryNodeDomParser extends MapEntryNodeBaseParser { +final class MapEntryNodeDomParser extends MapEntryNodeBaseParser { - private final XmlCodecProvider codecProvider; + private final NodeParserDispatcher dispatcher; - public MapEntryNodeDomParser(XmlCodecProvider codecProvider) { - this.codecProvider = Preconditions.checkNotNull(codecProvider); + MapEntryNodeDomParser(final NodeParserDispatcher dispatcher) { + this.dispatcher = Preconditions.checkNotNull(dispatcher); } @Override @@ -34,7 +33,7 @@ public final class MapEntryNodeDomParser extends MapEntryNodeBaseParser @Override protected NodeParserDispatcher getDispatcher() { - return DomNodeDispatcher.getInstance(codecProvider); + return dispatcher; } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapNodeDomParser.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapNodeDomParser.java index 1549269aaf..ddc7163556 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapNodeDomParser.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapNodeDomParser.java @@ -13,11 +13,11 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser.Ma import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.w3c.dom.Element; -public final class MapNodeDomParser extends MapNodeBaseParser { +final class MapNodeDomParser extends MapNodeBaseParser { private final MapEntryNodeDomParser mapEntryParser; - public MapNodeDomParser(MapEntryNodeDomParser mapEntryParser) { + MapNodeDomParser(MapEntryNodeDomParser mapEntryParser) { this.mapEntryParser = mapEntryParser; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/AugmentationNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/AugmentationNodeDomSerializer.java index fbffc03abb..99547406ba 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/AugmentationNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/AugmentationNodeDomSerializer.java @@ -13,12 +13,12 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; -public class AugmentationNodeDomSerializer extends +final class AugmentationNodeDomSerializer extends AugmentationNodeBaseSerializer { private final NodeSerializerDispatcher dispatcher; - public AugmentationNodeDomSerializer(NodeSerializerDispatcher dispatcher) { + AugmentationNodeDomSerializer(NodeSerializerDispatcher dispatcher) { this.dispatcher = Preconditions.checkNotNull(dispatcher); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ChoiceNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ChoiceNodeDomSerializer.java index 1db6a8b663..8579202e51 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ChoiceNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ChoiceNodeDomSerializer.java @@ -13,10 +13,10 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; -public class ChoiceNodeDomSerializer extends ChoiceNodeBaseSerializer { +final class ChoiceNodeDomSerializer extends ChoiceNodeBaseSerializer { private final NodeSerializerDispatcher dispatcher; - public ChoiceNodeDomSerializer(final NodeSerializerDispatcher dispatcher) { + ChoiceNodeDomSerializer(final NodeSerializerDispatcher dispatcher) { this.dispatcher = Preconditions.checkNotNull(dispatcher); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ContainerNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ContainerNodeDomSerializer.java index c5641a038a..3144806b9c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ContainerNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ContainerNodeDomSerializer.java @@ -19,13 +19,13 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; -public class ContainerNodeDomSerializer extends +final class ContainerNodeDomSerializer extends ContainerNodeBaseSerializer { - private final Document doc; private final NodeSerializerDispatcher dispatcher; + private final Document doc; - public ContainerNodeDomSerializer(final Document doc, final NodeSerializerDispatcher dispatcher) { + ContainerNodeDomSerializer(final Document doc, final NodeSerializerDispatcher dispatcher) { this.doc = Preconditions.checkNotNull(doc); this.dispatcher = Preconditions.checkNotNull(dispatcher); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomFromNormalizedNodeSerializerFactory.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomFromNormalizedNodeSerializerFactory.java new file mode 100644 index 0000000000..0a5aba7c4a --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomFromNormalizedNodeSerializerFactory.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.serializer; + +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; +import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.FromNormalizedNodeSerializer; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.FromNormalizedNodeSerializerFactory; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.NodeSerializerDispatcher; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +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.w3c.dom.Document; +import org.w3c.dom.Element; + +public final class DomFromNormalizedNodeSerializerFactory implements FromNormalizedNodeSerializerFactory { + private final ContainerNodeDomSerializer containerSerializer; + private final ChoiceNodeDomSerializer choiceSerializer; + private final AugmentationNodeDomSerializer augmentSerializer; + private final LeafNodeDomSerializer leafNodeSerializer; + private final LeafSetNodeDomSerializer leafSetSerializer; + private final MapNodeDomSerializer mapNodeSerializer; + private final LeafSetEntryNodeDomSerializer leafSetEntryNodeSerializer; + private final MapEntryNodeDomSerializer mapEntryNodeSerializer; + + private DomFromNormalizedNodeSerializerFactory(final Document doc, final XmlCodecProvider codecProvider) { + final NodeSerializerDispatcher.BaseNodeSerializerDispatcher dispatcher = new NodeSerializerDispatcher.BaseNodeSerializerDispatcher(this) { + + }; + + containerSerializer = new ContainerNodeDomSerializer(doc, dispatcher); + choiceSerializer = new ChoiceNodeDomSerializer(dispatcher); + augmentSerializer = new AugmentationNodeDomSerializer(dispatcher); + leafNodeSerializer = new LeafNodeDomSerializer(doc, codecProvider); + + leafSetEntryNodeSerializer = new LeafSetEntryNodeDomSerializer(doc, codecProvider); + leafSetSerializer = new LeafSetNodeDomSerializer(leafSetEntryNodeSerializer); + + mapEntryNodeSerializer = new MapEntryNodeDomSerializer(doc, dispatcher); + mapNodeSerializer = new MapNodeDomSerializer(mapEntryNodeSerializer); + } + + public static DomFromNormalizedNodeSerializerFactory getInstance(final Document doc, final XmlCodecProvider codecProvider) { + return new DomFromNormalizedNodeSerializerFactory(doc, codecProvider); + } + + @Override + public FromNormalizedNodeSerializer getAugmentationNodeSerializer() { + return augmentSerializer; + } + + @Override + public FromNormalizedNodeSerializer getChoiceNodeSerializer() { + return choiceSerializer; + } + + @Override + public FromNormalizedNodeSerializer getContainerNodeSerializer() { + return containerSerializer; + } + + @Override + public FromNormalizedNodeSerializer, LeafSchemaNode> getLeafNodeSerializer() { + return leafNodeSerializer; + } + + @Override + public FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetEntryNodeSerializer() { + return leafSetEntryNodeSerializer; + } + + @Override + public FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetNodeSerializer() { + return leafSetSerializer; + } + + @Override + public FromNormalizedNodeSerializer getMapEntryNodeSerializer() { + return mapEntryNodeSerializer; + } + + @Override + public FromNormalizedNodeSerializer getMapNodeSerializer() { + return mapNodeSerializer; + } + +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomNodeSerializerDispatcher.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomNodeSerializerDispatcher.java deleted file mode 100644 index 9dee6026dc..0000000000 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomNodeSerializerDispatcher.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.serializer; - -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; - -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; -import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; -import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; -import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.FromNormalizedNodeSerializer; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.NodeSerializerDispatcher; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; -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.w3c.dom.Document; -import org.w3c.dom.Element; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -final class DomNodeSerializerDispatcher extends NodeSerializerDispatcher.BaseNodeSerializerDispatcher { - private static final Cache dispatcherCache = - CacheBuilder.newBuilder().weakKeys().build(); - - private final FromNormalizedNodeSerializer containerSerializer; - private final FromNormalizedNodeSerializer choiceSerializer; - private final FromNormalizedNodeSerializer augmentSerializer; - private final FromNormalizedNodeSerializer, LeafSchemaNode> leafNodeSerializer; - private final FromNormalizedNodeSerializer, LeafListSchemaNode> leafSetSerializer; - private final FromNormalizedNodeSerializer mapNodeSerializer; - - DomNodeSerializerDispatcher(Document doc, XmlCodecProvider codecProvider) { - containerSerializer = new ContainerNodeDomSerializer(doc, this); - choiceSerializer = new ChoiceNodeDomSerializer(this); - augmentSerializer = new AugmentationNodeDomSerializer(this); - leafNodeSerializer = new LeafNodeDomSerializer(doc, codecProvider); - leafSetSerializer = new LeafSetNodeDomSerializer(new LeafSetEntryNodeDomSerializer(doc, codecProvider)); - mapNodeSerializer = new MapNodeDomSerializer(new MapEntryNodeDomSerializer(doc, this)); - } - - // FIXME: Callers should really grow a proper (per-document) lifecycle and not rely on this - @Deprecated - static DomNodeSerializerDispatcher getInstance(final Document doc, final XmlCodecProvider codecProvider) { - // DOM does not allow to add elements to one document from another, so maintain a cache - // on a per-document case. - try { - return dispatcherCache.get(doc, new Callable() { - @Override - public DomNodeSerializerDispatcher call() { - return new DomNodeSerializerDispatcher(doc, codecProvider); - } - }); - } catch (ExecutionException e) { - throw new IllegalStateException("Failed to instantiated a dispatcher", e); - } - } - - @Override - protected FromNormalizedNodeSerializer getContainerNodeSerializer() { - return containerSerializer; - } - - @Override - protected FromNormalizedNodeSerializer, LeafSchemaNode> getLeafNodeSerializer() { - return leafNodeSerializer; - } - - @Override - protected FromNormalizedNodeSerializer, LeafListSchemaNode> getLeafSetNodeSerializer() { - return leafSetSerializer; - } - - @Override - protected FromNormalizedNodeSerializer getMapNodeSerializer() { - return mapNodeSerializer; - } - - @Override - protected FromNormalizedNodeSerializer getChoiceNodeSerializer() { - return choiceSerializer; - } - - @Override - protected FromNormalizedNodeSerializer getAugmentationNodeSerializer() { - return augmentSerializer; - } -} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafNodeDomSerializer.java index acdb7eb738..83fcb8dd20 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafNodeDomSerializer.java @@ -7,22 +7,22 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.serializer; -import com.google.common.base.Preconditions; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.LeafNodeBaseSerializer; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.w3c.dom.Document; import org.w3c.dom.Element; -public class LeafNodeDomSerializer extends LeafNodeBaseSerializer { +import com.google.common.base.Preconditions; - private final Document doc; +final class LeafNodeDomSerializer extends LeafNodeBaseSerializer { private final XmlCodecProvider codecProvider; + private final Document doc; - public LeafNodeDomSerializer(Document doc, XmlCodecProvider codecProvider) { + LeafNodeDomSerializer(Document doc, XmlCodecProvider codecProvider) { this.doc = Preconditions.checkNotNull(doc); this.codecProvider = Preconditions.checkNotNull(codecProvider); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetEntryNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetEntryNodeDomSerializer.java index 98908cca54..fcc04c2f39 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetEntryNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetEntryNodeDomSerializer.java @@ -7,23 +7,24 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.serializer; -import com.google.common.base.Preconditions; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlCodecProvider; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.LeafSetEntryNodeBaseSerializer; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.w3c.dom.Document; import org.w3c.dom.Element; -public class LeafSetEntryNodeDomSerializer extends +import com.google.common.base.Preconditions; + +final class LeafSetEntryNodeDomSerializer extends LeafSetEntryNodeBaseSerializer { private final Document doc; private final XmlCodecProvider codecProvider; - public LeafSetEntryNodeDomSerializer(Document doc, XmlCodecProvider codecProvider) { + LeafSetEntryNodeDomSerializer(Document doc, XmlCodecProvider codecProvider) { this.doc = Preconditions.checkNotNull(doc); this.codecProvider = Preconditions.checkNotNull(codecProvider); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetNodeDomSerializer.java index ae49d68aa5..63af56932c 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetNodeDomSerializer.java @@ -13,12 +13,10 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serialize import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.w3c.dom.Element; -public class LeafSetNodeDomSerializer extends - LeafSetNodeBaseSerializer { - +final class LeafSetNodeDomSerializer extends LeafSetNodeBaseSerializer { private final FromNormalizedNodeSerializer, LeafListSchemaNode> leafSetEntryNodeSerializer; - public LeafSetNodeDomSerializer(LeafSetEntryNodeDomSerializer leafSetEntryNodeSerializer) { + LeafSetNodeDomSerializer(LeafSetEntryNodeDomSerializer leafSetEntryNodeSerializer) { this.leafSetEntryNodeSerializer = leafSetEntryNodeSerializer; } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapEntryNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapEntryNodeDomSerializer.java index 5e65dd8d89..dbe8a90fc6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapEntryNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapEntryNodeDomSerializer.java @@ -19,13 +19,11 @@ import org.w3c.dom.Element; import com.google.common.base.Preconditions; -public class MapEntryNodeDomSerializer extends - MapEntryNodeBaseSerializer { - - private final Document doc; +final class MapEntryNodeDomSerializer extends MapEntryNodeBaseSerializer { private final NodeSerializerDispatcher dispatcher; + private final Document doc; - public MapEntryNodeDomSerializer(final Document doc, final NodeSerializerDispatcher dispatcher) { + MapEntryNodeDomSerializer(final Document doc, final NodeSerializerDispatcher dispatcher) { this.doc = Preconditions.checkNotNull(doc); this.dispatcher = Preconditions.checkNotNull(dispatcher); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapNodeDomSerializer.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapNodeDomSerializer.java index d1486f0d70..5404f193bf 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapNodeDomSerializer.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapNodeDomSerializer.java @@ -13,11 +13,11 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serialize import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.w3c.dom.Element; -public class MapNodeDomSerializer extends MapNodeBaseSerializer { +final class MapNodeDomSerializer extends MapNodeBaseSerializer { private final FromNormalizedNodeSerializer mapEntrySerializer; - public MapNodeDomSerializer(MapEntryNodeDomSerializer mapEntrySerializer) { + MapNodeDomSerializer(MapEntryNodeDomSerializer mapEntrySerializer) { this.mapEntrySerializer = mapEntrySerializer; } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java index e6c68feee5..84ca9f5400 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java @@ -51,9 +51,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNo import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.NodeSerializerDispatcher; import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils; -import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.ContainerNodeDomParser; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.DomToNormalizedNodeParserFactory; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -235,7 +234,8 @@ public class NormalizedNodeXmlTranslationTest { public void testTranslation() throws Exception { Document doc = loadDocument(xmlPath); - ContainerNode built = new ContainerNodeDomParser(DomUtils.defaultValueCodecProvider()).parse( + ContainerNode built = + DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider()).getContainerNodeParser().parse( Collections.singletonList(doc.getDocumentElement()), containerNode); if (expectedNode != null) @@ -243,11 +243,8 @@ public class NormalizedNodeXmlTranslationTest { logger.info("{}", built); - final Document newDoc = XmlDocumentUtils.getDocument(); - final NodeSerializerDispatcher dispatcher = new DomNodeSerializerDispatcher(newDoc, DomUtils.defaultValueCodecProvider()); - - Iterable els = new ContainerNodeDomSerializer(newDoc, - dispatcher).serialize(containerNode, built); + Iterable els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider()) + .getContainerNodeSerializer().serialize(containerNode, built); Element el = els.iterator().next(); -- 2.36.6