import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
-import java.io.InputStream;
+import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.Objects;
import org.opendaylight.yangtools.yang.model.api.ModuleImport;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
+import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource;
import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
-import org.opendaylight.yangtools.yang.parser.util.NamedInputStream;
/**
* Helper transfer object which holds basic and dependency information for YANG
* Extracts {@link YangModelDependencyInfo} from input stream containing a YANG model. This parsing does not
* validate full YANG module, only parses header up to the revisions and imports.
*
- * @param yangStream Opened Input stream containing text source of YANG model
+ * @param refClass Base search class
+ * @param resourceName resource name, relative to refClass
* @return {@link YangModelDependencyInfo}
- * @throws IllegalArgumentException If input stream is not valid YANG stream
+ * @throws YangSyntaxErrorException If the resource does not pass syntactic analysis
+ * @throws IOException When the resource cannot be read
+ * @throws IllegalArgumentException
+ * If input stream is not valid YANG stream
*/
- public static YangModelDependencyInfo fromInputStream(final InputStream yangStream) {
- final StatementContext yangAST = new YangStatementSourceImpl(yangStream).getYangAST();
- return parseAST(yangAST, yangStream instanceof NamedInputStream ? yangStream.toString() : null);
+ public static YangModelDependencyInfo forResource(final Class<?> refClass, final String resourceName)
+ throws IOException, YangSyntaxErrorException {
+ final YangStatementStreamSource source = YangStatementStreamSource.create(
+ YangTextSchemaSource.forResource(refClass, resourceName));
+ final ParserRuleContext ast = source.getYangAST();
+ Preconditions.checkArgument(ast instanceof StatementContext);
+ return parseAST((StatementContext) ast, source.getIdentifier().toYangFilename());
}
private static YangModelDependencyInfo parseModuleContext(final StatementContext module, final String sourceName) {
getReference(sourceName, subStatementContext));
final Date revisionDate = revisionDateStr == null ? null : QName.parseRevision(revisionDateStr);
final Optional<SemVer> importSemVer = Optional.fromNullable(findSemanticVersion(subStatementContext,
- sourceName));
+ sourceName));
result.add(new ModuleImportImpl(importedModuleName, revisionDate, importSemVer));
}
}