Update model.api.Status design 00/101200/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 17 May 2022 22:41:16 +0000 (00:41 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 17 May 2022 22:41:16 +0000 (00:41 +0200)
Update the design of this enumeration to match DeviateKind, which
has exactly the same function. Also take advantage of the forArgument()
method in parser proper.

Change-Id: I542f6049b9e291716edcc3aaa987894cb04054b4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Status.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/AbstractStatusStatement.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java

index 17a4ec16fdd18b5ddefda6453badf1d0fa1c6a2c..073a38eeb84b15f36d3b61674e7b9ecbfab39bc6 100644 (file)
@@ -7,8 +7,10 @@
  */
 package org.opendaylight.yangtools.yang.model.api;
 
-import com.google.common.annotations.Beta;
+import static java.util.Objects.requireNonNull;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 
 /**
  * Enumeration describing YANG 'status' statement. If no status is specified, the
@@ -32,28 +34,54 @@ public enum Status {
      */
     OBSOLETE("obsolete");
 
-    private final String argumentString;
+    private final String argument;
 
-    Status(final String argumentString) {
-        this.argumentString = argumentString;
+    Status(final String argument) {
+        this.argument = requireNonNull(argument);
     }
 
-    @Beta
-    public String getArgumentString() {
-        return argumentString;
+    /**
+     * Returns the YANG {@code status} statement argument value corresponding to this object.
+     *
+     * @return String that corresponds to the YANG {@code status} statement argument
+     */
+    public String argument() {
+        return argument;
     }
 
-    @Beta
-    public static Status forArgumentString(final String argumentString) {
-        switch (argumentString) {
-            case "current":
-                return CURRENT;
-            case "deprecated":
-                return DEPRECATED;
-            case "obsolete":
-                return OBSOLETE;
-            default:
-                throw new IllegalArgumentException("Invalid status string '" + argumentString + "'");
+    /**
+     * Return a {@link Status} for specified {@code status} statement argument. This methods returns a  {@code null} for
+     * illegal values. See {@link #ofArgument(String)} for a version which returns non-null and throws an exception for
+     * illegal values.
+     *
+     * @param argument {@code status} statement argument
+     * @return An enumeration value, or {@code null} if specified argument is not valid
+     * @throws NullPointerException if {@code argument} is {@code null}
+     */
+    public static @Nullable Status forArgument(final String argument) {
+        return switch (argument) {
+            case "current" -> CURRENT;
+            case "deprecated" -> DEPRECATED;
+            case "obsolete" -> OBSOLETE;
+            default -> null;
+        };
+    }
+
+    /**
+     * Return a {@link Status} for specified {@code status} statement argument. This methods throws an exception for
+     * illegal values. See {@link #forArgument(String)} for a version which returns a {@code null} instead for illegal
+     * values.
+     *
+     * @param argument {@code status} statement argument
+     * @return An enumeration value, or {@code null} if specified argument is not valid
+     * @throws NullPointerException if {@code argument} is {@code null}
+     * @throws IllegalArgumentException if {@code argument} is not a valid {@code status} statement argument
+     */
+    public static Status ofArgument(final String argument) {
+        final var ret = forArgument(argument);
+        if (ret == null) {
+            throw new IllegalArgumentException("\"" + argument + "\" is not a valid status statement argument");
         }
+        return ret;
     }
 }
index 10c32bcb7161dcfb6ffad2f0993ec8e95cb418bc..459677d6be83d19cbb3d032fd931159f19fde10c 100644 (file)
@@ -28,6 +28,6 @@ abstract class AbstractStatusStatement extends AbstractDeclaredStatement<Status>
 
     @Override
     public final @NonNull String rawArgument() {
-        return argument.getArgumentString();
+        return argument.argument();
     }
 }
index 15c0b6fb555b248e0f015aa536b6270060a90326..a7cdac4b0744d097664124ded4d97fbf4b77410c 100644 (file)
@@ -37,30 +37,18 @@ public final class StatusStatementSupport
 
     @Override
     public Status parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        switch (value) {
-            case "current":
-                return Status.CURRENT;
-            case "deprecated":
-                return Status.DEPRECATED;
-            case "obsolete":
-                return Status.OBSOLETE;
-            default:
-                throw new SourceException(ctx,
-                    "Invalid status '%s', must be one of 'current', 'deprecated' or 'obsolete'", value);
-        }
+        return SourceException.throwIfNull(Status.forArgument(value), ctx,
+            "Invalid status '%s', must be one of 'current', 'deprecated' or 'obsolete'", value);
     }
 
     @Override
     public String internArgument(final String rawArgument) {
-        if ("current".equals(rawArgument)) {
-            return "current";
-        } else if ("deprecated".equals(rawArgument)) {
-            return "deprecated";
-        } else if ("obsolete".equals(rawArgument)) {
-            return "obsolete";
-        } else {
-            return rawArgument;
-        }
+        return switch (rawArgument) {
+            case "current" -> "current";
+            case "deprecated" -> "deprecated";
+            case "obsolete" -> "obsolete";
+            default -> rawArgument;
+        };
     }
 
     @Override