Bug 7051 - moving of SubstatementValidator into spi.meta package
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / MustStatementImpl.java
index 5df5575050d930ef3383899b2a54b87ce3ff4e6e..4d5aa50acc5306499161d88ff02920c4ff61289e 100644 (file)
@@ -1,74 +1,96 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl;
-
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 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.MustStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
 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 javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.MustEffectiveStatementImpl;
 
-public class MustStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements
-        MustStatement {
+public class MustStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements MustStatement {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
+            .MUST)
+            .addOptional(YangStmtMapping.DESCRIPTION)
+            .addOptional(YangStmtMapping.ERROR_APP_TAG)
+            .addOptional(YangStmtMapping.ERROR_MESSAGE)
+            .addOptional(YangStmtMapping.REFERENCE)
+            .build();
 
-    protected MustStatementImpl(
-            StmtContext<RevisionAwareXPath, MustStatement, ?> context) {
+    protected MustStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> context) {
         super(context);
     }
 
-    public static class Definition extends AbstractStatementSupport<RevisionAwareXPath,MustStatement,EffectiveStatement<RevisionAwareXPath,MustStatement>> {
+    public static class Definition extends
+            AbstractStatementSupport<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> {
 
         public Definition() {
-            super(Rfc6020Mapping.MUST);
+            super(YangStmtMapping.MUST);
         }
 
-        @Override public RevisionAwareXPath parseArgumentValue(
-                StmtContext<?, ?, ?> ctx, String value) throws SourceException {
-            return new RevisionAwareXPathImpl(value, false);
+        @Override
+        public RevisionAwareXPath parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+            return Utils.parseXPath(ctx, value);
         }
 
-        @Override public MustStatement createDeclared(
-                StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
+        @Override
+        public MustStatement createDeclared(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
             return new MustStatementImpl(ctx);
         }
 
-        @Override public EffectiveStatement<RevisionAwareXPath, MustStatement> createEffective(
-                StmtContext<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> ctx) {
+        @Override
+        public EffectiveStatement<RevisionAwareXPath, MustStatement> createEffective(
+                final StmtContext<RevisionAwareXPath, MustStatement, EffectiveStatement<RevisionAwareXPath, MustStatement>> ctx) {
             return new MustEffectiveStatementImpl(ctx);
         }
+
+        @Override
+        protected SubstatementValidator getSubstatementValidator() {
+            return SUBSTATEMENT_VALIDATOR;
+        }
     }
 
-    @Nonnull @Override
+    @Nonnull
+    @Override
     public RevisionAwareXPath getCondition() {
         return argument();
     }
 
-    @Nullable @Override
+    @Nullable
+    @Override
     public ErrorAppTagStatement getErrorAppTagStatement() {
         return firstDeclared(ErrorAppTagStatement.class);
     }
 
-    @Nullable @Override
+    @Nullable
+    @Override
     public ErrorMessageStatement getErrorMessageStatement() {
         return firstDeclared(ErrorMessageStatement.class);
     }
 
-    @Nullable @Override
+    @Nullable
+    @Override
     public DescriptionStatement getDescription() {
         return firstDeclared(DescriptionStatement.class);
     }
 
-    @Nullable @Override
+    @Nullable
+    @Override
     public ReferenceStatement getReference() {
         return firstDeclared(ReferenceStatement.class);
     }