2 * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.api.schema.stream;
10 import static com.google.common.base.Preconditions.checkState;
12 import com.google.common.annotations.Beta;
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
19 * A {@link NormalizedNodeStreamWriter} which formats events into a String, available via #result().
22 public final class FormattingNormalizedNodeStreamWriter extends AbstractIndentingNormalizedNodeStreamWriter {
23 private final StringBuilder sb = new StringBuilder();
25 private boolean closed;
27 public FormattingNormalizedNodeStreamWriter() {
28 // Default constructor
31 public FormattingNormalizedNodeStreamWriter(final int indentSize) {
36 * Return the formatted String result capturing the events which have been streamed into this writer.
38 * @return Formatted string
39 * @throws IllegalStateException if this writer was not {@link #close()}d
41 public @NonNull String result() {
42 checkState(closed, "Attempted to access the result of unclosed writer");
57 void enterUnkeyedListItem(final NodeIdentifier name, final String indent) {
58 sb.append(indent).append(name).append("[](no key)\n");
62 void enterUnkeyedList(final NodeIdentifier name, final String indent) {
63 sb.append(indent).append(name).append("(no key)\n");
67 void enterMapNode(final NodeIdentifier name, final String indent) {
68 sb.append(indent).append(name).append("(key)\n");
72 void enterMapEntryNode(final NodeIdentifierWithPredicates identifier, final String indent) {
73 sb.append(indent).append(identifier).append("[](key)\n");
77 void enterLeafSet(final NodeIdentifier name, final String indent) {
78 sb.append(indent).append(name).append("(leaf-list)\n");
82 void enterContainerNode(final NodeIdentifier name, final String indent) {
83 sb.append(indent).append(name).append("(container)\n");
87 void enterChoiceNode(final NodeIdentifier name, final String indent) {
88 sb.append(indent).append(name).append("(choice)\n");
92 void enterLeafSetEntryNode(final NodeWithValue<?> name, final String indent) {
93 sb.append(indent).append(name.getNodeType()).append("(entry)\n");
97 void enterLeafNode(final NodeIdentifier name, final String indent) {
98 sb.append(indent).append(name).append("(leaf)\n");
102 void enterAnyxmlNode(final NodeIdentifier name, final String indent) {
103 sb.append(indent).append(name).append("(anyxml)\n");
107 void enterAnydataNode(final NodeIdentifier name, final String indent) {
108 sb.append(indent).append(name).append("(anydata)\n");
112 void exitNode(final String indent) {
113 sb.append(indent).append("(end)\n");
117 void scalarValue(final Object value, final String indent) {
118 sb.append(indent).append('(').append(value.getClass().getSimpleName()).append(")=").append(value).append('\n');