Removing duplicate literal
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / test / TestYangFileStatementSource.java
1 package org.opendaylight.yangtools.yang.stmt.test;
2
3 import java.io.File;
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;
20
21 public class TestYangFileStatementSource implements StatementStreamSource {
22
23         private YangStatementParserListenerImpl yangStatementModelParser;
24         private YangStatementParser.StatementContext statementContext;
25         private ParseTreeWalker walker;
26
27         public TestYangFileStatementSource(final String fileName) {
28                 try {
29                         statementContext = parseYangSource(loadFile(fileName));
30                         walker = new ParseTreeWalker();
31                         yangStatementModelParser = new YangStatementParserListenerImpl(REF);
32                 } catch (Exception e) {
33                         e.printStackTrace();
34                 }
35         }
36
37         private final StatementSourceReference REF = new StatementSourceReference() {
38
39                 @Override
40                 public StatementSource getStatementSource() {
41                         return StatementSource.DECLARATION;
42                 }
43         };
44
45         @Override
46         public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) throws SourceException {
47                 yangStatementModelParser.setAttributes(writer, stmtDef);
48                 walker.walk(yangStatementModelParser, statementContext);
49         }
50
51         @Override
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);
55         }
56
57         @Override
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);
61         }
62
63         private FileInputStream loadFile(final String fileName) throws Exception {
64                 return new FileInputStream(new File(getClass().getResource(fileName).toURI()));
65         }
66
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();
77                 return result;
78         }
79 }