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.model.parser.api.YangSyntaxErrorException;
19 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
20 import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
21 import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource;
22 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
23 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
24 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
26 import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream;
27 import org.opendaylight.yangtools.yang.parser.util.NamedInputStream;
30 * This class represents implementation of StatementStreamSource in order to emit YANG statements using supplied
33 * @deprecated Use {@link YangStatementStreamSource} instead.
36 public final class YangStatementSourceImpl implements StatementStreamSource {
37 private final YangStatementParserListenerImpl yangStatementModelParser;
38 private final StatementContext statementContext;
39 private final String sourceName;
41 public YangStatementSourceImpl(final String fileName, final boolean isAbsolute) {
43 final NamedFileInputStream is = loadFile(fileName, isAbsolute);
44 sourceName = is.toString();
45 statementContext = YangStatementStreamSource.parseYangSource(is);
46 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
47 } catch (IOException | URISyntaxException | YangSyntaxErrorException e) {
48 throw Throwables.propagate(e);
52 public YangStatementSourceImpl(final InputStream inputStream) {
54 sourceName = inputStream instanceof NamedInputStream ? inputStream.toString() : null;
55 statementContext = YangStatementStreamSource.parseYangSource(inputStream);
56 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
57 } catch (IOException | YangSyntaxErrorException e) {
58 throw Throwables.propagate(e);
62 public YangStatementSourceImpl(final SourceIdentifier identifier, final StatementContext statementContext) {
63 this.statementContext = statementContext;
64 this.sourceName = identifier.getName();
65 yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
69 public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) {
70 yangStatementModelParser.setAttributes(writer, stmtDef);
71 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
75 public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
76 final PrefixToModule preLinkagePrefixes) {
77 yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes);
78 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
82 public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
83 final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) {
84 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
85 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
89 public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
90 final PrefixToModule prefixes) {
91 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
92 ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
95 private NamedFileInputStream loadFile(final String fileName, final boolean isAbsolute)
96 throws URISyntaxException, IOException {
97 //TODO: we need absolute path first!
98 return isAbsolute ? new NamedFileInputStream(new File(fileName), fileName)
99 : new NamedFileInputStream(new File(getClass().getResource(fileName).toURI()), fileName);
102 public StatementContext getYangAST() {
103 return statementContext;
107 public String toString() {