*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.min_elements;
+import com.google.common.collect.ImmutableList;
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.MinElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseInternedStatementSupport;
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 MinElementsStatementSupport extends
- AbstractStatementSupport<Integer, MinElementsStatement, EffectiveStatement<Integer, MinElementsStatement>> {
+public final class MinElementsStatementSupport
+ extends BaseInternedStatementSupport<Integer, MinElementsStatement, MinElementsEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
YangStmtMapping.MIN_ELEMENTS)
.build();
+ private static final MinElementsStatementSupport INSTANCE = new MinElementsStatementSupport();
- public MinElementsStatementSupport() {
+ private MinElementsStatementSupport() {
super(YangStmtMapping.MIN_ELEMENTS);
}
+ public static MinElementsStatementSupport getInstance() {
+ return INSTANCE;
+ }
+
@Override
public Integer parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return Integer.parseInt(value);
+ try {
+ return Integer.valueOf(value);
+ } catch (NumberFormatException e) {
+ throw new SourceException("Invalid min-elements argument", ctx.getStatementSourceReference(), e);
+ }
}
@Override
- public MinElementsStatement createDeclared(
- final StmtContext<Integer, MinElementsStatement, ?> ctx) {
- return new MinElementsStatementImpl(ctx);
+ protected SubstatementValidator getSubstatementValidator() {
+ return SUBSTATEMENT_VALIDATOR;
}
@Override
- public EffectiveStatement<Integer, MinElementsStatement> createEffective(
- final StmtContext<Integer, MinElementsStatement,
- EffectiveStatement<Integer, MinElementsStatement>> ctx) {
- return new MinElementsEffectiveStatementImpl(ctx);
+ protected MinElementsStatement createDeclared(final Integer argument,
+ final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ return new RegularMinElementsStatement(argument, substatements);
}
@Override
- protected SubstatementValidator getSubstatementValidator() {
- return SUBSTATEMENT_VALIDATOR;
+ protected MinElementsStatement createEmptyDeclared(final Integer argument) {
+ return new EmptyMinElementsStatement(argument);
+ }
+
+ @Override
+ protected MinElementsEffectiveStatement createEffective(final MinElementsStatement declared,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return new RegularMinElementsEffectiveStatement(declared, substatements);
+ }
+
+ @Override
+ protected MinElementsEffectiveStatement createEmptyEffective(final MinElementsStatement declared) {
+ return new EmptyMinElementsEffectiveStatement(declared);
}
}
\ No newline at end of file