2 * Copyright (c) 2015 Cisco Systems, Inc. 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 java.util.Objects.requireNonNull;
12 import java.util.ArrayDeque;
13 import java.util.Deque;
14 import javax.xml.transform.dom.DOMSource;
15 import org.eclipse.jdt.annotation.NonNull;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
21 * A {@link NormalizedNodeStreamWriter} which maintains some amount of indentation.
23 // FIXME: implement MetadataExtension and MountPointExtension
24 abstract class AbstractIndentingNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
25 private static final int DEFAULT_INDENT_SIZE = 2;
27 private final Deque<String> indent = new ArrayDeque<>();
28 private final String indentStr;
30 AbstractIndentingNormalizedNodeStreamWriter() {
31 this(DEFAULT_INDENT_SIZE);
34 AbstractIndentingNormalizedNodeStreamWriter(final int indentSize) {
35 indentStr = " ".repeat(indentSize);
39 private String ind() {
43 private void decIndent() {
47 private void incIndent() {
48 indent.push(ind() + indentStr);
52 public final void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) {
53 enterUnkeyedListItem(name, ind());
57 abstract void enterUnkeyedListItem(NodeIdentifier name, String indent);
60 public final void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) {
61 enterUnkeyedList(name, ind());
65 abstract void enterUnkeyedList(NodeIdentifier name, String indent);
68 public final void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) {
69 startMapNode(name, childSizeHint);
73 public final void startMapNode(final NodeIdentifier name, final int childSizeHint) {
74 enterMapNode(name, ind());
78 abstract void enterMapNode(NodeIdentifier name, String indent);
81 public final void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) {
82 enterMapEntryNode(identifier, ind());
86 abstract void enterMapEntryNode(NodeIdentifierWithPredicates identifier, String indent);
89 public final void startLeafSet(final NodeIdentifier name, final int childSizeHint) {
90 enterLeafSet(name, ind());
94 abstract void enterLeafSet(NodeIdentifier name, String indent);
97 public final void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) {
98 startLeafSet(name, childSizeHint);
102 public final void startContainerNode(final NodeIdentifier name, final int childSizeHint) {
103 enterContainerNode(name, ind());
107 abstract void enterContainerNode(NodeIdentifier name, String indent);
110 public final void startChoiceNode(final NodeIdentifier name, final int childSizeHint) {
111 enterChoiceNode(name, ind());
115 abstract void enterChoiceNode(NodeIdentifier name, String indent);
118 public final void startLeafSetEntryNode(final NodeWithValue<?> name) {
119 enterLeafSetEntryNode(name, ind());
123 abstract void enterLeafSetEntryNode(NodeWithValue<?> name, String indent);
126 public final void startLeafNode(final NodeIdentifier name) {
127 enterLeafNode(name, ind());
131 abstract void enterLeafNode(NodeIdentifier name, String indent);
134 public final boolean startAnyxmlNode(final NodeIdentifier name, final Class<?> objectModel) {
135 enterAnyxmlNode(name, ind());
140 abstract void enterAnyxmlNode(NodeIdentifier name, String indent);
143 public final boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) {
144 enterAnydataNode(name, ind());
149 abstract void enterAnydataNode(NodeIdentifier name, String indent);
152 public final void endNode() {
157 abstract void exitNode(String indent);
160 public final void scalarValue(final Object value) {
161 scalarValue(value, ind());
164 abstract void scalarValue(@NonNull Object value, String indent);
167 public final void domSourceValue(final DOMSource value) {
168 scalarValue(requireNonNull(value));