diff options
author | 2021-02-11 13:36:30 +0200 | |
---|---|---|
committer | 2021-02-16 10:33:20 +0200 | |
commit | d2f49e50a098695bef48e070dab251b86e80a0a0 (patch) | |
tree | e1f557d2ce5eab5f5504f56e40b2ee7c33186cb6 /cps-service/src/main/java | |
parent | 10edcd916622acd3cb7069a069231153e715b467 (diff) |
Fix yang resource parse failure if filename matches IETF recommended format
Issue-ID: CPS-237
Change-Id: I9a8f95552b9814f02886d1b5074aa6e7a09f582d
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Diffstat (limited to 'cps-service/src/main/java')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java index b1462cdc2..712d9a0e2 100644 --- a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java +++ b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java @@ -30,13 +30,14 @@ import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import lombok.NoArgsConstructor; import org.onap.cps.spi.exceptions.CpsException; import org.onap.cps.spi.exceptions.ModelValidationException; import org.onap.cps.spi.model.ModuleReference; import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.YangNames; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; @@ -50,6 +51,9 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementR @NoArgsConstructor public final class YangTextSchemaSourceSetBuilder { + private static final Pattern RFC6020_RECOMMENDED_FILENAME_PATTERN = + Pattern.compile("([\\w-]+)@(\\d{4}-\\d{2}-\\d{2})(?:\\.yang)?", Pattern.CASE_INSENSITIVE); + private final ImmutableMap.Builder<String, String> yangModelMap = new ImmutableMap.Builder<>(); public YangTextSchemaSourceSetBuilder putAll(final Map<String, String> yangResourceNameToContent) { @@ -143,11 +147,9 @@ public final class YangTextSchemaSourceSetBuilder { .collect(Collectors.toList()); } - private static YangTextSchemaSource toYangTextSchemaSource(final String sourceName, - final String source) { - final Map.Entry<String, String> sourceNameParsed = checkNotNull(YangNames.parseFilename(sourceName)); - final RevisionSourceIdentifier revisionSourceIdentifier = RevisionSourceIdentifier - .create(sourceNameParsed.getKey(), Revision.ofNullable(sourceNameParsed.getValue())); + private static YangTextSchemaSource toYangTextSchemaSource(final String sourceName, final String source) { + final RevisionSourceIdentifier revisionSourceIdentifier = + createIdentifierFromSourceName(checkNotNull(sourceName)); return new YangTextSchemaSource(revisionSourceIdentifier) { @Override @@ -162,4 +164,12 @@ public final class YangTextSchemaSourceSetBuilder { } }; } + + private static RevisionSourceIdentifier createIdentifierFromSourceName(final String sourceName) { + final Matcher 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); + } } |