From: Robert Varga Date: Tue, 30 Jun 2020 20:54:47 +0000 (+0200) Subject: Convert length statement X-Git-Tag: v5.0.4~57 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=3533ec18e811a23431a18c9951b709533632bcf8;p=yangtools.git Convert length statement Convert the mostly trivial case of length statement, which can be easily minimized. JIRA: YANGTOOLS-1065 Change-Id: I4cdb6d80b2b9c71e493e9f145c87e2be9e25ef20 Signed-off-by: Robert Varga --- diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthEffectiveStatement.java index 9378f69544..3a9e2ad3f7 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthEffectiveStatement.java @@ -10,12 +10,18 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.List; import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @Beta public interface LengthEffectiveStatement extends EffectiveStatement, LengthStatement>, - // FIXME: 6.0.0: reconsider this interface extension - // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective statements) - ConstraintMetaDefinition { - + // FIXME: 6.0.0: reconsider this interface extension + // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective + // statements) + ConstraintMetaDefinition { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.LENGTH; + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthStatement.java index 728cdd021c..13f717f5b7 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LengthStatement.java @@ -9,8 +9,15 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import java.util.List; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public interface LengthStatement extends ConstrainedDocumentedDeclaredStatement> { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.LENGTH; + } + @Override @NonNull List argument(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthEffectiveStatement.java similarity index 52% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthEffectiveStatement.java index 92f2cb7f7a..7664df4dce 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthEffectiveStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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, @@ -11,12 +11,12 @@ import java.util.List; 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.ValueRange; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin; -final class LengthEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement - implements LengthEffectiveStatement { - LengthEffectiveStatementImpl(final StmtContext, LengthStatement, ?> ctx) { - super(ctx); +final class EmptyLengthEffectiveStatement extends DefaultArgument, LengthStatement> + implements LengthEffectiveStatement, ConstraintMetaDefinitionMixin, LengthStatement> { + EmptyLengthEffectiveStatement(final LengthStatement declared) { + super(declared); } -} \ No newline at end of file +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthStatement.java similarity index 60% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthStatement.java index fdcaef650e..b6f684a8a3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/EmptyLengthStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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, @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length; import java.util.List; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -final class LengthStatementImpl extends AbstractDeclaredStatement> implements LengthStatement { - LengthStatementImpl(final StmtContext, LengthStatement, ?> context) { +final class EmptyLengthStatement extends WithArgument> implements LengthStatement { + EmptyLengthStatement(final StmtContext, ?, ?> context) { super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java index f0e70d2981..6398360448 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/LengthStatementSupport.java @@ -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, LengthStatement, LengthEffectiveStatement> { + extends BaseStatementSupport, LengthStatement, LengthEffectiveStatement> { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .LENGTH) .addOptional(YangStmtMapping.DESCRIPTION) @@ -45,7 +47,7 @@ public final class LengthStatementSupport } @Override - public List parseArgumentValue(final StmtContext ctx, final String value) { + public ImmutableList parseArgumentValue(final StmtContext ctx, final String value) { final List ranges = new ArrayList<>(); for (final String singleRange : ArgumentUtils.PIPE_SPLITTER.split(value)) { @@ -76,19 +78,33 @@ public final class LengthStatementSupport } @Override - public LengthStatement createDeclared(final StmtContext, LengthStatement, ?> ctx) { - return new LengthStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - public LengthEffectiveStatement createEffective( - final StmtContext, LengthStatement, LengthEffectiveStatement> ctx) { - return new LengthEffectiveStatementImpl(ctx); + protected LengthStatement createDeclared(final StmtContext, LengthStatement, ?> ctx, + final ImmutableList> substatements) { + return new RegularLengthStatement(ctx, substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected LengthStatement createEmptyDeclared(final StmtContext, LengthStatement, ?> ctx) { + return new EmptyLengthStatement(ctx); + } + + @Override + protected LengthEffectiveStatement createEffective( + final StmtContext, LengthStatement, LengthEffectiveStatement> ctx, + final LengthStatement declared, final ImmutableList> substatements) { + return new RegularLengthEffectiveStatement(declared, substatements); + } + + @Override + protected LengthEffectiveStatement createEmptyEffective( + final StmtContext, LengthStatement, LengthEffectiveStatement> ctx, + final LengthStatement declared) { + return new EmptyLengthEffectiveStatement(declared); } private static Number parseIntegerConstraintValue(final StmtContext ctx, final String value) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java new file mode 100644 index 0000000000..7a6f4de227 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthEffectiveStatement.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.rfc7950.stmt.length; + +import com.google.common.collect.ImmutableList; +import java.util.List; +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.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin; + +final class RegularLengthEffectiveStatement extends WithSubstatements, LengthStatement> + implements LengthEffectiveStatement, ConstraintMetaDefinitionMixin, LengthStatement> { + RegularLengthEffectiveStatement(final LengthStatement declared, + final ImmutableList> substatements) { + super(declared, substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthStatement.java new file mode 100644 index 0000000000..95af348605 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/length/RegularLengthStatement.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.rfc7950.stmt.length; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularLengthStatement extends WithSubstatements> implements LengthStatement { + RegularLengthStatement(final StmtContext, ?, ?> context, + final ImmutableList> substatements) { + super(context, substatements); + } +}