Add MountPointContext.of(EffectiveModelContext) 01/106001/7
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 16 May 2023 18:34:15 +0000 (20:34 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 16 May 2023 22:46:00 +0000 (00:46 +0200)
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 <robert.varga@pantheon.tech>
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlCodecFactory.java
data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractDynamicMountPointContextFactory.java
data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/AbstractMountPointContextFactory.java
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/EmptyMountPointContext.java [moved from data/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rfc8528/data/util/EmptyMountPointContext.java with 64% similarity]
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/MountPointContext.java
data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/AbstractMountPointChild.java

index 4f3dbab6e64bd5ff24f0f6b5bff829cf780d2568..920b7db8575725fc02db4ef9e2a673487675f735 100644 (file)
@@ -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 final class XmlCodecFactory extends AbstractCodecFactory<XmlCodec<?>> {
      * @return A codec factory instance.
      */
     public static XmlCodecFactory create(final EffectiveModelContext context) {
-        return create(new EmptyMountPointContext(context));
+        return create(MountPointContext.of(context));
     }
 
     @Override
index f65dd1dd83ff5035d1cbf2c31df5a9984019b863..129f91feaa69ea05c04bb7ebd87631837193465b 100644 (file)
@@ -63,7 +63,7 @@ public abstract class AbstractDynamicMountPointContextFactory extends AbstractSi
 
             final EffectiveModelContext schemaContext = bindLibrary(entry.getKey(), libContainer);
             if (schemaMounts == null) {
-                return new EmptyMountPointContext(schemaContext);
+                return MountPointContext.of(schemaContext);
             }
 
             final NormalizedNode mountData;
index 3c10711336156a123b621dd79a1a56d3ad21ef2a..e085c5c6ec3f0d925aee15336ce233945a98e703 100644 (file)
@@ -83,14 +83,16 @@ public abstract class AbstractMountPointContextFactory extends AbstractDynamicMo
             final ContainerNode mountData) {
         checkArgument(SCHEMA_MOUNTS.equals(mountData.getIdentifier()), "Unexpected top-level container %s", mountData);
 
-        final DataContainerChild mountPoint = mountData.childByArg(MOUNT_POINT);
+        final var mountPoint = mountData.childByArg(MOUNT_POINT);
         if (mountPoint == null) {
             LOG.debug("mount-point list not present in {}", mountData);
-            return new EmptyMountPointContext(schemaContext);
+            return MountPointContext.of(schemaContext);
+        }
+        if (!(mountPoint instanceof MapNode mapMountPoint)) {
+            throw new IllegalArgumentException("mount-point list " + mountPoint + " is not a MapNode");
         }
-        checkArgument(mountPoint instanceof MapNode, "mount-point list %s is not a MapNode", mountPoint);
 
-        return new ImmutableMountPointContext(schemaContext, ((MapNode) mountPoint).body().stream().map(entry -> {
+        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();
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 7959c1c50847676569a675d077c2cc2cdfcb6ae1..550e5d372b81fb8447822a5ee43d9d84adf5c4d3 100644 (file)
@@ -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);
     }
 
index 304d8a0f82e85279257f10723bc8d97010f5ceec..b8609f08e1dc682d81816eb5008a26f97a2caf78 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.annotations.Beta;
 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<MountPointContextFactory> 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);
+    }
 }
index e61f7ac547d15c42d44b7e1481ce272ce29323dd..502e83b59f7ed94006afa94d4f72366126e91a7f 100644 (file)
@@ -9,10 +9,9 @@ package org.opendaylight.yangtools.yang.data.impl.schema;
 
 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 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 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();
     }
 }