From 8b7baccf66f61a19e984ee54c3c8e8f75fa0e7bf Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 19 Jan 2021 19:44:44 +0100 Subject: [PATCH] Promote BaseBooleanStatementSupport Promote this class as parser.spi.meta.AbstractBooleanStatementSupport, making it easier to use. JIRA: YANGTOOLS-1150 Change-Id: I2f6d5c384246aca8b154d28bf8aeea94d19545b7 Signed-off-by: Robert Varga --- .../parser/rfc7950/stmt/ArgumentUtils.java | 24 ----------------- .../stmt/config/ConfigStatementSupport.java | 4 +-- .../mandatory/MandatoryStatementSupport.java | 4 +-- .../RequireInstanceStatementSupport.java | 4 +-- .../YinElementStatementSupport.java | 4 +-- .../AbstractBooleanStatementSupport.java} | 26 ++++++++++++++----- 6 files changed, 27 insertions(+), 39 deletions(-) rename yang/{yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseBooleanStatementSupport.java => yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java} (77%) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ArgumentUtils.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ArgumentUtils.java index a43313d224..8ac80fb539 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ArgumentUtils.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/ArgumentUtils.java @@ -14,9 +14,7 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.checkerframework.checker.regex.qual.Regex; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; @@ -53,28 +51,6 @@ public final class ArgumentUtils { return new BigDecimal(num1.toString()).compareTo(new BigDecimal(num2.toString())); } - public static String internBoolean(final String input) { - if ("true".equals(input)) { - return "true"; - } else if ("false".equals(input)) { - return "false"; - } else { - return input; - } - } - - public static @NonNull Boolean parseBoolean(final StmtContext ctx, final String input) { - if ("true".equals(input)) { - return Boolean.TRUE; - } else if ("false".equals(input)) { - return Boolean.FALSE; - } else { - final StatementDefinition def = ctx.publicDefinition(); - throw new SourceException(ctx, "Invalid '%s' statement %s '%s', it can be either 'true' or 'false'", - def.getStatementName(), def.getArgumentDefinition().get().getArgumentName(), input); - } - } - public static boolean isAbsoluteXPath(final String path) { return PATH_ABS.matcher(path).matches(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java index 1a4e817379..9609c93992 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/config/ConfigStatementSupport.java @@ -13,12 +13,12 @@ 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.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseBooleanStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ConfigStatementSupport - extends BaseBooleanStatementSupport { + extends AbstractBooleanStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.CONFIG).build(); private static final ConfigStatementSupport INSTANCE = new ConfigStatementSupport(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java index eef476681c..2f2bad7c15 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/mandatory/MandatoryStatementSupport.java @@ -13,12 +13,12 @@ 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.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseBooleanStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class MandatoryStatementSupport extends - BaseBooleanStatementSupport { + AbstractBooleanStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.MANDATORY).build(); private static final MandatoryStatementSupport INSTANCE = new MandatoryStatementSupport(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java index d22eec3666..9cab1634ae 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/require_instance/RequireInstanceStatementSupport.java @@ -13,12 +13,12 @@ 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.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseBooleanStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class RequireInstanceStatementSupport - extends BaseBooleanStatementSupport { + extends AbstractBooleanStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.REQUIRE_INSTANCE).build(); private static final RequireInstanceStatementSupport INSTANCE = new RequireInstanceStatementSupport(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java index 5f405d11f1..8d171ba044 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/yin_element/YinElementStatementSupport.java @@ -13,12 +13,12 @@ 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.YinElementEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseBooleanStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class YinElementStatementSupport - extends BaseBooleanStatementSupport { + extends AbstractBooleanStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.YIN_ELEMENT).build(); private static final YinElementStatementSupport INSTANCE = new YinElementStatementSupport(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseBooleanStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java similarity index 77% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseBooleanStatementSupport.java rename to yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java index 9e9c5986e2..5b225509cd 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseBooleanStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java @@ -5,7 +5,7 @@ * 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; +package org.opendaylight.yangtools.yang.parser.spi.meta; import static java.util.Objects.requireNonNull; @@ -15,9 +15,8 @@ import org.eclipse.jdt.annotation.NonNull; 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.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; /** * Specialization of {@link AbstractStatementSupport} for statements which carry a Boolean argument and are essentially @@ -27,14 +26,14 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; * @param Effective Statement representation */ @Beta -public abstract class BaseBooleanStatementSupport, +public abstract class AbstractBooleanStatementSupport, E extends EffectiveStatement> extends AbstractStatementSupport { private final @NonNull E emptyEffectiveFalse; private final @NonNull E emptyEffectiveTrue; private final @NonNull D emptyDeclaredFalse; private final @NonNull D emptyDeclaredTrue; - protected BaseBooleanStatementSupport(final StatementDefinition publicDefinition, + protected AbstractBooleanStatementSupport(final StatementDefinition publicDefinition, final E emptyEffectiveFalse, final E emptyEffectiveTrue, final StatementPolicy policy) { super(publicDefinition, policy); this.emptyEffectiveFalse = requireNonNull(emptyEffectiveFalse); @@ -45,12 +44,25 @@ public abstract class BaseBooleanStatementSupport ctx, final String value) { - return ArgumentUtils.parseBoolean(ctx, value); + if ("true".equals(value)) { + return Boolean.TRUE; + } else if ("false".equals(value)) { + return Boolean.FALSE; + } else { + throw new SourceException(ctx, "Invalid '%s' statement %s '%s', it can be either 'true' or 'false'", + getStatementName(), getArgumentDefinition().get().getArgumentName(), value); + } } @Override public final String internArgument(final String rawArgument) { - return ArgumentUtils.internBoolean(rawArgument); + if ("true".equals(rawArgument)) { + return "true"; + } else if ("false".equals(rawArgument)) { + return "false"; + } else { + return rawArgument; + } } @Override -- 2.36.6