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.common.QName;
15 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
22 * A {@link NormalizedNodeStreamWriter} which logs the events into a {@link Logger}.
25 public final class LoggingNormalizedNodeStreamWriter implements NormalizedNodeStreamWriter {
26 private static final Logger LOG = LoggerFactory.getLogger(LoggingNormalizedNodeStreamWriter.class);
27 private static final int DEFAULT_INDENT_SIZE = 2;
29 private final Deque<String> indent = new ArrayDeque<>();
30 private final String indentStr;
32 public LoggingNormalizedNodeStreamWriter() {
33 this(DEFAULT_INDENT_SIZE);
36 public LoggingNormalizedNodeStreamWriter(final int indentSize) {
37 this.indentStr = Strings.repeat(" ", indentSize);
41 private String ind() {
45 private void decIndent() {
49 private void incIndent() {
50 indent.push(ind() + indentStr);
54 public void startUnkeyedListItem(final NodeIdentifier name, final int childSizeHint) {
55 LOG.debug("{}{}[](no key)", ind(), name);
60 public void startUnkeyedList(final NodeIdentifier name, final int childSizeHint) {
61 LOG.debug("{}{}(no key)", ind(), name);
66 public void startOrderedMapNode(final NodeIdentifier name, final int childSizeHint) {
71 public void startMapNode(final NodeIdentifier name, final int childSizeHint) {
72 LOG.debug("{}{}(key)", ind(), name);
77 public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) {
78 LOG.debug("{}{}[](key)", ind(), identifier);
83 public void startLeafSet(final NodeIdentifier name, final int childSizeHint) {
84 LOG.debug("{}{}(leaf-list)", ind(), name);
89 public void startOrderedLeafSet(final NodeIdentifier name, final int childSizeHint) {
90 LOG.debug("{}{}(leaf-list)", ind(), name);
95 public void startContainerNode(final NodeIdentifier name, final int childSizeHint) {
96 LOG.debug("{}{}(container)", ind(), name);
101 public void startChoiceNode(final NodeIdentifier name, final int childSizeHint) {
102 LOG.debug("{}{}(choice)", ind(), name);
107 public void startAugmentationNode(final AugmentationIdentifier identifier) {
108 LOG.debug("{}{}(augmentation)", ind(), identifier);
113 public void leafSetEntryNode(final QName name, final Object value) {
114 LOG.debug("{}{}({}) ", ind(), value, value.getClass().getSimpleName());
118 public void leafNode(final NodeIdentifier name, final Object value) {
120 LOG.debug("{}{}(leaf(null))=null", ind(), name);
122 LOG.debug("{}{}(leaf({}))={}", ind(), name, value.getClass().getSimpleName(), value);
127 public void endNode() {
129 LOG.debug("{}(end)", ind());
133 public void anyxmlNode(final NodeIdentifier name, final Object value) {
134 LOG.debug("{}{}(anyxml)=", ind(), name, value);
138 public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) {
139 LOG.debug("{}{}(yangModeledAnyXml)", ind(), name);
144 public void flush() {
145 LOG.trace("<<FLUSH>>");
149 public void close() {
150 LOG.debug("<<END-OF-STREAM>>");