From 4c6e99f2ea9108f5b3690139f47b78a52202354e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 1 Mar 2020 13:22:00 +0100 Subject: [PATCH] Move AbstractLazyActionContainerNode to SPI While this is an implementation detail, it can be shared between implementations quite reasonably. Pull it out of binding-dom-codec-impl. JIRA: MDSAL-825 Change-Id: I21b79bee5b73583a406d17665dfd9aff1376c3c3 Signed-off-by: Robert Varga --- .../spi/AbstractLazyActionContainerNode.java | 28 +++++++++++++ .../spi/LazyActionInputContainerNode.java | 30 +++++++++++++ .../spi/LazyActionOutputContainerNode.java | 30 +++++++++++++ .../BindingNormalizedNodeCodecRegistry.java | 42 +------------------ 4 files changed, 90 insertions(+), 40 deletions(-) create mode 100644 binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractLazyActionContainerNode.java create mode 100644 binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionInputContainerNode.java create mode 100644 binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionOutputContainerNode.java diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractLazyActionContainerNode.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractLazyActionContainerNode.java new file mode 100644 index 0000000000..98ad697a0f --- /dev/null +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractLazyActionContainerNode.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.dom.codec.spi; + +import static java.util.Objects.requireNonNull; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; + +@NonNullByDefault +abstract class AbstractLazyActionContainerNode + extends AbstractBindingLazyContainerNode { + final Class> action; + + AbstractLazyActionContainerNode(final NodeIdentifier identifier, final T bindingData, + final BindingNormalizedNodeSerializer codec, final Class> action) { + super(identifier, bindingData, codec); + this.action = requireNonNull(action); + } +} \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionInputContainerNode.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionInputContainerNode.java new file mode 100644 index 0000000000..763f488480 --- /dev/null +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionInputContainerNode.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.dom.codec.spi; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.RpcInput; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; + +@Beta +@NonNullByDefault +public final class LazyActionInputContainerNode extends AbstractLazyActionContainerNode { + public LazyActionInputContainerNode(final NodeIdentifier identifier, final RpcInput bindingData, + final BindingNormalizedNodeSerializer codec, final Class> action) { + super(identifier, bindingData, codec, action); + } + + @Override + protected ContainerNode computeContainerNode(final BindingNormalizedNodeSerializer context) { + return context.toNormalizedNodeActionInput(action, getDataObject()); + } +} \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionOutputContainerNode.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionOutputContainerNode.java new file mode 100644 index 0000000000..02cff16d29 --- /dev/null +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/LazyActionOutputContainerNode.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.dom.codec.spi; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.RpcOutput; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; + +@Beta +@NonNullByDefault +public final class LazyActionOutputContainerNode extends AbstractLazyActionContainerNode { + public LazyActionOutputContainerNode(final NodeIdentifier identifier, final RpcOutput bindingData, + final BindingNormalizedNodeSerializer codec, final Class> action) { + super(identifier, bindingData, codec, action); + } + + @Override + protected ContainerNode computeContainerNode(final BindingNormalizedNodeSerializer context) { + return context.toNormalizedNodeActionOutput(action, getDataObject()); + } +} \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java index 48f94aa1ea..8b997675d9 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingNormalizedNodeCodecRegistry.java @@ -22,7 +22,6 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import java.util.function.BiFunction; import java.util.function.Function; import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; import org.opendaylight.mdsal.binding.dom.codec.api.BindingDataObjectCodecTreeNode; @@ -30,7 +29,8 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory; import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter; -import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingLazyContainerNode; +import org.opendaylight.mdsal.binding.dom.codec.spi.LazyActionInputContainerNode; +import org.opendaylight.mdsal.binding.dom.codec.spi.LazyActionOutputContainerNode; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -307,42 +307,4 @@ public class BindingNormalizedNodeCodecRegistry return input.map(data -> (T) ctx.deserialize(data)); } } - - @NonNullByDefault - private abstract static class AbstractLazyActionContainerNode - extends AbstractBindingLazyContainerNode { - protected final Class> action; - - AbstractLazyActionContainerNode(final NodeIdentifier identifier, final T bindingData, - final BindingNormalizedNodeSerializer codec, final Class> action) { - super(identifier, bindingData, codec); - this.action = requireNonNull(action); - } - } - - @NonNullByDefault - private static final class LazyActionInputContainerNode extends AbstractLazyActionContainerNode { - LazyActionInputContainerNode(final NodeIdentifier identifier, final RpcInput bindingData, - final BindingNormalizedNodeSerializer codec, final Class> action) { - super(identifier, bindingData, codec, action); - } - - @Override - protected ContainerNode computeContainerNode(final BindingNormalizedNodeSerializer context) { - return context.toNormalizedNodeActionInput(action, getDataObject()); - } - } - - @NonNullByDefault - private static final class LazyActionOutputContainerNode extends AbstractLazyActionContainerNode { - LazyActionOutputContainerNode(final NodeIdentifier identifier, final RpcOutput bindingData, - final BindingNormalizedNodeSerializer codec, final Class> action) { - super(identifier, bindingData, codec, action); - } - - @Override - protected ContainerNode computeContainerNode(final BindingNormalizedNodeSerializer context) { - return context.toNormalizedNodeActionOutput(action, getDataObject()); - } - } } -- 2.36.6