summaryrefslogtreecommitdiffstats
path: root/cps-service/src/main/java
diff options
context:
space:
mode:
authorRuslan Kashapov <ruslan.kashapov@pantheon.tech>2021-02-11 13:36:30 +0200
committerRuslan Kashapov <ruslan.kashapov@pantheon.tech>2021-02-16 10:33:20 +0200
commitd2f49e50a098695bef48e070dab251b86e80a0a0 (patch)
treee1f557d2ce5eab5f5504f56e40b2ee7c33186cb6 /cps-service/src/main/java
parent10edcd916622acd3cb7069a069231153e715b467 (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.java22
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 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<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);
+ }
}