X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FPatternStatementImpl.java;h=56f562410c1c83d6b338d3ca58487187413b8aa8;hb=80bcbaac427850f34bcaadf375e94134af42d01f;hp=0d35ec52d63711453d0600a3a592f13c71476fee;hpb=30c67c4d780e897d972d60bb79d546b512516f90;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java index 0d35ec52d6..56f562410c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/PatternStatementImpl.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the @@ -18,15 +18,27 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; +import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternConstraintEffectiveImpl; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.PatternEffectiveStatementImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PatternStatementImpl extends AbstractDeclaredStatement implements PatternStatement { - - protected PatternStatementImpl(StmtContext context) { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping + .PATTERN) + .add(Rfc6020Mapping.DESCRIPTION, 0, 1) + .add(Rfc6020Mapping.ERROR_APP_TAG, 0, 1) + .add(Rfc6020Mapping.ERROR_MESSAGE, 0, 1) + .add(Rfc6020Mapping.REFERENCE, 0, 1) + .build(); + private static final Logger LOG = LoggerFactory.getLogger(PatternStatementImpl.class); + + protected PatternStatementImpl(final StmtContext context) { super(context); } @@ -39,32 +51,36 @@ public class PatternStatementImpl extends AbstractDeclaredStatement ctx, String value) { - - final StringBuilder wrapPatternBuilder = new StringBuilder(value.length() + 2); - wrapPatternBuilder.append('^'); - wrapPatternBuilder.append(value); - wrapPatternBuilder.append('$'); - final String pattern = wrapPatternBuilder.toString(); + public PatternConstraint parseArgumentValue(final StmtContext ctx, final String value) { + final String pattern = "^" + Utils.fixUnicodeScriptPattern(value) + '$'; try { Pattern.compile(pattern); - return new PatternConstraintEffectiveImpl(pattern, Optional.of(""), Optional.of("")); } catch (PatternSyntaxException e) { + LOG.debug("Pattern \"{}\" failed to compile at {}", pattern, ctx.getStatementSourceReference(), e); return null; } + + return new PatternConstraintEffectiveImpl(pattern, Optional.absent(), Optional.absent()); } @Override - public PatternStatement createDeclared(StmtContext ctx) { + public PatternStatement createDeclared(final StmtContext ctx) { return new PatternStatementImpl(ctx); } @Override public EffectiveStatement createEffective( - StmtContext> ctx) { + final StmtContext> ctx) { return new PatternEffectiveStatementImpl(ctx); } + + @Override + public void onFullDefinitionDeclared(StmtContext.Mutable> stmt) throws SourceException { + super.onFullDefinitionDeclared(stmt); + SUBSTATEMENT_VALIDATOR.validate(stmt); + } } @Override