Rework NormalizedNode type hierarchy
[yangtools.git] / yang / rfc7952-data-util / src / main / java / org / opendaylight / yangtools / rfc7952 / data / util / NormalizedMetadataWriter.java
index aac60f8c80987920e1dd64903474d5a776344db3..80ae0d6b12b8293d5b694c81949e347445c180b0 100644 (file)
@@ -14,10 +14,9 @@ import com.google.common.annotations.Beta;
 import java.io.Closeable;
 import java.io.Flushable;
 import java.io.IOException;
-import javax.annotation.concurrent.NotThreadSafe;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
-import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadataStreamWriter;
+import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
@@ -44,10 +43,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWrit
  *   dataWriter.write(data, metadata);
  * </code>
  *
+ * <p>
+ * This class is NOT thread-safe.
+ *
  * @author Robert Varga
  */
 @Beta
-@NotThreadSafe
+// FIXME: 7.0.0: consider moving this class to api to keep related stuff together
 public final class NormalizedMetadataWriter implements Closeable, Flushable {
     private final NormalizedNodeStreamWriter writer;
     private final boolean orderKeyLeaves;
@@ -97,14 +99,14 @@ public final class NormalizedMetadataWriter implements Closeable, Flushable {
      * @throws IllegalArgumentException if metadata does not match data
      * @throws IOException when thrown from the backing writer.
      */
-    public @NonNull NormalizedMetadataWriter write(final NormalizedNode<?, ?> data, final NormalizedMetadata metadata)
+    public @NonNull NormalizedMetadataWriter write(final NormalizedNode data, final NormalizedMetadata metadata)
             throws IOException {
         final PathArgument dataId = data.getIdentifier();
         final PathArgument metaId = metadata.getIdentifier();
         checkArgument(dataId.equals(metaId), "Mismatched data %s and metadata %s", dataId, metaId);
 
-        final NormalizedMetadataStreamWriter metaWriter = writer.getExtensions()
-                .getInstance(NormalizedMetadataStreamWriter.class);
+        final StreamWriterMetadataExtension metaWriter = writer.getExtensions()
+                .getInstance(StreamWriterMetadataExtension.class);
         final NormalizedNodeStreamWriter delegate = metaWriter == null ? writer
                 : new NormalizedNodeStreamWriterMetadataDecorator(writer, metaWriter, metadata);
 
@@ -116,8 +118,11 @@ public final class NormalizedMetadataWriter implements Closeable, Flushable {
 
     @Override
     public void close() throws IOException {
-        writer.flush();
-        writer.close();
+        try {
+            writer.flush();
+        } finally {
+            writer.close();
+        }
     }
 
     @Override