From 0202c8af49e1ad4aae93ff78908c700a55836e7e Mon Sep 17 00:00:00 2001 From: Jie Han Date: Mon, 28 Aug 2017 14:46:01 +0800 Subject: [PATCH] Binding codec v2 - fix anyxml #2 - Add AnyxmlCodec to serialize/deserialize between Document and DOMSource. Change-Id: Idf3c6be4fa1e88874aa331b170301fa65ce10e1c Signed-off-by: Jie Han --- .../javav2/dom/codec/impl/AnyxmlCodec.java | 46 +++++++++++++++++++ .../context/base/BindingCodecContext.java | 14 ++++++ 2 files changed, 60 insertions(+) create mode 100755 binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AnyxmlCodec.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 index 0000000000..57641cfa50 --- /dev/null +++ b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AnyxmlCodec.java @@ -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 { + + 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); + } +} diff --git a/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/base/BindingCodecContext.java b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/base/BindingCodecContext.java index 6a24aaace6..4588340f0b 100644 --- a/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/base/BindingCodecContext.java +++ b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/base/BindingCodecContext.java @@ -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> instanceIdentifierCodec; private final Codec> identityCodec; + private final Codec 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 getAnyxmlCodec() { + return anyxmlCodec; + } + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public TreeNodeSerializer getEventStreamSerializer(final Class type) { -- 2.36.6