From d2f49e50a098695bef48e070dab251b86e80a0a0 Mon Sep 17 00:00:00 2001 From: Ruslan Kashapov Date: Thu, 11 Feb 2021 13:36:30 +0200 Subject: Fix yang resource parse failure if filename matches IETF recommended format Issue-ID: CPS-237 Change-Id: I9a8f95552b9814f02886d1b5074aa6e7a09f582d Signed-off-by: Ruslan Kashapov --- .../cps/yang/YangTextSchemaSourceSetBuilder.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'cps-service/src/main/java') 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 b1462cdc21..712d9a0e27 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 yangModelMap = new ImmutableMap.Builder<>(); public YangTextSchemaSourceSetBuilder putAll(final Map 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 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); + } } -- cgit 1.2.3-korg