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.AugmentationIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
20 * A {@link NormalizedNodeStreamWriter} which formats events into a String, available via #result().
23 public final class FormattingNormalizedNodeStreamWriter extends AbstractIndentingNormalizedNodeStreamWriter {
24 private final StringBuilder sb = new StringBuilder();
26 private boolean closed;
28 public FormattingNormalizedNodeStreamWriter() {
29 // Default constructor
32 public FormattingNormalizedNodeStreamWriter(final int indentSize) {
37 * Return the formatted String result capturing the events which have been streamed into this writer.
39 * @return Formatted string
40 * @throws IllegalStateException if this writer was not {@link #close()}d
42 public @NonNull String result() {
43 checkState(closed, "Attempted to access the result of unclosed writer");
58 void enterUnkeyedListItem(final NodeIdentifier name, final String indent) {
59 sb.append(indent).append(name).append("[](no key)\n");
63 void enterUnkeyedList(final NodeIdentifier name, final String indent) {
64 sb.append(indent).append(name).append("(no key)\n");
68 void enterMapNode(final NodeIdentifier name, final String indent) {
69 sb.append(indent).append(name).append("(key)\n");
73 void enterMapEntryNode(final NodeIdentifierWithPredicates identifier, final String indent) {
74 sb.append(indent).append(identifier).append("[](key)\n");
78 void enterLeafSet(final NodeIdentifier name, final String indent) {
79 sb.append(indent).append(name).append("(leaf-list)\n");
83 void enterContainerNode(final NodeIdentifier name, final String indent) {
84 sb.append(indent).append(name).append("(container)\n");
88 void enterChoiceNode(final NodeIdentifier name, final String indent) {
89 sb.append(indent).append(name).append("(choice)\n");
93 void enterAugmentationNode(final AugmentationIdentifier identifier, final String indent) {
94 sb.append(indent).append(identifier).append("(augmentation)\n");
98 void enterLeafSetEntryNode(final NodeWithValue<?> name, final String indent) {
99 sb.append(indent).append(name.getNodeType()).append("(entry)\n");
103 void enterLeafNode(final NodeIdentifier name, final String indent) {
104 sb.append(indent).append(name).append("(leaf)\n");
108 void enterAnyxmlNode(final NodeIdentifier name, final String indent) {
109 sb.append(indent).append(name).append("(anyxml)\n");
113 void enterAnydataNode(final NodeIdentifier name, final String indent) {
114 sb.append(indent).append(name).append("(anydata)\n");
118 void exitNode(final String indent) {
119 sb.append(indent).append("(end)\n");
123 void scalarValue(final Object value, final String indent) {
124 sb.append(indent).append('(').append(value.getClass().getSimpleName()).append(")=").append(value).append('\n');