From 93e320e81b03ea15789fa8814a9dbba5754d3b96 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 16 May 2023 20:34:15 +0200 Subject: [PATCH] Add MountPointContext.of(EffectiveModelContext) Rather than having a dedicated public class for the common case, introduce a static of() method, which hides the implementation. JIRA: YANGTOOLS-1172 Change-Id: Ib82d078c599f09f31de650aae0c096044c70847c Signed-off-by: Robert Varga --- .../yang/data/codec/xml/XmlCodecFactory.java | 4 +--- .../util/AbstractDynamicMountPointContextFactory.java | 2 +- .../data/util/AbstractMountPointContextFactory.java | 10 ++++++---- .../yang/data/api/schema}/EmptyMountPointContext.java | 10 +++------- .../yang/data/api/schema/MountPointContext.java | 11 +++++++++++ .../data/impl/schema/AbstractMountPointChild.java | 9 ++++----- 6 files changed, 26 insertions(+), 20 deletions(-) rename data/{rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util => yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema}/EmptyMountPointContext.java (64%) diff --git a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlCodecFactory.java b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlCodecFactory.java index 4f3dbab6e64..920b7db8575 100644 --- a/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlCodecFactory.java +++ b/codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlCodecFactory.java @@ -5,14 +5,12 @@ * 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.data.codec.xml; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import java.util.List; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext; @@ -79,7 +77,7 @@ public static XmlCodecFactory create(final MountPointContext context) { * @return A codec factory instance. */ public static XmlCodecFactory create(final EffectiveModelContext context) { - return create(new EmptyMountPointContext(context)); + return create(MountPointContext.of(context)); } @Override diff --git a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractDynamicMountPointContextFactory.java b/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractDynamicMountPointContextFactory.java index f65dd1dd83f..129f91feaa6 100644 --- a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractDynamicMountPointContextFactory.java +++ b/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractDynamicMountPointContextFactory.java @@ -63,7 +63,7 @@ public final MountPointContext createContext(final Map { + return new ImmutableMountPointContext(schemaContext, mapMountPoint.body().stream().map(entry -> { final String moduleName = entry.findChildByArg(MODULE).map(mod -> { checkArgument(mod instanceof LeafNode, "Unexpected module leaf %s", mod); final Object value = mod.body(); diff --git a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/EmptyMountPointContext.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/EmptyMountPointContext.java similarity index 64% rename from data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/EmptyMountPointContext.java rename to data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/EmptyMountPointContext.java index 7959c1c5084..550e5d372b8 100644 --- a/data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/EmptyMountPointContext.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/EmptyMountPointContext.java @@ -5,22 +5,18 @@ * 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.util; +package org.opendaylight.yangtools.yang.data.api.schema; -import com.google.common.annotations.Beta; import java.util.Optional; 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.MountPointContextFactory; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.spi.AbstractEffectiveModelContextProvider; /** * A simple {@link MountPointContext} which does not contain any mount points. */ -@Beta -public final class EmptyMountPointContext extends AbstractEffectiveModelContextProvider implements MountPointContext { - public EmptyMountPointContext(final EffectiveModelContext modelContext) { +final class EmptyMountPointContext extends AbstractEffectiveModelContextProvider implements MountPointContext { + EmptyMountPointContext(final EffectiveModelContext modelContext) { super(modelContext); } diff --git a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MountPointContext.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MountPointContext.java index 304d8a0f82e..b8609f08e1d 100644 --- a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MountPointContext.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MountPointContext.java @@ -11,6 +11,7 @@ import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8528.model.api.MountPointLabel; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider; /** @@ -65,4 +66,14 @@ public interface MountPointContext extends EffectiveModelContextProvider { * @throws NullPointerException if label is null */ Optional findMountPoint(@NonNull MountPointLabel label); + + /** + * Return an empty {@link MountPointContext} with the specified {@link EffectiveModelContext}. + * + * @param modelContext Backing {@link EffectiveModelContext} + * @return A {@link MountPointContext} containing no {@link MountPointContextFactory}. + */ + static @NonNull MountPointContext of(final @NonNull EffectiveModelContext modelContext) { + return new EmptyMountPointContext(modelContext); + } } diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java index e61f7ac547d..502e83b59f7 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java @@ -9,10 +9,9 @@ import com.google.common.annotations.Beta; import java.io.IOException; -import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; 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.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; /** @@ -22,9 +21,9 @@ public abstract class AbstractMountPointChild implements MountPointChild { @Override public final NormalizedNode normalizeTo(final EffectiveModelContext schemaContext) throws IOException { - final NormalizedNodeResult result = new NormalizedNodeResult(); - final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - writeTo(streamWriter, new EmptyMountPointContext(schemaContext)); + final var result = new NormalizedNodeResult(); + final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + writeTo(streamWriter, MountPointContext.of(schemaContext)); return result.getResult(); } }