Bump odlparent/yangtools/mdsal
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / utils / NormalizedNodeXMLOutput.java
1 /*
2  * Copyright (c) 2016 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.datastore.utils;
9
10 import java.io.File;
11 import java.io.FileOutputStream;
12 import java.io.IOException;
13 import java.io.OutputStream;
14 import javanet.staxutils.IndentingXMLStreamWriter;
15 import javax.xml.stream.XMLOutputFactory;
16 import javax.xml.stream.XMLStreamException;
17 import javax.xml.stream.XMLStreamWriter;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
20 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
21 import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 /**
26  * Utility class to output NormalizedNodes as XML.
27  *
28  * @author Thomas Pantelis
29  */
30 public final class NormalizedNodeXMLOutput {
31     private static final Logger LOG = LoggerFactory.getLogger(NormalizedNodeXMLOutput.class);
32     private static final XMLOutputFactory XOF;
33
34     static {
35         final XMLOutputFactory f = XMLOutputFactory.newFactory();
36         f.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
37         XOF = f;
38     }
39
40     private NormalizedNodeXMLOutput() {
41     }
42
43     public static void toStream(final OutputStream outStream, final NormalizedNode node)
44             throws XMLStreamException, IOException {
45         XMLStreamWriter xmlWriter = XOF.createXMLStreamWriter(outStream);
46
47         IndentingXMLStreamWriter indenting = new IndentingXMLStreamWriter(xmlWriter);
48         try (NormalizedNodeStreamWriter streamWriter = XMLStreamNormalizedNodeStreamWriter.createSchemaless(
49                 indenting)) {
50             NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(streamWriter);
51             nodeWriter.write(node);
52             nodeWriter.flush();
53         }
54     }
55
56     public static void toFile(final File file, final NormalizedNode node) {
57         try (FileOutputStream outStream = new FileOutputStream(file)) {
58             toStream(outStream, node);
59         } catch (IOException | XMLStreamException e) {
60             LOG.error("Error writing NormalizedNode to file {}", file, e);
61         }
62     }
63 }