import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementLexer;
import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
import org.slf4j.Logger;
* in order to emit YANG statements using supplied StatementWriter
*
*/
-
public final class YangStatementSourceImpl implements StatementStreamSource {
private YangStatementParserListenerImpl yangStatementModelParser;
private YangStatementParser.StatementContext statementContext;
private ParseTreeWalker walker;
+ private String sourceName;
private static final Logger LOG = LoggerFactory.getLogger(YangStatementSourceImpl.class);
- private static final StatementSourceReference REF = new StatementSourceReference() {
-
- @Override
- public StatementSource getStatementSource() {
- return StatementSource.DECLARATION;
+ public YangStatementSourceImpl(final String fileName, boolean isAbsolute) {
+ try {
+ statementContext = parseYangSource(loadFile(fileName, isAbsolute));
+ walker = new ParseTreeWalker();
+ yangStatementModelParser = new YangStatementParserListenerImpl(fileName);
+ } catch (Exception e) {
+ LOG.warn(e.getMessage(), e);
}
- };
+ }
- public YangStatementSourceImpl(final String fileName) {
+ public YangStatementSourceImpl(final InputStream inputStream) {
try {
- statementContext = parseYangSource(loadFile(fileName));
+ statementContext = parseYangSource(inputStream);
walker = new ParseTreeWalker();
- yangStatementModelParser = new YangStatementParserListenerImpl(REF);
+ yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
} catch (Exception e) {
LOG.warn(e.getMessage(), e);
}
walker.walk(yangStatementModelParser, statementContext);
}
- private FileInputStream loadFile(final String fileName) throws URISyntaxException, FileNotFoundException {
- return new FileInputStream(new File(getClass().getResource(fileName).toURI()));
+ private FileInputStream loadFile(final String fileName, boolean isAbsolute) throws URISyntaxException, FileNotFoundException {
+ return isAbsolute ? new FileInputStream(new File(fileName)) : new FileInputStream(new File(getClass().getResource(fileName).toURI()));
}
- private static YangStatementParser.StatementContext parseYangSource(final InputStream stream) throws IOException, YangSyntaxErrorException {
+ private YangStatementParser.StatementContext parseYangSource(final InputStream stream) throws IOException, YangSyntaxErrorException {
final YangStatementLexer lexer = new YangStatementLexer(new ANTLRInputStream(stream));
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final YangStatementParser parser = new YangStatementParser(tokens);
+ sourceName = parser.getSourceName();
return parser.statement();
}
}