1 package org.opendaylight.yangtools.yang.data.api.schema.stream;
3 import com.google.common.annotations.Beta;
4 import com.google.common.base.Strings;
5 import java.util.ArrayDeque;
6 import java.util.Deque;
7 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
8 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
9 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
14 * A {@link NormalizedNodeStreamWriter} which logs the events into a {@link Logger}.
17 public final class LoggingNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
18 private static final Logger LOG = LoggerFactory.getLogger(LoggingNormalizedNodeStreamWriter.class);
19 private static final int DEFAULT_INDENT_SIZE = 2;
21 private final Deque<String> indent = new ArrayDeque<>();
22 private final String indentStr;
24 public LoggingNormalizedNodeStreamWriter() {
25 this(DEFAULT_INDENT_SIZE);
28 public LoggingNormalizedNodeStreamWriter(final int indentSize) {
29 this.indentStr = Strings.repeat(" ", indentSize);
33 private String ind() {
37 private void decIndent() {
41 private void incIndent() {
42 indent.push(ind() + indentStr);
46 public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) {
47 LOG.debug("{}{}[](no key)", ind(), name);
52 public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) {
53 LOG.debug("{}{}(no key)", ind(), name);
58 public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) {
63 public void startMapNode(final NodeIdentifier name, final int childSizeHint) {
64 LOG.debug("{}{}(key)", ind(), name);
69 public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) {
70 LOG.debug("{}{}[](key)", ind(), identifier);
75 public void startLeafSet(final NodeIdentifier name, final int childSizeHint) {
76 LOG.debug("{}{}(leaf-list)", ind(), name);
81 public void startContainerNode(final NodeIdentifier name, final int childSizeHint) {
82 LOG.debug("{}{}(container)", ind(), name);
87 public void startChoiceNode(final NodeIdentifier name, final int childSizeHint) {
88 LOG.debug("{}{}(choice)", ind(), name);
93 public void startAugmentationNode(final AugmentationIdentifier identifier) {
94 LOG.debug("{}{}(augmentation)", ind(), identifier);
99 public void leafSetEntryNode(final Object value) {
100 LOG.debug("{}{}({}) ", ind(), value, value.getClass().getSimpleName());
104 public void leafNode(final NodeIdentifier name, final Object value) {
106 LOG.debug("{}{}(leaf(null))=null", ind(), name);
108 LOG.debug("{}{}(leaf({}))={}", ind(), name, value.getClass().getSimpleName(), value);
113 public void endNode() throws IllegalStateException {
115 LOG.debug("{}(end)", ind());
119 public void anyxmlNode(final NodeIdentifier name, final Object value) {
120 LOG.debug("{}{}(anyxml)=", ind(), name, value);
124 public void flush() {
125 LOG.trace("<<FLUSH>>");
129 public void close() {
130 LOG.debug("<<END-OF-STREAM>>");