Bug 2366 - Effective statments impl merge, retest & bugfix
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / YangStatementSourceImpl.java
index 85b9df00b2222759781ecd9ec42a022083aaa868..96746e8b51496a7d7c52172e3d029800e744edea 100644 (file)
@@ -18,13 +18,11 @@ import org.antlr.v4.runtime.CommonTokenStream;
 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;
@@ -36,27 +34,29 @@ import org.slf4j.LoggerFactory;
  * 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);
         }
@@ -80,14 +80,15 @@ public final class YangStatementSourceImpl implements StatementStreamSource {
         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();
     }
 }