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 com.google.common.annotations.Beta;
11 import com.google.common.base.Strings;
12 import java.util.ArrayDeque;
13 import java.util.Deque;
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.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
21 * A {@link NormalizedNodeStreamWriter} which logs the events into a {@link Logger}.
24 public final class LoggingNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
25 private static final Logger LOG = LoggerFactory.getLogger(LoggingNormalizedNodeStreamWriter.class);
26 private static final int DEFAULT_INDENT_SIZE = 2;
28 private final Deque<String> indent = new ArrayDeque<>();
29 private final String indentStr;
31 public LoggingNormalizedNodeStreamWriter() {
32 this(DEFAULT_INDENT_SIZE);
35 public LoggingNormalizedNodeStreamWriter(final int indentSize) {
36 this.indentStr = Strings.repeat(" ", indentSize);
40 private String ind() {
44 private void decIndent() {
48 private void incIndent() {
49 indent.push(ind() + indentStr);
53 public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) {
54 LOG.debug("{}{}[](no key)", ind(), name);
59 public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) {
60 LOG.debug("{}{}(no key)", ind(), name);
65 public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) {
70 public void startMapNode(final NodeIdentifier name, final int childSizeHint) {
71 LOG.debug("{}{}(key)", ind(), name);
76 public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) {
77 LOG.debug("{}{}[](key)", ind(), identifier);
82 public void startLeafSet(final NodeIdentifier name, final int childSizeHint) {
83 LOG.debug("{}{}(leaf-list)", ind(), name);
88 public void startContainerNode(final NodeIdentifier name, final int childSizeHint) {
89 LOG.debug("{}{}(container)", ind(), name);
94 public void startChoiceNode(final NodeIdentifier name, final int childSizeHint) {
95 LOG.debug("{}{}(choice)", ind(), name);
100 public void startAugmentationNode(final AugmentationIdentifier identifier) {
101 LOG.debug("{}{}(augmentation)", ind(), identifier);
106 public void leafSetEntryNode(final Object value) {
107 LOG.debug("{}{}({}) ", ind(), value, value.getClass().getSimpleName());
111 public void leafNode(final NodeIdentifier name, final Object value) {
113 LOG.debug("{}{}(leaf(null))=null", ind(), name);
115 LOG.debug("{}{}(leaf({}))={}", ind(), name, value.getClass().getSimpleName(), value);
120 public void endNode() throws IllegalStateException {
122 LOG.debug("{}(end)", ind());
126 public void anyxmlNode(final NodeIdentifier name, final Object value) {
127 LOG.debug("{}{}(anyxml)=", ind(), name, value);
131 public void flush() {
132 LOG.trace("<<FLUSH>>");
136 public void close() {
137 LOG.debug("<<END-OF-STREAM>>");