Make NormalizedNodeStreamWriter extensible 45/80645/9
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 28 Feb 2019 14:54:24 +0000 (15:54 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 1 Mar 2019 08:48:47 +0000 (09:48 +0100)
NormalizedNodeStreamWriter needs to cater to at least one extension,
which is metadata emission. Introduce
NormalizedNodeStreamWriterExtension and add a getExtensions() method,
which returns no extensions by default.

JIRA: YANGTOOLS-497
Change-Id: Iebe11b80c3199f6b37b46c85bd7362a764de4ed6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/ForwardingNormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriter.java
yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriterExtension.java [new file with mode: 0644]

index 9f6da2fc1e692e55e798122f2eead8d9921dba66..65941af3dbb2fa2386d1da5735f3ed80baa95c56 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.data.api.schema.stream;
 
+import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.ForwardingObject;
 import java.io.IOException;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -19,6 +20,11 @@ public abstract class ForwardingNormalizedNodeStreamWriter extends ForwardingObj
     @Override
     protected abstract NormalizedNodeStreamWriter delegate();
 
+    @Override
+    public ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
+        return delegate().getExtensions();
+    }
+
     @Override
     public void leafNode(final NodeIdentifier name, final Object value) throws IOException {
         delegate().leafNode(name, value);
index d1b54e36c15d69d5c147b13dfb9d7169f33553e2..99bbda1c0d27705c7149277b6b18e0776624e1e8 100644 (file)
@@ -13,6 +13,7 @@ import java.io.Closeable;
 import java.io.Flushable;
 import java.io.IOException;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.concepts.ExtensibleObject;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
@@ -77,7 +78,8 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
  * and resources needlessly.
  *
  */
-public interface NormalizedNodeStreamWriter extends Closeable, Flushable {
+public interface NormalizedNodeStreamWriter extends Closeable, Flushable,
+        ExtensibleObject<NormalizedNodeStreamWriter, NormalizedNodeStreamWriterExtension> {
 
     /**
      * Methods in this interface allow users to hint the underlying
diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriterExtension.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/NormalizedNodeStreamWriterExtension.java
new file mode 100644 (file)
index 0000000..34d32d3
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2019 Pantheon Technologies, 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.stream;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.concepts.ObjectExtension;
+
+/**
+ * Extension interface for {@link NormalizedNodeStreamWriter}. Extensions should extend this interface and their
+ * instances should be made available through {@link NormalizedNodeStreamWriter#getExtensions()}.
+ *
+ * @author Robert Varga
+ */
+@Beta
+public interface NormalizedNodeStreamWriterExtension extends
+    ObjectExtension<NormalizedNodeStreamWriter, NormalizedNodeStreamWriterExtension> {
+
+}