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=41c28754860bb8a07fe39fdd7fb25a060ce47e4b;hpb=be1171fbcc4469bd090366052f96a2ae08ffac25;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 41c2875486..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 @@ -7,52 +7,80 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.PatternEffectiveStatementImpl; - +import com.google.common.base.Optional; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; +import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; -import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; -import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; 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; - -public class PatternStatementImpl extends AbstractDeclaredStatement - implements PatternStatement { - - protected PatternStatementImpl( - StmtContext context) { +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 { + 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); } public static class Definition extends - AbstractStatementSupport> { + AbstractStatementSupport> { public Definition() { super(Rfc6020Mapping.PATTERN); } @Override - public String parseArgumentValue(StmtContext ctx, String value) { - return value; + public PatternConstraint parseArgumentValue(final StmtContext ctx, final String value) { + final String pattern = "^" + Utils.fixUnicodeScriptPattern(value) + '$'; + + try { + Pattern.compile(pattern); + } 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) { + public EffectiveStatement createEffective( + final StmtContext> ctx) { return new PatternEffectiveStatementImpl(ctx); } + @Override + public void onFullDefinitionDeclared(StmtContext.Mutable> stmt) throws SourceException { + super.onFullDefinitionDeclared(stmt); + SUBSTATEMENT_VALIDATOR.validate(stmt); + } } @Override @@ -76,7 +104,7 @@ public class PatternStatementImpl extends AbstractDeclaredStatement } @Override - public String getValue() { + public PatternConstraint getValue() { return argument(); }