Integrate rfc7952-data-util into yang-data-util
[yangtools.git] / data / rfc7952-data-util / src / main / java / org / opendaylight / yangtools / rfc7952 / data / util / NormalizedNodeStreamWriterMetadataDecorator.java
diff --git a/data/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedNodeStreamWriterMetadataDecorator.java b/data/rfc7952-data-util/src/main/java/org/opendaylight/yangtools/rfc7952/data/util/NormalizedNodeStreamWriterMetadataDecorator.java
deleted file mode 100644 (file)
index c2ad649..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * 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.rfc7952.data.util;
-
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.collect.ImmutableMap;
-import java.io.IOException;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.Map;
-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;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedMetadata;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMetadataExtension;
-
-/**
- * A simple decorator on top of a NormalizedNodeStreamWriter, which attaches NormalizedMetadata to the event stream,
- * so that the metadata is emitted along with data.
- */
-final class NormalizedNodeStreamWriterMetadataDecorator extends ForwardingNormalizedNodeStreamWriter {
-    private final Deque<NormalizedMetadata> stack = new ArrayDeque<>();
-    private final StreamWriterMetadataExtension metaWriter;
-    private final NormalizedNodeStreamWriter writer;
-    private final NormalizedMetadata metadata;
-
-    private int absentDepth = 0;
-
-    NormalizedNodeStreamWriterMetadataDecorator(final NormalizedNodeStreamWriter writer,
-            final StreamWriterMetadataExtension metaWriter, final NormalizedMetadata metadata) {
-        this.writer = requireNonNull(writer);
-        this.metaWriter = requireNonNull(metaWriter);
-        this.metadata = requireNonNull(metadata);
-    }
-
-    @Override
-    protected NormalizedNodeStreamWriter delegate() {
-        return writer;
-    }
-
-    @Override
-    public void startLeafNode(final NodeIdentifier name) throws IOException {
-        super.startLeafNode(name);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startLeafSet(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startOrderedLeafSet(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startLeafSetEntryNode(final NodeWithValue<?> name) throws IOException {
-        super.startLeafSetEntryNode(name);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startContainerNode(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startContainerNode(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startUnkeyedList(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startUnkeyedListItem(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startMapNode(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint)
-            throws IOException {
-        super.startMapEntryNode(identifier, childSizeHint);
-        enterMetadataNode(identifier);
-    }
-
-    @Override
-    public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startOrderedMapNode(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startChoiceNode(final NodeIdentifier name, final int childSizeHint) throws IOException {
-        super.startChoiceNode(name, childSizeHint);
-        enterMetadataNode(name);
-    }
-
-    @Override
-    public void startAugmentationNode(final AugmentationIdentifier identifier) throws IOException {
-        super.startAugmentationNode(identifier);
-        enterMetadataNode(identifier);
-    }
-
-    @Override
-    public boolean startAnyxmlNode(final NodeIdentifier name, final Class<?> objectModel) throws IOException {
-        final boolean ret = super.startAnyxmlNode(name, objectModel);
-        if (ret) {
-            enterMetadataNode(name);
-        }
-        return ret;
-    }
-
-    @Override
-    public void endNode() throws IOException {
-        super.endNode();
-
-        if (absentDepth > 0) {
-            absentDepth--;
-        } else {
-            stack.pop();
-        }
-    }
-
-    private void enterMetadataNode(final PathArgument name) throws IOException {
-        if (absentDepth > 0) {
-            absentDepth++;
-            return;
-        }
-
-        final NormalizedMetadata current = stack.peek();
-        if (current != null) {
-            final NormalizedMetadata child = current.getChildren().get(name);
-            if (child != null) {
-                enterChild(child);
-            } else {
-                absentDepth = 1;
-            }
-        } else {
-            // Empty stack: enter first entry
-            enterChild(metadata);
-        }
-    }
-
-    private void enterChild(final NormalizedMetadata child) throws IOException {
-        final Map<QName, Object> annotations = child.getAnnotations();
-        if (!annotations.isEmpty()) {
-            metaWriter.metadata(ImmutableMap.copyOf(annotations));
-        }
-        stack.push(child);
-    }
-}