Convert length statement
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / length / LengthStatementSupport.java
index 66bfbf576147ca7247c6626409386ac85df7b541..63983604487a8e3467eea64f2b8d03a95e8cd42d 100644 (file)
@@ -14,19 +14,21 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber;
 import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
-public final class LengthStatementSupport extends AbstractStatementSupport<List<ValueRange>, LengthStatement,
-        EffectiveStatement<List<ValueRange>, LengthStatement>> {
+public final class LengthStatementSupport
+        extends BaseStatementSupport<List<ValueRange>, LengthStatement, LengthEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
         .LENGTH)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -37,7 +39,7 @@ public final class LengthStatementSupport extends AbstractStatementSupport<List<
     private static final LengthStatementSupport INSTANCE = new LengthStatementSupport();
 
     private LengthStatementSupport() {
-        super(YangStmtMapping.LENGTH);
+        super(YangStmtMapping.LENGTH, CopyPolicy.CONTEXT_INDEPENDENT);
     }
 
     public static LengthStatementSupport getInstance() {
@@ -45,7 +47,7 @@ public final class LengthStatementSupport extends AbstractStatementSupport<List<
     }
 
     @Override
-    public List<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+    public ImmutableList<ValueRange> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
         final List<ValueRange> ranges = new ArrayList<>();
 
         for (final String singleRange : ArgumentUtils.PIPE_SPLITTER.split(value)) {
@@ -76,20 +78,33 @@ public final class LengthStatementSupport extends AbstractStatementSupport<List<
     }
 
     @Override
-    public LengthStatement createDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx) {
-        return new LengthStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public EffectiveStatement<List<ValueRange>, LengthStatement> createEffective(
-            final StmtContext<List<ValueRange>, LengthStatement, EffectiveStatement<List<ValueRange>,
-                    LengthStatement>> ctx) {
-        return new LengthEffectiveStatementImpl(ctx);
+    protected LengthStatement createDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularLengthStatement(ctx, substatements);
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected LengthStatement createEmptyDeclared(final StmtContext<List<ValueRange>, LengthStatement, ?> ctx) {
+        return new EmptyLengthStatement(ctx);
+    }
+
+    @Override
+    protected LengthEffectiveStatement createEffective(
+            final StmtContext<List<ValueRange>, LengthStatement, LengthEffectiveStatement> ctx,
+            final LengthStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularLengthEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected LengthEffectiveStatement createEmptyEffective(
+            final StmtContext<List<ValueRange>, LengthStatement, LengthEffectiveStatement> ctx,
+            final LengthStatement declared) {
+        return new EmptyLengthEffectiveStatement(declared);
     }
 
     private static Number parseIntegerConstraintValue(final StmtContext<?, ?, ?> ctx, final String value) {