--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.netconf.cli.writer.impl;
+
+import java.io.IOException;
+import java.util.List;
+import org.opendaylight.controller.netconf.cli.io.ConsoleIO;
+import org.opendaylight.controller.netconf.cli.writer.OutFormatter;
+import org.opendaylight.controller.netconf.cli.writer.WriteException;
+import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.data.api.Node;
+import org.opendaylight.yangtools.yang.data.api.SimpleNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+
+public class CompositeNodeWriter extends AbstractWriter<DataSchemaNode> {
+
+ private final OutFormatter outFormatter;
+
+ public CompositeNodeWriter(final ConsoleIO console, final OutFormatter outFormatter) {
+ super(console);
+ this.outFormatter = outFormatter;
+ }
+
+ @Override
+ protected void writeInner(final DataSchemaNode dataSchemaNode, final List<Node<?>> dataNodes) throws IOException, WriteException {
+ final StringBuilder output = new StringBuilder();
+ writeNode(dataNodes, output);
+ console.writeLn(output);
+ }
+
+ private void writeNode(final List<Node<?>> dataNodes, final StringBuilder output) throws IOException, WriteException {
+ for (final Node<?> dataNode : dataNodes) {
+ outFormatter.increaseIndent();
+ outFormatter.addStringWithIndent(output, dataNode.getNodeType().getLocalName());
+ if (dataNode instanceof CompositeNode) {
+ outFormatter.openComposite(output);
+ outFormatter.newLine(output);
+ writeNode(((CompositeNode) dataNode).getValue(), output);
+ outFormatter.closeCompositeWithIndent(output);
+ outFormatter.newLine(output);
+ } else if (dataNode instanceof SimpleNode<?>) {
+ final SimpleNode<?> simpleNode = (SimpleNode<?>) dataNode;
+ output.append(" ");
+ output.append(simpleNode.getValue());
+ outFormatter.newLine(output);
+ }
+ outFormatter.decreaseIndent();
+ }
+ }
+}