Binding codec v2 - fix anyxml #2 50/62350/18
authorJie Han <han.jie@zte.com.cn>
Mon, 28 Aug 2017 06:46:01 +0000 (14:46 +0800)
committerJie Han <han.jie@zte.com.cn>
Fri, 23 Feb 2018 00:58:51 +0000 (08:58 +0800)
- Add AnyxmlCodec to serialize/deserialize between
  Document and DOMSource.

Change-Id: Idf3c6be4fa1e88874aa331b170301fa65ce10e1c
Signed-off-by: Jie Han <han.jie@zte.com.cn>
binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AnyxmlCodec.java [new file with mode: 0755]
binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/base/BindingCodecContext.java

diff --git a/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AnyxmlCodec.java b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AnyxmlCodec.java
new file mode 100755 (executable)
index 0000000..57641cf
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018 ZTE, 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.mdsal.binding.javav2.dom.codec.impl;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import javax.xml.transform.dom.DOMSource;
+import org.opendaylight.mdsal.binding.javav2.runtime.context.BindingRuntimeContext;
+import org.opendaylight.yangtools.concepts.Codec;
+import org.w3c.dom.Document;
+
+/**
+ * Codec for serialize/deserialize anyxml.
+ */
+@Beta
+public final class AnyxmlCodec implements Codec<DOMSource, Document> {
+
+    private final BindingRuntimeContext context;
+
+    /**
+     * Prepared binding runtime context for anyxml codec.
+     *
+     * @param context
+     *            - binding runtime context
+     */
+    public AnyxmlCodec(final BindingRuntimeContext context) {
+        this.context = Preconditions.checkNotNull(context);
+    }
+
+    @Override
+    public Document deserialize(final DOMSource input) {
+        Preconditions.checkArgument(input != null, "Input must not be null.");
+        return (Document) input.getNode();
+    }
+
+    @Override
+    public DOMSource serialize(final Document input) {
+        Preconditions.checkArgument(input != null, "Input must not be null.");
+        return new DOMSource(input);
+    }
+}
index 6a24aaace657ac29c89768fef51dac60082f087c..4588340f0b1aa6cfd71c87dd7d105af13474266c 100644 (file)
@@ -23,8 +23,10 @@ import java.util.Map.Entry;
 import java.util.concurrent.Callable;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import javax.xml.transform.dom.DOMSource;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.api.BindingTreeCodec;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.api.BindingTreeNodeCodec;
+import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.AnyxmlCodec;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.IdentifiableItemCodec;
 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.IdentityCodec;
@@ -77,6 +79,7 @@ import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
 
 /**
  * Binding codec context for holding runtime part and codecs.
@@ -88,6 +91,7 @@ public final class BindingCodecContext implements CodecContextFactory, BindingTr
 
     private final Codec<YangInstanceIdentifier, InstanceIdentifier<?>> instanceIdentifierCodec;
     private final Codec<QName, Class<?>> identityCodec;
+    private final Codec<DOMSource, Document> anyxmlCodec;
     private final BindingNormalizedNodeCodecRegistry registry;
     private final BindingRuntimeContext context;
     private final SchemaRootCodecContext<?> root;
@@ -104,6 +108,7 @@ public final class BindingCodecContext implements CodecContextFactory, BindingTr
         this.context = Preconditions.checkNotNull(context, "Binding Runtime Context is required.");
         this.root = SchemaRootCodecContext.create(this);
         this.identityCodec = new IdentityCodec(context);
+        this.anyxmlCodec = new AnyxmlCodec(context);
         this.instanceIdentifierCodec = new InstanceIdentifierCodec(this);
         this.registry = Preconditions.checkNotNull(registry);
     }
@@ -131,6 +136,15 @@ public final class BindingCodecContext implements CodecContextFactory, BindingTr
         return identityCodec;
     }
 
+    /**
+     * Get anyxml codec.
+     *
+     * @return anyxml codec
+     */
+    public Codec<DOMSource, Document> getAnyxmlCodec() {
+        return anyxmlCodec;
+    }
+
     @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     public TreeNodeSerializer getEventStreamSerializer(final Class<?> type) {