Add prefix() methods 09/103309/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Nov 2022 16:41:09 +0000 (17:41 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 21 Nov 2022 17:25:51 +0000 (18:25 +0100)
A number of statements are required to have a prefix substatement,
expose utility methods to access these substatements directly.

JIRA: YANGTOOLS-1466
Change-Id: Ibc9846ad3e3489755eddbcc02be62c128c0f78e2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DefaultMethodHelpers.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java

index 96d32cec0ffecc28abfaa3b07a1cfed196a7fb7e..8deffd418cc97fff6e6842d850f399d3191c74c1 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
+import com.google.common.base.VerifyException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -17,7 +19,19 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
  */
 public interface BelongsToEffectiveStatement extends EffectiveStatement<Unqualified, BelongsToStatement> {
     @Override
-    default  StatementDefinition statementDefinition() {
+    default StatementDefinition statementDefinition() {
         return YangStmtMapping.BELONGS_TO;
     }
+
+    /**
+     * Return this statement's {@code prefix} substatement.
+     *
+     * @implSpec
+     *      Default implementation uses {@link #findFirstEffectiveSubstatement(Class)} and throws a
+     *      {@link VerifyException} if a matching substatement is not found.
+     * @return A {@link PrefixEffectiveStatement}
+     */
+    default @NonNull PrefixEffectiveStatement prefix() {
+        return DefaultMethodHelpers.verifyPrefixSubstatement(this);
+    }
 }
index 93a525a6b996d76770371d25478ecf0ca8962cd3..f45258cef7275d0dae175e30faf7abb7b499e728 100644 (file)
@@ -32,6 +32,10 @@ final class DefaultMethodHelpers {
         return verifySubstatement(stmt, OutputEffectiveStatement.class);
     }
 
+    static @NonNull PrefixEffectiveStatement verifyPrefixSubstatement(final EffectiveStatement<?, ?> stmt) {
+        return verifySubstatement(stmt, PrefixEffectiveStatement.class);
+    }
+
     private static <T extends EffectiveStatement<?, ?>> @NonNull T verifySubstatement(
             final EffectiveStatement<?, ?> stmt, final Class<T> type) {
         return stmt.findFirstEffectiveSubstatement(type).orElseThrow(
index c5db16987a860f25f4bbe8548c6f987c0d8eab2b..4df44f965276b0b42c8f5d557bf96300af5dfa06 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
+import com.google.common.base.VerifyException;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
@@ -20,4 +22,16 @@ public interface ImportEffectiveStatement extends EffectiveStatement<Unqualified
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.IMPORT;
     }
+
+    /**
+     * Return this statement's {@code prefix} substatement.
+     *
+     * @implSpec
+     *      Default implementation uses {@link #findFirstEffectiveSubstatement(Class)} and throws a
+     *      {@link VerifyException} if a matching substatement is not found.
+     * @return A {@link PrefixEffectiveStatement}
+     */
+    default @NonNull PrefixEffectiveStatement prefix() {
+        return DefaultMethodHelpers.verifyPrefixSubstatement(this);
+    }
 }
index a032a86a2ed142ded3fb062b6de77c781b661aeb..10705b58e15ca00c1239f23777813177209d88ab 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
+import com.google.common.base.VerifyException;
 import java.util.Collection;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
@@ -71,6 +72,18 @@ public non-sealed interface ModuleEffectiveStatement
         return YangStmtMapping.MODULE;
     }
 
+    /**
+     * Return this statement's {@code prefix} substatement.
+     *
+     * @implSpec
+     *      Default implementation uses {@link #findFirstEffectiveSubstatement(Class)} and throws a
+     *      {@link VerifyException} if a matching substatement is not found.
+     * @return A {@link PrefixEffectiveStatement}
+     */
+    default @NonNull PrefixEffectiveStatement prefix() {
+        return DefaultMethodHelpers.verifyPrefixSubstatement(this);
+    }
+
     /**
      * {@inheritDoc}
      *
index c8236cd4108c935b15057a17674e7fcada67e281..b8e455031b7d3c337bf98b8fc66a3f6e79237e49 100644 (file)
@@ -205,7 +205,7 @@ public abstract class AbstractEffectiveModule<D extends DeclaredStatement<Unqual
     protected final void appendPrefixes(final Current<?, ?> stmt,
             final Builder<String, ModuleEffectiveStatement> builder) {
         streamEffectiveSubstatements(ImportEffectiveStatement.class)
-            .map(imp -> imp.findFirstEffectiveSubstatementArgument(PrefixEffectiveStatement.class).get())
+            .map(imp -> imp.prefix().argument())
             .forEach(pfx -> {
                 final var importedCtx =
                     verifyNotNull(stmt.getFromNamespace(ParserNamespaces.IMPORT_PREFIX_TO_MODULECTX, pfx),
index 439fddba0acd8cfcb0dda15c126249463b405459..19481e1245fe82119122602f98bf911a7f371537 100644 (file)
@@ -30,7 +30,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveModule;
 import org.opendaylight.yangtools.yang.parser.spi.ParserNamespaces;
@@ -55,7 +54,7 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleS
         this.qnameModule = requireNonNull(qnameModule);
         this.submodules = ImmutableList.copyOf(submodules);
 
-        final String localPrefix = findFirstEffectiveSubstatementArgument(PrefixEffectiveStatement.class).get();
+        final String localPrefix = prefix().argument();
         final Builder<String, ModuleEffectiveStatement> prefixToModuleBuilder = ImmutableMap.builder();
         prefixToModuleBuilder.put(localPrefix, this);
         appendPrefixes(stmt, prefixToModuleBuilder);