From bd31998ec77d9dd3763494675c6ca373e4af0bb8 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 1 Jul 2020 09:30:56 +0200 Subject: [PATCH] Convert MaxElementsStatementSupport Convert the trivial case of max-elements statement, which can be easily minimized. JIRA: YANGTOOLS-1065 Change-Id: I47d91af7515e4ecd90776d7df2ae624cf265270f Signed-off-by: Robert Varga --- .../stmt/MaxElementsEffectiveStatement.java | 7 ++- .../model/api/stmt/MaxElementsStatement.java | 7 +++ .../EmptyMaxElementsEffectiveStatement.java | 19 ++++++++ ...pl.java => EmptyMaxElementsStatement.java} | 8 ++-- .../MaxElementsStatementSupport.java | 44 ++++++++++++------- .../RegularMaxElementsEffectiveStatement.java | 22 ++++++++++ .../RegularMaxElementsStatement.java | 21 +++++++++ 7 files changed, 107 insertions(+), 21 deletions(-) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/{MaxElementsStatementImpl.java => EmptyMaxElementsStatement.java} (57%) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsEffectiveStatement.java index d4cd28def9..6dfd961be0 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsEffectiveStatement.java @@ -8,9 +8,14 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; +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 MaxElementsEffectiveStatement extends EffectiveStatement { - + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.MAX_ELEMENTS; + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsStatement.java index cf669e2b90..9fe75c4f73 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MaxElementsStatement.java @@ -10,9 +10,16 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import static com.google.common.base.Verify.verifyNotNull; import org.eclipse.jdt.annotation.NonNull; +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.StatementDefinition; public interface MaxElementsStatement extends DeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.MAX_ELEMENTS; + } + default @NonNull String getValue() { // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here return verifyNotNull(argument()); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java new file mode 100644 index 0000000000..42b47ac654 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsEffectiveStatement.java @@ -0,0 +1,19 @@ +/* + * 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.max_elements; + +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; + +final class EmptyMaxElementsEffectiveStatement extends DefaultArgument + implements MaxElementsEffectiveStatement { + EmptyMaxElementsEffectiveStatement(final MaxElementsStatement declared) { + super(declared); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsStatement.java similarity index 57% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsStatement.java index 59077dcf79..9bb6e16f32 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/EmptyMaxElementsStatement.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, @@ -8,11 +8,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; -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 MaxElementsStatementImpl extends AbstractDeclaredStatement implements MaxElementsStatement { - MaxElementsStatementImpl(final StmtContext context) { +final class EmptyMaxElementsStatement extends WithArgument implements MaxElementsStatement { + EmptyMaxElementsStatement(final StmtContext context) { super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java index b6ff968e21..b4ec2c69c6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/MaxElementsStatementSupport.java @@ -7,22 +7,25 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_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.MaxElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class MaxElementsStatementSupport - extends AbstractStatementSupport { + extends BaseStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.MAX_ELEMENTS) .build(); private static final MaxElementsStatementSupport INSTANCE = new MaxElementsStatementSupport(); private MaxElementsStatementSupport() { - super(YangStmtMapping.MAX_ELEMENTS, CopyPolicy.CONTEXT_INDEPENDENT); + super(YangStmtMapping.MAX_ELEMENTS); } public static MaxElementsStatementSupport getInstance() { @@ -30,29 +33,38 @@ public final class MaxElementsStatementSupport } @Override - public String parseArgumentValue(final StmtContext ctx, final String value) { - return value; + public String internArgument(final String rawArgument) { + return "unbounded".equals(rawArgument) ? "unbounded" : rawArgument; } @Override - public MaxElementsStatement createDeclared( - final StmtContext ctx) { - return new MaxElementsStatementImpl(ctx); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } @Override - public MaxElementsEffectiveStatement createEffective( - final StmtContext ctx) { - return new MaxElementsEffectiveStatementImpl(ctx); + protected MaxElementsStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new RegularMaxElementsStatement(ctx, substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; + protected MaxElementsStatement createEmptyDeclared(final StmtContext ctx) { + return new EmptyMaxElementsStatement(ctx); } @Override - public String internArgument(final String rawArgument) { - return "unbounded".equals(rawArgument) ? "unbounded" : rawArgument; + protected MaxElementsEffectiveStatement createEffective( + final StmtContext ctx, + final MaxElementsStatement declared, + final ImmutableList> substatements) { + return new RegularMaxElementsEffectiveStatement(declared, substatements); + } + + @Override + protected MaxElementsEffectiveStatement createEmptyEffective( + final StmtContext ctx, + final MaxElementsStatement declared) { + return new EmptyMaxElementsEffectiveStatement(declared); } -} \ No newline at end of file +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java new file mode 100644 index 0000000000..d9ff3e00c9 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsEffectiveStatement.java @@ -0,0 +1,22 @@ +/* + * 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.max_elements; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; + +final class RegularMaxElementsEffectiveStatement extends WithSubstatements + implements MaxElementsEffectiveStatement { + RegularMaxElementsEffectiveStatement(final MaxElementsStatement declared, + final ImmutableList> substatements) { + super(declared, substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java new file mode 100644 index 0000000000..d1fbf219d2 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/max_elements/RegularMaxElementsStatement.java @@ -0,0 +1,21 @@ +/* + * 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.max_elements; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularMaxElementsStatement extends WithSubstatements implements MaxElementsStatement { + RegularMaxElementsStatement(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); + } +} -- 2.36.6