MountPointStatement should operate on MountPointLabel 96/105996/9
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 16 May 2023 16:55:41 +0000 (18:55 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 16 May 2023 21:42:21 +0000 (23:42 +0200)
Having an opaque QName is not exactly friendly, make sure we operate on
MountPointLabel, so it can be directly picked up.

JIRA: YANGTOOLS-1172
Change-Id: I1713c76b9919200d18b3390f085d68d9b12e4354
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java
model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointEffectiveStatement.java
model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointStatement.java
parser/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointEffectiveStatementImpl.java
parser/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java
parser/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
parser/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/RefMountPointStatement.java

index 74abbdc3ddeefe45d16bd7a08723bcb46f6da2a6..6610da5c0df0326e130ef21a8599e8827dc1c426 100644 (file)
@@ -43,7 +43,6 @@ import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stax.StAXSource;
 import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode;
 import org.opendaylight.yangtools.rfc8528.data.api.YangLibraryConstants;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaNode;
 import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountConstants;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -578,7 +577,7 @@ public final class XmlParserStream implements Closeable, Flushable {
                         }
 
                         if (optMount.isPresent()) {
-                            final var label = new MountPointLabel(optMount.orElseThrow().getQName());
+                            final var label = optMount.orElseThrow().asEffectiveStatement().argument();
                             LOG.debug("Assuming node {} and namespace {} belongs to mount point {}", xmlElementName,
                                 nsUri, label);
 
index 4048bfec2e0a68c555450ed855fbebcb5d50aa90..807fa28f672b7dab0dcf7bdd468a5220ee5a80db 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.yangtools.rfc8528.model.api;
 
 import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownEffectiveStatement;
 
@@ -17,7 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownEffectiveStatement;
  * <a href="https://tools.ietf.org/html/rfc8528">RFC8528</a>.
  */
 @Beta
-public interface MountPointEffectiveStatement extends UnknownEffectiveStatement<QName, MountPointStatement> {
+public interface MountPointEffectiveStatement extends UnknownEffectiveStatement<MountPointLabel, MountPointStatement> {
     @Override
     default StatementDefinition statementDefinition() {
         return SchemaMountStatements.MOUNT_POINT;
index bfd817987d2a7f07dc0d260e545b83cb88a4c8a6..97aa2d9c8db9bda99c231c78674d6ad771b6ab8d 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.yangtools.rfc8528.model.api;
 
 import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatementAwareDeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DocumentedDeclaredStatement.WithStatus;
@@ -19,10 +18,15 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
  * <a href="https://tools.ietf.org/html/rfc8528">RFC8528</a>.
  */
 @Beta
-public interface MountPointStatement extends UnknownStatement<QName>, WithStatus<QName>,
-        ConfigStatementAwareDeclaredStatement<QName> {
+public interface MountPointStatement extends UnknownStatement<MountPointLabel>, WithStatus<MountPointLabel>,
+        ConfigStatementAwareDeclaredStatement<MountPointLabel> {
     @Override
     default StatementDefinition statementDefinition() {
         return SchemaMountStatements.MOUNT_POINT;
     }
+
+    @Override
+    default String rawArgument() {
+        return argument().qname().getLocalName();
+    }
 }
index f84c0e9e80217bf2ab6e6ef32a704668fd7c6727..b970fbf751c00962992f4fbb0c9e9be3bc358ca1 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.rfc8528.parser;
 
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointEffectiveStatement;
+import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaNode;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -16,16 +17,17 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractEffectiveUnknownSchmemaNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 
-final class MountPointEffectiveStatementImpl extends AbstractEffectiveUnknownSchmemaNode<QName, MountPointStatement>
+final class MountPointEffectiveStatementImpl
+        extends AbstractEffectiveUnknownSchmemaNode<MountPointLabel, MountPointStatement>
         implements MountPointEffectiveStatement, MountPointSchemaNode {
-    MountPointEffectiveStatementImpl(final Current<QName, MountPointStatement> stmt,
+    MountPointEffectiveStatementImpl(final Current<MountPointLabel, MountPointStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         super(stmt.declared(), stmt.argument(), stmt.history(), substatements);
     }
 
     @Override
     public QName getQName() {
-        return argument();
+        return argument().qname();
     }
 
     @Override
index 8d623f4c52d830029c8a443311da9d1d3bef40aa..486086db9f98536837ef80baf42d4635343c3c31 100644 (file)
@@ -7,14 +7,32 @@
  */
 package org.opendaylight.yangtools.rfc8528.parser;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement;
+
+final class MountPointStatementImpl extends AbstractDeclaredStatement<MountPointLabel> implements MountPointStatement {
+    private final @NonNull MountPointLabel argument;
+    private final @NonNull Object substatements;
+
+    MountPointStatementImpl(final MountPointLabel argument,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        this.argument = requireNonNull(argument);
+        this.substatements = maskList(substatements);
+    }
+
+    @Override
+    public MountPointLabel argument() {
+        return argument;
+    }
 
-final class MountPointStatementImpl extends WithSubstatements implements MountPointStatement {
-    MountPointStatementImpl(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        super(argument, substatements);
+    @Override
+    public ImmutableList<? extends DeclaredStatement<?>> declaredSubstatements() {
+        return unmaskList(substatements);
     }
 }
\ No newline at end of file
index 14eeec69f65b14d6de26d39f2b6babbc514fb997..b3106e2267a8150923c63b79265dc51a69abc72a 100644 (file)
@@ -9,17 +9,16 @@ package org.opendaylight.yangtools.rfc8528.parser;
 
 import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointEffectiveStatement;
+import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement;
 import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountStatements;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 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.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -29,7 +28,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 public final class MountPointStatementSupport
-        extends AbstractQNameStatementSupport<MountPointStatement, MountPointEffectiveStatement> {
+        extends AbstractStatementSupport<MountPointLabel, MountPointStatement, MountPointEffectiveStatement> {
     private static final SubstatementValidator VALIDATOR =
         SubstatementValidator.builder(SchemaMountStatements.MOUNT_POINT)
             .addOptional(YangStmtMapping.CONFIG)
@@ -53,25 +52,27 @@ public final class MountPointStatementSupport
     //
     // We are not doing exactly that, in that we can end up rebinding the argument through 'augment', I think.
     @Override
-    public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        return StmtContextUtils.parseIdentifier(ctx, value);
+    public MountPointLabel parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        return MountPointLabel.create(StmtContextUtils.parseIdentifier(ctx, value));
     }
 
     @Override
-    public QName adaptArgumentValue(final StmtContext<QName, MountPointStatement, MountPointEffectiveStatement> ctx,
+    public MountPointLabel adaptArgumentValue(
+            final StmtContext<MountPointLabel, MountPointStatement, MountPointEffectiveStatement> ctx,
             final QNameModule targetModule) {
-        return ctx.getArgument().bindTo(targetModule).intern();
+        return MountPointLabel.create(ctx.getArgument().qname().bindTo(targetModule));
     }
 
     @Override
-    public void onStatementAdded(final Mutable<QName, MountPointStatement, MountPointEffectiveStatement> stmt) {
-        final StatementDefinition parentDef = stmt.coerceParentContext().publicDefinition();
+    public void onStatementAdded(
+            final Mutable<MountPointLabel, MountPointStatement, MountPointEffectiveStatement> stmt) {
+        final var parentDef = stmt.coerceParentContext().publicDefinition();
         SourceException.throwIf(YangStmtMapping.CONTAINER != parentDef && YangStmtMapping.LIST != parentDef, stmt,
             "Mount points may only be defined at either a container or a list");
     }
 
     @Override
-    protected MountPointStatement createDeclared(final BoundStmtCtx<QName> ctx,
+    protected MountPointStatement createDeclared(final BoundStmtCtx<MountPointLabel> ctx,
             final ImmutableList<DeclaredStatement<?>> substatements) {
         return new MountPointStatementImpl(ctx.getArgument(), substatements);
     }
@@ -83,7 +84,7 @@ public final class MountPointStatementSupport
     }
 
     @Override
-    protected MountPointEffectiveStatement createEffective(final Current<QName, MountPointStatement> stmt,
+    protected MountPointEffectiveStatement createEffective(final Current<MountPointLabel, MountPointStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return new MountPointEffectiveStatementImpl(stmt, substatements);
     }
index 10f139215538c7436832f026051e5702dd43bdde..cbb8f22da11e476035fc7c88c52b246f7064e2eb 100644 (file)
@@ -7,12 +7,12 @@
  */
 package org.opendaylight.yangtools.rfc8528.parser;
 
+import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel;
 import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
 
-final class RefMountPointStatement extends AbstractRefStatement<QName, MountPointStatement>
+final class RefMountPointStatement extends AbstractRefStatement<MountPointLabel, MountPointStatement>
         implements MountPointStatement {
     RefMountPointStatement(final MountPointStatement delegate, final DeclarationReference ref) {
         super(delegate, ref);