1 package org.opendaylight.yangtools.yang.stmt.test;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import org.antlr.v4.runtime.ANTLRInputStream;
8 import org.antlr.v4.runtime.CommonTokenStream;
9 import org.antlr.v4.runtime.tree.ParseTreeWalker;
10 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementLexer;
11 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
12 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
13 import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
14 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
15 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
16 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
17 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
18 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
19 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
21 public class TestYangFileStatementSource implements StatementStreamSource {
23 private YangStatementParserListenerImpl yangStatementModelParser;
24 private YangStatementParser.StatementContext statementContext;
25 private ParseTreeWalker walker;
27 public TestYangFileStatementSource(final String fileName) {
29 statementContext = parseYangSource(loadFile(fileName));
30 walker = new ParseTreeWalker();
31 yangStatementModelParser = new YangStatementParserListenerImpl(REF);
32 } catch (Exception e) {
37 private final StatementSourceReference REF = new StatementSourceReference() {
40 public StatementSource getStatementSource() {
41 return StatementSource.DECLARATION;
46 public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) throws SourceException {
47 yangStatementModelParser.setAttributes(writer, stmtDef);
48 walker.walk(yangStatementModelParser, statementContext);
52 public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) throws SourceException {
53 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
54 walker.walk(yangStatementModelParser, statementContext);
58 public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) throws SourceException {
59 yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
60 walker.walk(yangStatementModelParser, statementContext);
63 private FileInputStream loadFile(final String fileName) throws Exception {
64 return new FileInputStream(new File(getClass().getResource(fileName).toURI()));
67 private static YangStatementParser.StatementContext parseYangSource(final InputStream stream) throws IOException {
68 final YangStatementLexer lexer = new YangStatementLexer(new ANTLRInputStream(stream));
69 final CommonTokenStream tokens = new CommonTokenStream(lexer);
70 final YangStatementParser parser = new YangStatementParser(tokens);
71 //TODO: no error listener yet
72 //parser.removeErrorListeners();
73 //final YangErrorListener errorListener = new YangErrorListener();
74 //parser.addErrorListener(errorListener);
75 final YangStatementParser.StatementContext result = parser.statement();
76 //errorListener.validate();