Update interface to hide Dispatcher 11/5711/1
authorRobert Varga <rovarga@cisco.com>
Fri, 21 Mar 2014 16:56:57 +0000 (17:56 +0100)
committerRobert Varga <rovarga@cisco.com>
Fri, 21 Mar 2014 16:59:11 +0000 (17:59 +0100)
Dispatcher is really an internal implementation thing. Expose a parser
factory instead.

Change-Id: I1a597d3c4417dd09b8f7fcce0785b0eb5a8a3856
Signed-off-by: Robert Varga <rovarga@cisco.com>
26 files changed:
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/FromNormalizedNodeSerializerFactory.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/ToNormalizedNodeParserFactory.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/parser/NodeParserDispatcher.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/base/serializer/NodeSerializerDispatcher.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/AugmentationNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ChoiceNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/ContainerNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomNodeDispatcher.java [deleted file]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/DomToNormalizedNodeParserFactory.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetEntryNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/LeafSetNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapEntryNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/parser/MapNodeDomParser.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/AugmentationNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ChoiceNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/ContainerNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomFromNormalizedNodeSerializerFactory.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/DomNodeSerializerDispatcher.java [deleted file]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetEntryNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/LeafSetNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapEntryNodeDomSerializer.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/MapNodeDomSerializer.java
yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.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 (file)
index 0000000..48fedda
--- /dev/null
@@ -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 <E>
+ *            type of resulting/serialized element from NormalizedNode
+ */
+public interface FromNormalizedNodeSerializerFactory<E> {
+       FromNormalizedNodeSerializer<E, AugmentationNode, AugmentationSchema> getAugmentationNodeSerializer();
+       FromNormalizedNodeSerializer<E, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeSerializer();
+       FromNormalizedNodeSerializer<E, ContainerNode, ContainerSchemaNode> getContainerNodeSerializer();
+       FromNormalizedNodeSerializer<E, LeafNode<?>, LeafSchemaNode> getLeafNodeSerializer();
+       FromNormalizedNodeSerializer<E, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeSerializer();
+       FromNormalizedNodeSerializer<E, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeSerializer();
+       FromNormalizedNodeSerializer<E, MapEntryNode, ListSchemaNode> getMapEntryNodeSerializer();
+       FromNormalizedNodeSerializer<E, MapNode, ListSchemaNode> getMapNodeSerializer();
+}
index 25cd3308b972c5945c85a2ecd9676cf1911cf4b0..a300cc07d41f88b83daa6d3dcbdc386ba353132d 100644 (file)
@@ -34,6 +34,4 @@ public interface ToNormalizedNodeParser<E, N extends NormalizedNode<?, ?>, S> {
      * @return NormalizedNode as a result of parsing list of E elements with schema S
      */
     N parse(Iterable<E> 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 (file)
index 0000000..f99cbcf
--- /dev/null
@@ -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 <E>
+ *            type of element to be parsed into NormalizedNode
+ */
+public interface ToNormalizedNodeParserFactory<E> {
+       ToNormalizedNodeParser<E, AugmentationNode, AugmentationSchema> getAugmentationNodeParser();
+       ToNormalizedNodeParser<E, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeParser();
+       ToNormalizedNodeParser<E, ContainerNode, ContainerSchemaNode> getContainerNodeParser();
+       ToNormalizedNodeParser<E, LeafNode<?>, LeafSchemaNode> getLeafNodeParser();
+       ToNormalizedNodeParser<E, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser();
+       ToNormalizedNodeParser<E, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser();
+       ToNormalizedNodeParser<E, MapEntryNode, ListSchemaNode> getMapEntryNodeParser();
+       ToNormalizedNodeParser<E, MapNode, ListSchemaNode> getMapNodeParser();
+}
index e18db0dba2cad86b6d6f03fd6025369d2c4e904b..40722b3aee8a15c05f37c9974e475f7fc67d5478 100644 (file)
@@ -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<E> {
      * The same instance of parser can be provided in case it is immutable.
      */
     public static abstract class BaseNodeParserDispatcher<E> implements NodeParserDispatcher<E> {
+        private final ToNormalizedNodeParserFactory<E> factory;
+
+        protected BaseNodeParserDispatcher(final ToNormalizedNodeParserFactory<E> factory) {
+            this.factory = Preconditions.checkNotNull(factory);
+        }
 
         @Override
         public final DataContainerChild<?, ?> dispatchChildElement(Object schema, List<E> 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<E, ContainerNode, ContainerSchemaNode> getContainerNodeParser();
-
-        protected abstract ToNormalizedNodeParser<E, LeafNode<?>, LeafSchemaNode> getLeafNodeParser();
-
-        protected abstract ToNormalizedNodeParser<E, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser();
-
-        protected abstract ToNormalizedNodeParser<E, MapNode, ListSchemaNode> getMapNodeParser();
-
-        protected abstract ToNormalizedNodeParser<E, org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode, ChoiceNode> getChoiceNodeParser();
-
-        protected abstract ToNormalizedNodeParser<E, AugmentationNode, AugmentationSchema> getAugmentationNodeParser();
-
     }
 }
index e19b625ef2f266bb2559fb2914ee76b8756559d0..9c1adfc6230568bc7f0592539ca7df3f42c31ddb 100644 (file)
@@ -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<E> {
      * The same instance of serializer can be provided in case it is immutable.
      */
     public static abstract class BaseNodeSerializerDispatcher<E> implements NodeSerializerDispatcher<E> {
+        private final FromNormalizedNodeSerializerFactory<E> factory;
+
+        protected BaseNodeSerializerDispatcher(final FromNormalizedNodeSerializerFactory<E> factory) {
+            this.factory = Preconditions.checkNotNull(factory);
+        }
 
         @Override
         public final Iterable<E> dispatchChildElement(Object childSchema,
@@ -67,7 +72,7 @@ public interface NodeSerializerDispatcher<E> {
         private Iterable<E> onAugmentationSchema(Object childSchema,
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> 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<E> {
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> 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<E> {
         private Iterable<E> onListNode(Object childSchema,
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> dataContainerChild) {
             checkSchemaCompatibility(childSchema, ListSchemaNode.class, dataContainerChild);
-            return getMapNodeSerializer().serialize((ListSchemaNode) childSchema, (MapNode) dataContainerChild);
+            return factory.getMapNodeSerializer().serialize((ListSchemaNode) childSchema, (MapNode) dataContainerChild);
         }
 
         private Iterable<E> onLeafListNode(Object childSchema,
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> dataContainerChild) {
             checkSchemaCompatibility(childSchema, LeafListSchemaNode.class, dataContainerChild);
-            return getLeafSetNodeSerializer().serialize((LeafListSchemaNode) childSchema,
+            return factory.getLeafSetNodeSerializer().serialize((LeafListSchemaNode) childSchema,
                     (LeafSetNode<?>) dataContainerChild);
         }
 
         private Iterable<E> onLeafNode(Object childSchema,
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> dataContainerChild) {
             checkSchemaCompatibility(childSchema, LeafSchemaNode.class, dataContainerChild);
-            Iterable<E> elements = getLeafNodeSerializer().serialize((LeafSchemaNode) childSchema,
+            Iterable<E> elements = factory.getLeafNodeSerializer().serialize((LeafSchemaNode) childSchema,
                     (LeafNode<?>) dataContainerChild);
             checkOnlyOneSerializedElement(elements, dataContainerChild);
             return elements;
@@ -114,7 +119,7 @@ public interface NodeSerializerDispatcher<E> {
                 DataContainerChild<? extends InstanceIdentifier.PathArgument, ?> dataContainerChild) {
             checkSchemaCompatibility(childSchema, ContainerSchemaNode.class, dataContainerChild);
 
-            Iterable<E> elements = getContainerNodeSerializer().serialize((ContainerSchemaNode) childSchema,
+            Iterable<E> elements = factory.getContainerNodeSerializer().serialize((ContainerSchemaNode) childSchema,
                     (ContainerNode) dataContainerChild);
             checkOnlyOneSerializedElement(elements, dataContainerChild);
             return elements;
@@ -126,17 +131,5 @@ public interface NodeSerializerDispatcher<E> {
                     "Incompatible schema: %s with node: %s, expected: %s", childSchema, dataContainerChild,
                     containerSchemaNodeClass);
         }
-
-        protected abstract FromNormalizedNodeSerializer<E, ContainerNode, ContainerSchemaNode> getContainerNodeSerializer();
-
-        protected abstract FromNormalizedNodeSerializer<E, LeafNode<?>, LeafSchemaNode> getLeafNodeSerializer();
-
-        protected abstract FromNormalizedNodeSerializer<E, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeSerializer();
-
-        protected abstract FromNormalizedNodeSerializer<E, MapNode, ListSchemaNode> getMapNodeSerializer();
-
-        protected abstract FromNormalizedNodeSerializer<E, org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeSerializer();
-
-        protected abstract FromNormalizedNodeSerializer<E, AugmentationNode, AugmentationSchema> getAugmentationNodeSerializer();
     }
 }
index 0b351f1baf679288a650125637d35d88faf578a8..7a5b551578ba850d88b65212b83eebfe6a793edf 100644 (file)
@@ -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<Element> {
+final class AugmentationNodeDomParser extends AugmentationNodeBaseParser<Element> {
 
-    private final XmlCodecProvider codecProvider;
+    private final NodeParserDispatcher<Element> dispatcher;
 
-    public AugmentationNodeDomParser(XmlCodecProvider codecProvider) {
-        this.codecProvider = Preconditions.checkNotNull(codecProvider);
+    AugmentationNodeDomParser(final NodeParserDispatcher<Element> dispatcher) {
+        this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
 
     @Override
@@ -32,7 +31,7 @@ public final class AugmentationNodeDomParser extends AugmentationNodeBaseParser<
 
     @Override
     protected NodeParserDispatcher<Element> getDispatcher() {
-        return DomNodeDispatcher.getInstance(codecProvider);
+        return dispatcher;
     }
 
 }
index 5e077207aa5e96db52ce6a0d80f455f4469a41fc..97e8a6171cdaaf0d82c1031247c181385fcbb0d6 100644 (file)
@@ -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<Element> {
+final class ChoiceNodeDomParser extends ChoiceNodeBaseParser<Element> {
 
-    private final XmlCodecProvider codecProvider;
+    private final NodeParserDispatcher<Element> dispatcher;
 
-    public ChoiceNodeDomParser(XmlCodecProvider codecProvider) {
-        this.codecProvider = Preconditions.checkNotNull(codecProvider);
+    ChoiceNodeDomParser(NodeParserDispatcher<Element> dispatcher) {
+        this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
 
     @Override
@@ -32,7 +31,6 @@ public final class ChoiceNodeDomParser extends ChoiceNodeBaseParser<Element> {
 
     @Override
     protected NodeParserDispatcher<Element> getDispatcher() {
-        return DomNodeDispatcher.getInstance(codecProvider);
+        return dispatcher;
     }
-
 }
index 2b0b63c9f583991fc234c2072d92a3d88e077292..c03113af22cd5cbeae7c30feff0aa655082ea3ba 100644 (file)
@@ -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<Element> {
+final class ContainerNodeDomParser extends ContainerNodeBaseParser<Element> {
 
-    private final XmlCodecProvider codecProvider;
+    private final NodeParserDispatcher<Element> dispatcher;
 
-    public ContainerNodeDomParser(XmlCodecProvider codecProvider) {
-        this.codecProvider = Preconditions.checkNotNull(codecProvider);
+    ContainerNodeDomParser(final NodeParserDispatcher<Element> dispatcher) {
+        this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
+
     @Override
     protected Map<QName, String> getAttributes(Element element) {
         return DomUtils.toAttributes(element.getAttributes());
@@ -33,7 +33,7 @@ public final class ContainerNodeDomParser extends ContainerNodeBaseParser<Elemen
 
     @Override
     protected NodeParserDispatcher<Element> 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 (file)
index ae725f5..0000000
+++ /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<Element> {
-
-        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<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
-            return containerNodeDomParser;
-        }
-
-        @Override
-        protected ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
-            return leafNodeDomParser;
-        }
-
-        @Override
-        protected ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
-            return leafSetNodeDomParser;
-        }
-
-        @Override
-        protected ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
-            return mapNodeDomParser;
-        }
-
-        @Override
-        protected ToNormalizedNodeParser<Element, org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode, ChoiceNode> getChoiceNodeParser() {
-            return choiceNodeDomParser;
-        }
-
-        @Override
-        protected ToNormalizedNodeParser<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
-            return augmentationNodeDomParser;
-        }
-
-        public static NodeParserDispatcher<Element> 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 (file)
index 0000000..53d68f8
--- /dev/null
@@ -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<Element> {
+    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<Element> dispatcher = new NodeParserDispatcher.BaseNodeParserDispatcher<Element>(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<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeParser() {
+        return augmentationNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeParser() {
+        return choiceNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, ContainerNode, ContainerSchemaNode> getContainerNodeParser() {
+        return containerNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeParser() {
+        return leafNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeParser() {
+        return leafSetEntryNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeParser() {
+        return leafSetNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeParser() {
+        return mapEntryNodeParser;
+    }
+
+    @Override
+    public ToNormalizedNodeParser<Element, MapNode, ListSchemaNode> getMapNodeParser() {
+        return mapNodeParser;
+    }
+}
index 59ad9f84026e477df16ed3058e19f2725642ed84..6c5d064268b09270ed80ef40522d932af19433c1 100644 (file)
@@ -18,11 +18,11 @@ import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
 
-public class LeafNodeDomParser extends LeafNodeBaseParser<Element> {
+final class LeafNodeDomParser extends LeafNodeBaseParser<Element> {
 
     private final XmlCodecProvider codecProvider;
 
-    public LeafNodeDomParser(XmlCodecProvider codecProvider) {
+    LeafNodeDomParser(XmlCodecProvider codecProvider) {
         this.codecProvider = Preconditions.checkNotNull(codecProvider);
     }
 
index 047cd2b2821dbc2c5ae6a4911c42409f55242bb4..2b224a0e718b5064c6c2c32d259ebf29e3abffbc 100644 (file)
@@ -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<Element> {
+import com.google.common.base.Preconditions;
+
+final class LeafSetEntryNodeDomParser extends LeafSetEntryNodeBaseParser<Element> {
 
     private final XmlCodecProvider codecProvider;
 
-    public LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider) {
+    LeafSetEntryNodeDomParser(XmlCodecProvider codecProvider) {
         this.codecProvider = Preconditions.checkNotNull(codecProvider);
     }
 
index 8a771aac9c6712cdd6cb8c8de6c6e5dbba1bf9ba..8f6ee6ee2152fbf1ed60f9f4afa9e9433f8c627d 100644 (file)
@@ -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<Element> {
+final class LeafSetNodeDomParser extends LeafSetNodeBaseParser<Element> {
 
     private final LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser;
 
-    public LeafSetNodeDomParser(LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser) {
+    LeafSetNodeDomParser(LeafSetEntryNodeDomParser leafSetEntryNodeBaseParser) {
         this.leafSetEntryNodeBaseParser = leafSetEntryNodeBaseParser;
     }
 
index e3c5e7d3281a8e9bd87850535a04a8ebfedc2e51..65dde5cf5ba1a3a6801f04aacf82ae8f1de07a62 100644 (file)
@@ -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<Element> {
+final class MapEntryNodeDomParser extends MapEntryNodeBaseParser<Element> {
 
-    private final XmlCodecProvider codecProvider;
+    private final NodeParserDispatcher<Element> dispatcher;
 
-    public MapEntryNodeDomParser(XmlCodecProvider codecProvider) {
-        this.codecProvider = Preconditions.checkNotNull(codecProvider);
+    MapEntryNodeDomParser(final NodeParserDispatcher<Element> dispatcher) {
+        this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
 
     @Override
@@ -34,7 +33,7 @@ public final class MapEntryNodeDomParser extends MapEntryNodeBaseParser<Element>
 
     @Override
     protected NodeParserDispatcher<Element> getDispatcher() {
-        return DomNodeDispatcher.getInstance(codecProvider);
+        return dispatcher;
     }
 
     @Override
index 1549269aaf97b923f952baa5373e961db79da2e5..ddc7163556877ac84b47f322968e8aaf1c2e7e83 100644 (file)
@@ -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<Element> {
+final class MapNodeDomParser extends MapNodeBaseParser<Element> {
 
     private final MapEntryNodeDomParser mapEntryParser;
 
-    public MapNodeDomParser(MapEntryNodeDomParser mapEntryParser) {
+    MapNodeDomParser(MapEntryNodeDomParser mapEntryParser) {
         this.mapEntryParser = mapEntryParser;
     }
 
index fbffc03abbfd1ae8c40287e42a567d944822172b..99547406bae3862124ad616cdde2342ef990c3d1 100644 (file)
@@ -13,12 +13,12 @@ import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
 
-public class AugmentationNodeDomSerializer extends
+final class AugmentationNodeDomSerializer extends
         AugmentationNodeBaseSerializer<Element> {
 
     private final NodeSerializerDispatcher<Element> dispatcher;
 
-    public AugmentationNodeDomSerializer(NodeSerializerDispatcher<Element> dispatcher) {
+    AugmentationNodeDomSerializer(NodeSerializerDispatcher<Element> dispatcher) {
         this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
 
index 1db6a8b6639592f5581f7810db64f418f631fe5f..8579202e515a3a185dec973dc3f6d4804bc9bb27 100644 (file)
@@ -13,10 +13,10 @@ import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
 
-public class ChoiceNodeDomSerializer extends ChoiceNodeBaseSerializer<Element> {
+final class ChoiceNodeDomSerializer extends ChoiceNodeBaseSerializer<Element> {
     private final NodeSerializerDispatcher<Element> dispatcher;
 
-    public ChoiceNodeDomSerializer(final NodeSerializerDispatcher<Element> dispatcher) {
+    ChoiceNodeDomSerializer(final NodeSerializerDispatcher<Element> dispatcher) {
         this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
 
index c5641a038a889164d556d112471b01224ff1fb23..3144806b9c37922e02cc799e195c8aa02b5f2bd2 100644 (file)
@@ -19,13 +19,13 @@ import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
 
-public class ContainerNodeDomSerializer extends
+final class ContainerNodeDomSerializer extends
         ContainerNodeBaseSerializer<Element> {
 
-    private final Document doc;
     private final NodeSerializerDispatcher<Element> dispatcher;
+    private final Document doc;
 
-    public ContainerNodeDomSerializer(final Document doc, final NodeSerializerDispatcher<Element> dispatcher) {
+    ContainerNodeDomSerializer(final Document doc, final NodeSerializerDispatcher<Element> 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 (file)
index 0000000..0a5aba7
--- /dev/null
@@ -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<Element> {
+    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<Element> dispatcher = new NodeSerializerDispatcher.BaseNodeSerializerDispatcher<Element>(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<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeSerializer() {
+               return augmentSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeSerializer() {
+               return choiceSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, ContainerNode, ContainerSchemaNode> getContainerNodeSerializer() {
+               return containerSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeSerializer() {
+               return leafNodeSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, LeafSetEntryNode<?>, LeafListSchemaNode> getLeafSetEntryNodeSerializer() {
+               return leafSetEntryNodeSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeSerializer() {
+               return leafSetSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, MapEntryNode, ListSchemaNode> getMapEntryNodeSerializer() {
+               return mapEntryNodeSerializer;
+       }
+
+       @Override
+       public FromNormalizedNodeSerializer<Element, MapNode, ListSchemaNode> 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 (file)
index 9dee602..0000000
+++ /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<Element> {
-    private static final Cache<Document, DomNodeSerializerDispatcher> dispatcherCache =
-            CacheBuilder.newBuilder().weakKeys().build();
-
-    private final FromNormalizedNodeSerializer<Element, ContainerNode, ContainerSchemaNode> containerSerializer;
-    private final FromNormalizedNodeSerializer<Element, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> choiceSerializer;
-    private final FromNormalizedNodeSerializer<Element, AugmentationNode, AugmentationSchema> augmentSerializer;
-    private final FromNormalizedNodeSerializer<Element, LeafNode<?>, LeafSchemaNode> leafNodeSerializer;
-    private final FromNormalizedNodeSerializer<Element, LeafSetNode<?>, LeafListSchemaNode> leafSetSerializer;
-    private final FromNormalizedNodeSerializer<Element, MapNode, ListSchemaNode> 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<DomNodeSerializerDispatcher>() {
-                @Override
-                public DomNodeSerializerDispatcher call() {
-                    return new DomNodeSerializerDispatcher(doc, codecProvider);
-                }
-            });
-        } catch (ExecutionException e) {
-            throw new IllegalStateException("Failed to instantiated a dispatcher", e);
-        }
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, ContainerNode, ContainerSchemaNode> getContainerNodeSerializer() {
-        return containerSerializer;
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, LeafNode<?>, LeafSchemaNode> getLeafNodeSerializer() {
-        return leafNodeSerializer;
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, LeafSetNode<?>, LeafListSchemaNode> getLeafSetNodeSerializer() {
-        return leafSetSerializer;
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, MapNode, ListSchemaNode> getMapNodeSerializer() {
-        return mapNodeSerializer;
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, ChoiceNode, org.opendaylight.yangtools.yang.model.api.ChoiceNode> getChoiceNodeSerializer() {
-        return choiceSerializer;
-    }
-
-    @Override
-    protected FromNormalizedNodeSerializer<Element, AugmentationNode, AugmentationSchema> getAugmentationNodeSerializer() {
-        return augmentSerializer;
-    }
-}
index acdb7eb73854951a4931ad809b7ff3aa308fc956..83fcb8dd2073f95686598703aab3fe37a792478f 100644 (file)
@@ -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<Element> {
+import com.google.common.base.Preconditions;
 
-    private final Document doc;
+final class LeafNodeDomSerializer extends LeafNodeBaseSerializer<Element> {
     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);
     }
index 98908cca54331525fde196f27b1067b762934162..fcc04c2f3934ca2bb8a921c033d2f828712d7f72 100644 (file)
@@ -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<Element> {
 
     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);
     }
index ae49d68aa5b8aebdd2be66b834ed25a81a230cf8..63af56932c250e81cf7cd1d65a37533d8913592c 100644 (file)
@@ -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<Element> {
-
+final class LeafSetNodeDomSerializer extends LeafSetNodeBaseSerializer<Element> {
     private final FromNormalizedNodeSerializer<Element, LeafSetEntryNode<?>, LeafListSchemaNode> leafSetEntryNodeSerializer;
 
-    public LeafSetNodeDomSerializer(LeafSetEntryNodeDomSerializer leafSetEntryNodeSerializer) {
+    LeafSetNodeDomSerializer(LeafSetEntryNodeDomSerializer leafSetEntryNodeSerializer) {
         this.leafSetEntryNodeSerializer = leafSetEntryNodeSerializer;
     }
 
index 5e65dd8d89e34023152753137a141edde26344c1..dbe8a90fc67f3b0caffa782160a57d950e68b5ba 100644 (file)
@@ -19,13 +19,11 @@ import org.w3c.dom.Element;
 
 import com.google.common.base.Preconditions;
 
-public class MapEntryNodeDomSerializer extends
-        MapEntryNodeBaseSerializer<Element> {
-
-    private final Document doc;
+final class MapEntryNodeDomSerializer extends MapEntryNodeBaseSerializer<Element> {
     private final NodeSerializerDispatcher<Element> dispatcher;
+    private final Document doc;
 
-    public MapEntryNodeDomSerializer(final Document doc, final NodeSerializerDispatcher<Element> dispatcher) {
+    MapEntryNodeDomSerializer(final Document doc, final NodeSerializerDispatcher<Element> dispatcher) {
         this.doc = Preconditions.checkNotNull(doc);
         this.dispatcher = Preconditions.checkNotNull(dispatcher);
     }
index d1486f0d70faeb54652a56138c53259901023566..5404f193bfb69f0ec2283dbda2fee0dfe1cc5fa3 100644 (file)
@@ -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<Element> {
+final class MapNodeDomSerializer extends MapNodeBaseSerializer<Element> {
 
     private final FromNormalizedNodeSerializer<Element, MapEntryNode, ListSchemaNode> mapEntrySerializer;
 
-    public MapNodeDomSerializer(MapEntryNodeDomSerializer mapEntrySerializer) {
+    MapNodeDomSerializer(MapEntryNodeDomSerializer mapEntrySerializer) {
         this.mapEntrySerializer = mapEntrySerializer;
     }
 
index e6c68feee521b2e81a1a90a1efbfa5e693dc3c3d..84ca9f540079f18f05f8e904fd81abe2aa882391 100644 (file)
@@ -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<Element> dispatcher = new DomNodeSerializerDispatcher(newDoc, DomUtils.defaultValueCodecProvider());
-
-        Iterable<Element> els = new ContainerNodeDomSerializer(newDoc,
-                dispatcher).serialize(containerNode, built);
+        Iterable<Element> els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider())
+                .getContainerNodeSerializer().serialize(containerNode, built);
 
         Element el = els.iterator().next();