YANGTOOLS-706: split out rfc8040-model-api
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc8040 / YangDataStatementSupport.java
index aff545e7f771f373fe1678e122284176d28e2f1e..82f2051c3608f4775efac7a1a12facc7e2eb6152 100644 (file)
@@ -8,8 +8,9 @@
 package org.opendaylight.yangtools.yang.parser.stmt.rfc8040;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
+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.UnknownStatement;
 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.meta.StmtContext.Mutable;
@@ -17,8 +18,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.SupportedExtensionsMapping;
 
 @Beta
-public final class YangDataStatementSupport extends AbstractStatementSupport<String, UnknownStatement<String>,
-        EffectiveStatement<String, UnknownStatement<String>>> {
+public final class YangDataStatementSupport extends AbstractStatementSupport<String, YangDataStatement,
+        EffectiveStatement<String, YangDataStatement>> {
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
+        SupportedExtensionsMapping.YANG_DATA)
+            .addMandatory(YangStmtMapping.CONTAINER)
+            .addOptional(YangStmtMapping.USES)
+            .build();
     private static final YangDataStatementSupport INSTANCE = new YangDataStatementSupport();
 
     private YangDataStatementSupport() {
@@ -31,7 +37,7 @@ public final class YangDataStatementSupport extends AbstractStatementSupport<Str
 
     @Override
     protected SubstatementValidator getSubstatementValidator() {
-        return YangDataStatement.SUBSTATEMENT_VALIDATOR;
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
@@ -40,23 +46,23 @@ public final class YangDataStatementSupport extends AbstractStatementSupport<Str
     }
 
     @Override
-    public UnknownStatement<String> createDeclared(final StmtContext<String, UnknownStatement<String>, ?> ctx) {
-        return new YangDataStatement(ctx);
+    public YangDataStatement createDeclared(final StmtContext<String, YangDataStatement, ?> ctx) {
+        return new YangDataStatementImpl(ctx);
     }
 
     @Override
-    public EffectiveStatement<String, UnknownStatement<String>> createEffective(final StmtContext<String,
-            UnknownStatement<String>, EffectiveStatement<String, UnknownStatement<String>>> ctx) {
+    public EffectiveStatement<String, YangDataStatement> createEffective(final StmtContext<String,
+            YangDataStatement, EffectiveStatement<String, YangDataStatement>> ctx) {
         // in case of yang-data node we need to perform substatement validation at the point when we have
         // effective substatement contexts already available - if the node has only a uses statement declared in it,
         // one top-level container node may very well be added to the yang-data as an effective statement
-        YangDataStatement.SUBSTATEMENT_VALIDATOR.validate(ctx);
-        return new YangDataEffectiveStatement(ctx);
+        SUBSTATEMENT_VALIDATOR.validate(ctx);
+        return new YangDataEffectiveStatementImpl(ctx);
     }
 
     @Override
-    public void onFullDefinitionDeclared(final Mutable<String, UnknownStatement<String>,
-            EffectiveStatement<String, UnknownStatement<String>>> ctx) {
+    public void onFullDefinitionDeclared(final Mutable<String, YangDataStatement,
+            EffectiveStatement<String, YangDataStatement>> ctx) {
         // as per https://tools.ietf.org/html/rfc8040#section-8,
         // yang-data is ignored unless it appears as a top-level statement
         if (ctx.getParentContext().getParentContext() != null) {