From 1176315aae67a753a42672316faa35f0173a8268 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 16 May 2023 18:41:09 +0200 Subject: [PATCH] StreamWriterMountPointExtension operates on MountPointLabel Disconnect stream support from MountPointIdentifier, so that we can move it and evolve it. JIRA: YANGTOOLS-1172 Change-Id: I7f6a190575bf4477795c1cc079091d644f966310 Signed-off-by: Robert Varga --- .../codec/gson/JSONNormalizedNodeStreamWriter.java | 6 +++--- .../yang/data/codec/xml/XmlParserStream.java | 12 ++++++------ .../data/util/MountPointNormalizedNodeWriter.java | 4 ++-- .../stream}/StreamWriterMountPointExtension.java | 10 ++++------ ...mmutableMountPointNormalizedNodeStreamWriter.java | 7 ++++--- .../data/util/AbstractMountPointDataWithSchema.java | 9 ++++----- .../yangtools/yang/data/util/MountPointData.java | 10 +++++----- 7 files changed, 28 insertions(+), 30 deletions(-) rename data/{rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api => yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream}/StreamWriterMountPointExtension.java (77%) diff --git a/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java b/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java index d8d2b51d59..d17a9b345c 100644 --- a/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java +++ b/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONNormalizedNodeStreamWriter.java @@ -20,8 +20,7 @@ import java.util.regex.Pattern; import javax.xml.transform.dom.DOMSource; import org.checkerframework.checker.regex.qual.Regex; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; -import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -31,6 +30,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedAnydata; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension; +import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMountPointExtension; import org.opendaylight.yangtools.yang.data.util.NormalizedNodeStreamWriterStack; import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode; import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; @@ -407,7 +407,7 @@ public abstract class JSONNormalizedNodeStreamWriter implements NormalizedNodeSt } @Override - public final NormalizedNodeStreamWriter startMountPoint(final MountPointIdentifier mountId, + public final NormalizedNodeStreamWriter startMountPoint(final MountPointLabel label, final MountPointContext mountCtx) throws IOException { final EffectiveModelContext ctx = mountCtx.getEffectiveModelContext(); return new Nested(codecs.rebaseTo(ctx), NormalizedNodeStreamWriterStack.of(ctx), writer, diff --git a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java index 252ab32a72..74abbdc3dd 100644 --- a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java +++ b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java @@ -42,8 +42,8 @@ import javax.xml.transform.dom.DOMResult; 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.MountPointIdentifier; 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,19 +578,19 @@ public final class XmlParserStream implements Closeable, Flushable { } if (optMount.isPresent()) { - final var mountId = MountPointIdentifier.of(optMount.orElseThrow().getQName()); + final var label = new MountPointLabel(optMount.orElseThrow().getQName()); LOG.debug("Assuming node {} and namespace {} belongs to mount point {}", xmlElementName, - nsUri, mountId); + nsUri, label); - final var optFactory = codecs.mountPointContext().findMountPoint(mountId.getLabel()); + final var optFactory = codecs.mountPointContext().findMountPoint(label); if (optFactory.isPresent()) { - final var mountData = mountParent.getMountPointData(mountId, optFactory.orElseThrow()); + final var mountData = mountParent.getMountPointData(label, optFactory.orElseThrow()); addMountPointChild(mountData, nsUri, xmlElementName, new DOMSource(readAnyXmlValue(in).getDocumentElement())); continue; } - LOG.debug("Mount point {} not attached", mountId); + LOG.debug("Mount point {} not attached", label); } } diff --git a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/MountPointNormalizedNodeWriter.java b/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/MountPointNormalizedNodeWriter.java index 3f3e544d65..24814d10c9 100644 --- a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/MountPointNormalizedNodeWriter.java +++ b/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/MountPointNormalizedNodeWriter.java @@ -15,11 +15,11 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8528.data.api.MountPointNode; -import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMountPointExtension; /** * A {@link MountPointNode}-aware counterpart to {@link NormalizedNodeWriter}. Based on the backing writer's capability @@ -49,7 +49,7 @@ public abstract class MountPointNormalizedNodeWriter extends NormalizedNodeWrite @Override void writeMountPoint(final MountPointNode node) throws IOException { try (MountPointNormalizedNodeWriter writer = forStreamWriter(mountWriter.startMountPoint( - node.getIdentifier(), node.getMountPointContext()))) { + node.getIdentifier().getLabel(), node.getMountPointContext()))) { for (DataContainerChild child : node.body()) { writer.write(child); } diff --git a/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/StreamWriterMountPointExtension.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/StreamWriterMountPointExtension.java similarity index 77% rename from data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/StreamWriterMountPointExtension.java rename to data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/StreamWriterMountPointExtension.java index c6712b2ff0..1e7cd03932 100644 --- a/data/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/StreamWriterMountPointExtension.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/stream/StreamWriterMountPointExtension.java @@ -5,14 +5,13 @@ * 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.rfc8528.data.api; +package org.opendaylight.yangtools.yang.data.api.schema.stream; import com.google.common.annotations.Beta; import java.io.IOException; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension; /** * A {@link NormalizedNodeStreamWriterExtension} exposed by stream writers which can handle mount point data, notably @@ -28,11 +27,10 @@ public interface StreamWriterMountPointExtension extends NormalizedNodeStreamWri * returned writer will be {@link NormalizedNodeStreamWriter#close()}d, at which point the parent writer will be * used again to emit the rest of the tree. * - * @param mountId Mount point identifier + * @param label Mount point label * @param mountCtx Mount point context * @return A new NormalizedNodeStreamWriter * @throws IOException if an error occurs */ - NormalizedNodeStreamWriter startMountPoint(MountPointIdentifier mountId, MountPointContext mountCtx) - throws IOException; + NormalizedNodeStreamWriter startMountPoint(MountPointLabel label, MountPointContext mountCtx) throws IOException; } diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java index 53f90ed917..214347ddf2 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/ImmutableMountPointNormalizedNodeStreamWriter.java @@ -12,13 +12,14 @@ import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; import java.io.IOException; import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; -import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension; import org.opendaylight.yangtools.rfc8528.data.util.ImmutableMountPointNode; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension; +import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMountPointExtension; // FIXME: document usage of this @Beta @@ -34,7 +35,7 @@ public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends Immu } @Override - public final NormalizedNodeStreamWriter startMountPoint(final MountPointIdentifier mountId, + public final NormalizedNodeStreamWriter startMountPoint(final MountPointLabel label, final MountPointContext mountCtx) { final NormalizedNodeResult mountResult = new NormalizedNodeResult(); final NormalizedNodeStreamWriter mountDelegate = ImmutableNormalizedNodeStreamWriter.from(mountResult); @@ -54,7 +55,7 @@ public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends Immu throw new IOException("Unhandled mount data " + data); } - writeChild(ImmutableMountPointNode.of(mountId, mountCtx, container)); + writeChild(ImmutableMountPointNode.of(new MountPointIdentifier(label), mountCtx, container)); } }; } diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractMountPointDataWithSchema.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractMountPointDataWithSchema.java index 213ccb27d3..6b59c0d2c0 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractMountPointDataWithSchema.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractMountPointDataWithSchema.java @@ -11,7 +11,7 @@ import static com.google.common.base.Preconditions.checkState; import com.google.common.annotations.Beta; import java.io.IOException; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMetadataExtension; @@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; /** * A {@link CompositeNodeDataWithSchema} which can hold mount-point data. This data is manipulated through - * {@link #getMountPointData(MountPointIdentifier, MountPointContextFactory)}. + * {@link #getMountPointData(MountPointLabel, MountPointContextFactory)}. */ @Beta public abstract class AbstractMountPointDataWithSchema @@ -39,10 +39,9 @@ public abstract class AbstractMountPointDataWithSchema } } - public final MountPointData getMountPointData(final MountPointIdentifier label, - final MountPointContextFactory factory) { + public final MountPointData getMountPointData(final MountPointLabel label, final MountPointContextFactory factory) { if (mountedData != null) { - final MountPointIdentifier existing = mountedData.getIdentifier(); + final var existing = mountedData.getIdentifier(); checkState(label.equals(existing), "Mismatched mount label {}, already have {}", label, existing); } else { mountedData = new MountPointData(label, factory); diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java index a77c0ee2e4..8885d7637b 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java @@ -18,14 +18,14 @@ import java.util.List; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable; -import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier; -import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; import org.opendaylight.yangtools.yang.data.api.schema.MountPointChild; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContextFactory.ContainerName; import org.opendaylight.yangtools.yang.data.api.schema.MountPointException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.StreamWriterMountPointExtension; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory; * YANG Schema Mount-supported data attached to either a {@code list} item or a {@code container}. */ @Beta -public final class MountPointData extends AbstractSimpleIdentifiable { +public final class MountPointData extends AbstractSimpleIdentifiable { private static final Logger LOG = LoggerFactory.getLogger(MountPointData.class); private final Map yangLib = new EnumMap<>(ContainerName.class); @@ -42,8 +42,8 @@ public final class MountPointData extends AbstractSimpleIdentifiable