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=f587a0df94ec43fb4c365138b3a0e554c74f7ccc;hb=refs%2Fchanges%2F37%2F26937%2F2;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..f587a0df94 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 @@ -7,52 +7,64 @@ */ 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.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.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 { +public class PatternStatementImpl extends AbstractDeclaredStatement implements PatternStatement { + private static final Logger LOG = LoggerFactory.getLogger(PatternStatementImpl.class); + private static final Optional OPTIONAL_EMPTY = Optional.of(""); - protected PatternStatementImpl( - StmtContext context) { + protected PatternStatementImpl(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(StmtContext ctx, String value) { + final String pattern = "^" + value + '$'; + + try { + Pattern.compile(pattern); + return new PatternConstraintEffectiveImpl(pattern, OPTIONAL_EMPTY, OPTIONAL_EMPTY); + } catch (PatternSyntaxException e) { + LOG.debug("Pattern {} failed to compile", pattern, e); + return null; + } } @Override - public PatternStatement createDeclared( - StmtContext ctx) { + public PatternStatement createDeclared(StmtContext ctx) { return new PatternStatementImpl(ctx); } @Override - public EffectiveStatement createEffective( - StmtContext> ctx) { + public EffectiveStatement createEffective( + StmtContext> ctx) { return new PatternEffectiveStatementImpl(ctx); } - } @Override @@ -76,7 +88,7 @@ public class PatternStatementImpl extends AbstractDeclaredStatement } @Override - public String getValue() { + public PatternConstraint getValue() { return argument(); }