2 * Copyright (c) 2014 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.controller.netconf.cli.writer.impl;
10 import java.io.IOException;
11 import java.util.Iterator;
12 import java.util.List;
13 import org.opendaylight.controller.netconf.cli.io.ConsoleIO;
14 import org.opendaylight.controller.netconf.cli.writer.OutFormatter;
15 import org.opendaylight.controller.netconf.cli.writer.WriteException;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
17 import org.opendaylight.yangtools.yang.data.api.Node;
18 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
19 import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer.NodeSerializerDispatcher;
20 import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.DomUtils;
21 import org.opendaylight.yangtools.yang.data.json.schema.cnsn.parser.CnSnToNormalizedNodeParserFactory;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
23 import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
24 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
28 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 public class NormalizedNodeWriter extends AbstractWriter<DataSchemaNode> {
34 private static final Logger LOG = LoggerFactory.getLogger(NormalizedNodeWriter.class);
35 private final OutFormatter out;
37 public NormalizedNodeWriter(final ConsoleIO console, final OutFormatter out) {
42 public void writeInner(final DataSchemaNode dataSchemaNode, final List<Node<?>> dataNodes) throws WriteException,
45 // TODO - add getDispatcher method to CnSnToNormalizedNodeParserFactory
46 // to be able call dispatchChildElement
47 final DataContainerChild<? extends PathArgument, ?> dataContainerChild = parseToNormalizedNode(dataNodes,
50 if (dataContainerChild != null) {
51 console.writeLn(serializeToCliOutput(dataContainerChild, dataSchemaNode));
56 private String serializeToCliOutput(final DataContainerChild<? extends PathArgument, ?> dataContainerChild,
57 final DataSchemaNode childSchema) {
58 final CliOutputFromNormalizedNodeSerializerFactory factorySerialization = CliOutputFromNormalizedNodeSerializerFactory
59 .getInstance(out, DomUtils.defaultValueCodecProvider());
60 final NodeSerializerDispatcher<String> dispatcher = factorySerialization.getDispatcher();
61 final Iterable<String> result = dispatcher.dispatchChildElement(childSchema, dataContainerChild);
67 final Iterator<String> output = result.iterator();
68 if (!output.hasNext()) {
75 private DataContainerChild<? extends PathArgument, ?> parseToNormalizedNode(final List<Node<?>> dataNodes,
76 final DataSchemaNode dataSchemaNode) {
77 final CnSnToNormalizedNodeParserFactory factoryParsing = CnSnToNormalizedNodeParserFactory.getInstance();
78 if (dataSchemaNode instanceof ContainerSchemaNode) {
79 return factoryParsing.getContainerNodeParser().parse(dataNodes, (ContainerSchemaNode) dataSchemaNode);
80 } else if (dataSchemaNode instanceof LeafSchemaNode) {
81 return factoryParsing.getLeafNodeParser().parse(dataNodes, (LeafSchemaNode) dataSchemaNode);
82 } else if (dataSchemaNode instanceof LeafListSchemaNode) {
83 return factoryParsing.getLeafSetNodeParser().parse(dataNodes, (LeafListSchemaNode) dataSchemaNode);
84 } else if (dataSchemaNode instanceof ListSchemaNode) {
85 return factoryParsing.getMapNodeParser().parse(dataNodes, (ListSchemaNode) dataSchemaNode);
86 } else if (dataSchemaNode instanceof ChoiceNode) {
87 return factoryParsing.getChoiceNodeParser().parse(dataNodes, (ChoiceNode) dataSchemaNode);
88 } else if (dataSchemaNode instanceof AugmentationSchema) {
89 return factoryParsing.getAugmentationNodeParser().parse(dataNodes, (AugmentationSchema) dataSchemaNode);