Add AnydataNode specialization to OpaqueData 96/57596/28
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 9 May 2019 16:32:32 +0000 (18:32 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 17 May 2019 00:53:48 +0000 (02:53 +0200)
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 <robert.varga@pantheon.tech>
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/AnydataNode.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OpaqueAnydataNode.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/Builders.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableAnydataNodeBuilder.java [new file with mode: 0644]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableOpaqueAnydataNodeBuilder.java [new file with mode: 0644]

index fdf74377ef54b49a9f257faa3ced8a252c4c43e2..ae6105f1752bec4ba7c8a9ae2f95296b3e3a8c1b 100644 (file)
@@ -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 <V> 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 (file)
index 0000000..46992a5
--- /dev/null
@@ -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<OpaqueData> {
+    @Override
+    default Class<OpaqueData> getValueObjectModel() {
+        return OpaqueData.class;
+    }
+}
index 3610d4ecdcb431c01767d73f404231d1eb2fd264..9170b37579875aacf94e319dcd5887da8f66a579 100644 (file)
@@ -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<NodeIdentifier, OpaqueData, OpaqueAnydataNode> opaqueAnydataBuilder() {
+        return ImmutableOpaqueAnydataNodeBuilder.create();
+    }
+
     public static <T> ListNodeBuilder<T, LeafSetEntryNode<T>> 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 (file)
index 0000000..fc070fe
--- /dev/null
@@ -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<V, T extends AnydataNode<V>>
+        extends AbstractImmutableNormalizedNodeBuilder<NodeIdentifier, V, T> {
+    protected AbstractImmutableAnydataNodeBuilder() {
+
+    }
+
+    protected abstract static class AbstractImmutableAnydataNode<V>
+            extends AbstractImmutableNormalizedSimpleValueNode<NodeIdentifier, V> implements AnydataNode<V> {
+        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 (file)
index 0000000..8a35401
--- /dev/null
@@ -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<OpaqueData, OpaqueAnydataNode> {
+    protected ImmutableOpaqueAnydataNodeBuilder() {
+
+    }
+
+    public static @NonNull NormalizedNodeBuilder<NodeIdentifier, OpaqueData, OpaqueAnydataNode> create() {
+        return new ImmutableOpaqueAnydataNodeBuilder();
+    }
+
+    @Override
+    public OpaqueAnydataNode build() {
+        return new ImmutableOpaqueAnydataNode<>(getNodeIdentifier(), getValue());
+    }
+
+    private static final class ImmutableOpaqueAnydataNode<T> extends AbstractImmutableAnydataNode<OpaqueData>
+            implements OpaqueAnydataNode {
+        ImmutableOpaqueAnydataNode(final NodeIdentifier nodeIdentifier, final OpaqueData value) {
+            super(nodeIdentifier, value);
+        }
+    }
+}