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
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
11 import com.google.common.base.Throwables;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.net.URISyntaxException;
16 import org.antlr.v4.runtime.tree.ParseTreeWalker;
17 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
18 import org.opendaylight.yangtools.yang.common.YangVersion;
19 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
20 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
21 import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
22 import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource;
23 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
24 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
27 import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream;
28 import org.opendaylight.yangtools.yang.parser.util.NamedInputStream;
31 * This class represents implementation of StatementStreamSource in order to emit YANG statements using supplied
34 * @deprecated Use {@link YangStatementStreamSource} instead.
37 public final class YangStatementSourceImpl implements StatementStreamSource {
38 private final YangStatementParserListenerImpl yangStatementModelParser;
39 private final StatementContext statementContext;
40 private final String sourceName;
42 public YangStatementSourceImpl(final String fileName, final boolean isAbsolute) {
44 final NamedFileInputStream is = loadFile(fileName, isAbsolute);
45 sourceName = is.toString();
46 statementContext = YangStatementStreamSource.parseYangSource(is);
47 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
48 } catch (IOException | URISyntaxException | YangSyntaxErrorException e) {
49 throw Throwables.propagate(e);
53 public YangStatementSourceImpl(final InputStream inputStream) {
55 sourceName = inputStream instanceof NamedInputStream ? inputStream.toString() : null;
56 statementContext = YangStatementStreamSource.parseYangSource(inputStream);
57 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
58 } catch (IOException | YangSyntaxErrorException e) {
59 throw Throwables.propagate(e);
63 public YangStatementSourceImpl(final SourceIdentifier identifier, final StatementContext statementContext) {
64 this.statementContext = statementContext;
65 this.sourceName = identifier.getName();
66 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
70 public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) {
71 yangStatementModelParser.setAttributes(writer, stmtDef);
72 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
76 public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
77 final PrefixToModule preLinkagePrefixes) {
78 writeLinkage(writer, stmtDef, preLinkagePrefixes, YangVersion.VERSION_1);
82 public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
83 final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) {
84 yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes, yangVersion);
85 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
89 public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
90 final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) {
91 writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes, YangVersion.VERSION_1);
95 public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
96 final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) {
97 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
98 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
102 public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
103 final PrefixToModule prefixes) {
104 writeFull(writer, stmtDef, prefixes, YangVersion.VERSION_1);
108 public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
109 final PrefixToModule prefixes, final YangVersion yangVersion) {
110 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
111 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
114 private NamedFileInputStream loadFile(final String fileName, final boolean isAbsolute)
115 throws URISyntaxException, IOException {
116 //TODO: we need absolute path first!
117 return isAbsolute ? new NamedFileInputStream(new File(fileName), fileName)
118 : new NamedFileInputStream(new File(getClass().getResource(fileName).toURI()), fileName);
121 public StatementContext getYangAST() {
122 return statementContext;
126 public String toString() {