+ private static Map<String, String> createModuleNameAndRevisionMap(final String sourceName, final String source) {
+ final Map<String, String> metaDataMap = new HashMap<>();
+ final var revisionSourceIdentifier =
+ createIdentifierFromSourceName(checkNotNull(sourceName));
+
+ final var tempYangTextSchemaSource = new YangTextSchemaSource(revisionSourceIdentifier) {
+ @Override
+ protected MoreObjects.ToStringHelper addToStringAttributes(
+ final MoreObjects.ToStringHelper toStringHelper) {
+ return toStringHelper;
+ }
+
+ @Override
+ public InputStream openStream() {
+ return new ByteArrayInputStream(source.getBytes(StandardCharsets.UTF_8));
+ }
+ };
+ try {
+ final var dependencyInfo = YangModelDependencyInfo.forYangText(tempYangTextSchemaSource);
+ metaDataMap.put("moduleName", dependencyInfo.getName());
+ metaDataMap.put("revision", dependencyInfo.getFormattedRevision());
+ } catch (final YangSyntaxErrorException | IOException e) {
+ throw new ModelValidationException("Yang resource is invalid.",
+ String.format("Yang syntax validation failed for resource %s:%n%s", sourceName, e.getMessage()), e);
+ }
+ return metaDataMap;
+ }
+
+ private static RevisionSourceIdentifier createIdentifierFromSourceName(final String sourceName) {
+ final var matcher = RFC6020_RECOMMENDED_FILENAME_PATTERN.matcher(sourceName);
+ if (matcher.matches()) {
+ return RevisionSourceIdentifier.create(matcher.group(1), Revision.of(matcher.group(2)));
+ }
+ return RevisionSourceIdentifier.create(sourceName);
+ }
+