From d9d274d6417d84d1a91a590f47cc2be1af3ec462 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 9 May 2019 18:32:32 +0200 Subject: [PATCH] Add AnydataNode specialization to OpaqueData This bridges AnydataNode with OpaqueData by specializing anydata with opaque data context. Related builders are also provided. JIRA: YANGTOOLS-978 Change-Id: I042749c066b984835741c6ec66e9014f54b8221c Signed-off-by: Robert Varga --- .../yang/data/api/schema/AnydataNode.java | 2 +- .../data/api/schema/OpaqueAnydataNode.java | 22 +++++++++++ .../yang/data/impl/schema/Builders.java | 10 +++++ .../AbstractImmutableAnydataNodeBuilder.java | 28 +++++++++++++ .../ImmutableOpaqueAnydataNodeBuilder.java | 39 +++++++++++++++++++ 5 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OpaqueAnydataNode.java create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableAnydataNodeBuilder.java create mode 100644 yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOpaqueAnydataNodeBuilder.java diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java index fdf74377ef..ae6105f175 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java @@ -12,7 +12,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent /** * A NormalizedNode holding the contents of an {@code anydata} node in some object model. This interface is a common - * capture for all object model specializations. + * capture for all object model specializations -- such as {@link OpaqueAnydataNode}. * * @param Value type, uniquely identifying the object model used for values */ diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OpaqueAnydataNode.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OpaqueAnydataNode.java new file mode 100644 index 0000000000..46992a5aed --- /dev/null +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OpaqueAnydataNode.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2019 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.yangtools.yang.data.api.schema; + +import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.data.api.schema.opaque.OpaqueData; + +/** + * An {@code anydata} node with an {@link OpaqueData} payload. + */ +@Beta +public interface OpaqueAnydataNode extends AnydataNode { + @Override + default Class getValueObjectModel() { + return OpaqueData.class; + } +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java index 3610d4ecdc..9170b37579 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java @@ -7,7 +7,9 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema; +import com.google.common.annotations.Beta; import javax.xml.transform.dom.DOMSource; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -22,10 +24,12 @@ 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.api.schema.OpaqueAnydataNode; import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode; import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; +import org.opendaylight.yangtools.yang.data.api.schema.opaque.OpaqueData; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; @@ -48,6 +52,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMa import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeSchemaAwareBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeSchemaAwareBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOpaqueAnydataNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedLeafSetNodeSchemaAwareBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableOrderedMapNodeBuilder; @@ -104,6 +109,11 @@ public final class Builders { return ImmutableYangModeledAnyXmlNodeBuilder.create(schema); } + @Beta + public static @NonNull NormalizedNodeBuilder opaqueAnydataBuilder() { + return ImmutableOpaqueAnydataNodeBuilder.create(); + } + public static ListNodeBuilder> orderedLeafSetBuilder() { return ImmutableOrderedLeafSetNodeBuilder.create(); } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableAnydataNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableAnydataNodeBuilder.java new file mode 100644 index 0000000000..fc070fe28b --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableAnydataNodeBuilder.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2019 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.yangtools.yang.data.impl.schema.builder.impl; + +import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode; +import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableNormalizedSimpleValueNode; + +@Beta +public abstract class AbstractImmutableAnydataNodeBuilder> + extends AbstractImmutableNormalizedNodeBuilder { + protected AbstractImmutableAnydataNodeBuilder() { + + } + + protected abstract static class AbstractImmutableAnydataNode + extends AbstractImmutableNormalizedSimpleValueNode implements AnydataNode { + protected AbstractImmutableAnydataNode(final NodeIdentifier nodeIdentifier, final V value) { + super(nodeIdentifier, value); + } + } +} diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOpaqueAnydataNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOpaqueAnydataNodeBuilder.java new file mode 100644 index 0000000000..8a354018ba --- /dev/null +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOpaqueAnydataNodeBuilder.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2019 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.yangtools.yang.data.impl.schema.builder.impl; + +import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.OpaqueAnydataNode; +import org.opendaylight.yangtools.yang.data.api.schema.opaque.OpaqueData; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; + +@Beta +public class ImmutableOpaqueAnydataNodeBuilder + extends AbstractImmutableAnydataNodeBuilder { + protected ImmutableOpaqueAnydataNodeBuilder() { + + } + + public static @NonNull NormalizedNodeBuilder create() { + return new ImmutableOpaqueAnydataNodeBuilder(); + } + + @Override + public OpaqueAnydataNode build() { + return new ImmutableOpaqueAnydataNode<>(getNodeIdentifier(), getValue()); + } + + private static final class ImmutableOpaqueAnydataNode extends AbstractImmutableAnydataNode + implements OpaqueAnydataNode { + ImmutableOpaqueAnydataNode(final NodeIdentifier nodeIdentifier, final OpaqueData value) { + super(nodeIdentifier, value); + } + } +} -- 2.36.6