Eliminate MountPointSchemaResolver 52/83052/5
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 15 Jul 2019 20:12:32 +0000 (22:12 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 16 Jul 2019 10:51:59 +0000 (12:51 +0200)
MountPointSchemaResolver really deals with mount point data
instantiation. This means is really needs to live at the data-api
layer instead of model-api layer -- but it turns out we have a
mirror in MountPointNodeFactory, hence we just converge on that
interface instead.

JIRA: YANGTOOLS-1007
Change-Id: I69f1d2c11239f48d22a0d2d184604e5518e50354
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNodeFactory.java
yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointNodeFactoryResolver.java
yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointSchema.java [moved from yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointSchema.java with 76% similarity]
yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointStreamWriter.java
yang/rfc8528-data-util/src/main/java/org/opendaylight/yangtools/rcf8528/data/util/ImmutableMountPointNodeFactory.java
yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointSchemaResolver.java [deleted file]
yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/StaticMountPointSchemaResolver.java [deleted file]
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/MountPointData.java

index c13eaf1d1b845cedc77476f314a3857dd6bea01e..b97cbf6585b447d35bf45a68dd786fb060685fb4 100644 (file)
@@ -9,12 +9,12 @@ package org.opendaylight.yangtools.rfc8528.data.api;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchema;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 
 @Beta
 @NonNullByDefault
 public interface MountPointNodeFactory extends MountPointSchema {
 
+
     MountPointNode createMountPoint(ContainerNode delegate);
 }
index 4f89197d2cd358e1f0f29d1041bc49032f774486..5801c2eae57f127031038b3c8ef446b124d27fb1 100644 (file)
@@ -11,15 +11,17 @@ import com.google.common.annotations.Beta;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaResolver;
-import org.opendaylight.yangtools.rfc8528.model.api.StaticMountPointSchemaResolver;
 import org.opendaylight.yangtools.rfc8528.model.api.YangLibraryConstants.ContainerName;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
 
+/**
+ * An entity able to resolve the SchemaContext for embedded mount points. This interface should not be implemented
+ * directly, but rather its domain specializations, like {@link Inline} and {@link SharedSchema} should be provided.
+ */
 @Beta
-public interface MountPointNodeFactoryResolver extends MountPointSchemaResolver {
+public interface MountPointNodeFactoryResolver {
     /**
      * A resolver which can resolve the SchemaContext for use with mount point data based on the
      * {@code ietf-yang-library} content of the mountpoint itself. This process requires two steps:
@@ -66,10 +68,14 @@ public interface MountPointNodeFactoryResolver extends MountPointSchemaResolver
         Optional<LibraryContext> findSchemaForLibrary(@NonNull ContainerName containerName);
     }
 
+    /**
+     * A resolver which has static knowledge of the SchemaContext which should be used to interpret mount point data.
+     * Instances of this interface should be used in contexts where the mount point data is expected not to contain
+     * required {@code ietf-yang-library} data, for example due to filtering.
+     */
     @NonNullByDefault
-    interface SharedSchema extends MountPointNodeFactoryResolver, StaticMountPointSchemaResolver {
+    interface SharedSchema extends MountPointNodeFactoryResolver {
 
-        @Override
         MountPointNodeFactory getSchema();
     }
 }
similarity index 76%
rename from yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointSchema.java
rename to yang/rfc8528-data-api/src/main/java/org/opendaylight/yangtools/rfc8528/data/api/MountPointSchema.java
index 0aa8f2b6964af3aadcc1ec38ff46b6b3ec755867..85466eafd0f34b6a71a4b646de091aaebdf9c2f6 100644 (file)
@@ -5,15 +5,16 @@
  * 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.model.api;
+package org.opendaylight.yangtools.rfc8528.data.api;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Identifiable;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
 
 @Beta
-public interface MountPointSchema extends SchemaContextProvider {
+public interface MountPointSchema extends SchemaContextProvider, Identifiable<MountPointIdentifier> {
     @Override
     // FIXME: remove this override when SchemaContextProvider's method has sane semantics.
     @NonNull SchemaContext getSchemaContext();
index beea0d9ef90ce67c9fae547a4a0156b1e9f12e76..7592ab1754bbe89a31bdb6751b55de7bcde77159 100644 (file)
@@ -11,8 +11,6 @@ import com.google.common.annotations.Beta;
 import java.io.IOException;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchema;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaResolver;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
 
@@ -24,21 +22,21 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 @Beta
 public interface MountPointStreamWriter extends NormalizedNodeStreamWriterExtension {
     /**
-     * Attempt to acquire a {@link MountPointSchemaResolver} to resolve schemas for the purposes of interpreting this
-     * mount point. An empty result indicates the mount point is not attached.
+     * Attempt to acquire a {@link MountPointNodeFactoryResolver} to resolve schemas for the purposes of interpreting
+     * this mount point. An empty result indicates the mount point is not attached.
      *
      * @param label Mount point label, as defined via the use of {@code mount-point} statement
      * @return An optional handler for mount point data
      * @throws NullPointerException if label is null
      */
-    Optional<MountPointSchemaResolver> findMountPoint(@NonNull MountPointIdentifier label);
+    Optional<MountPointNodeFactoryResolver> findMountPoint(@NonNull MountPointIdentifier label);
 
     /**
      * Start a new mount point with a specific root context.
      *
-     * @param mountSchema Mount point schema
+     * @param factory Mount point schema
      * @return A new NormalizedNodeStreamWriter
      * @throws IOException if an error occurs
      */
-    @NonNull NormalizedNodeStreamWriter startMountPoint(@NonNull MountPointSchema mountSchema) throws IOException;
+    @NonNull NormalizedNodeStreamWriter startMountPoint(@NonNull MountPointNodeFactory factory) throws IOException;
 }
index c06d5916c3950a94c92ca8d368ca2e91f2c73abe..e4af45a3bf2ddfedda56cd05c1f0b421745b6dd0 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.concepts.AbstractIdentifiable;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNode;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactory;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchema;
+import org.opendaylight.yangtools.rfc8528.data.api.MountPointSchema;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
diff --git a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointSchemaResolver.java b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/MountPointSchemaResolver.java
deleted file mode 100644 (file)
index 4c7a0dd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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.model.api;
-
-import com.google.common.annotations.Beta;
-import org.eclipse.jdt.annotation.NonNullByDefault;
-
-/**
- * An entity able to resolve the SchemaContext for embedded mount points. This interface should not be implemented
- * directly, but rather its domain specializations, like {@link StaticMountPointSchemaResolver} should be provided.
- */
-@Beta
-@NonNullByDefault
-public interface MountPointSchemaResolver {
-
-}
diff --git a/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/StaticMountPointSchemaResolver.java b/yang/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/StaticMountPointSchemaResolver.java
deleted file mode 100644 (file)
index 23d24c6..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2019 PANTHEON.tech s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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.model.api;
-
-import com.google.common.annotations.Beta;
-import org.eclipse.jdt.annotation.NonNullByDefault;
-
-/**
- * A resolver which has static knowledge of the SchemaContext which should be used to interpret mount point data.
- * Instances of this interface should be used in contexts where the mount point data is expected not to contain
- * required {@code ietf-yang-library} data, for example due to filtering.
- */
-@Beta
-@NonNullByDefault
-public interface StaticMountPointSchemaResolver extends MountPointSchemaResolver {
-
-    MountPointSchema getSchema();
-}
index c41f2fd9c3d710e2488df4b4e682b80a274048dd..66e88a66ca7a77ada44b5430735ae981244c8fa0 100644 (file)
@@ -21,12 +21,12 @@ import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.AbstractIdentifiable;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
+import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactory;
+import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactoryResolver;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactoryResolver.Inline;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactoryResolver.Inline.LibraryContext;
+import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactoryResolver.SharedSchema;
 import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchema;
-import org.opendaylight.yangtools.rfc8528.model.api.MountPointSchemaResolver;
-import org.opendaylight.yangtools.rfc8528.model.api.StaticMountPointSchemaResolver;
 import org.opendaylight.yangtools.rfc8528.model.api.YangLibraryConstants.ContainerName;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -67,15 +67,15 @@ public final class MountPointData extends AbstractIdentifiable<MountPointIdentif
             return;
         }
 
-        final Optional<MountPointSchemaResolver> optResolver = mountWriter.findMountPoint(getIdentifier());
+        final Optional<MountPointNodeFactoryResolver> optResolver = mountWriter.findMountPoint(getIdentifier());
         if (!optResolver.isPresent()) {
             LOG.debug("Mount point for {} is not present, ignoring it", getIdentifier());
             return;
         }
 
-        final MountPointSchemaResolver resolver = optResolver.get();
-        if (resolver instanceof StaticMountPointSchemaResolver) {
-            writeTo(mountWriter, ((StaticMountPointSchemaResolver) resolver).getSchema());
+        final MountPointNodeFactoryResolver resolver = optResolver.get();
+        if (resolver instanceof SharedSchema) {
+            writeTo(mountWriter, ((SharedSchema) resolver).getSchema());
         } else if (resolver instanceof Inline) {
             writeInline(mountWriter, (Inline) resolver);
         } else {
@@ -99,14 +99,14 @@ public final class MountPointData extends AbstractIdentifiable<MountPointIdentif
                 throw new IOException("Invalid non-container " + data);
             }
 
-            final MountPointSchema mountMeta;
+            final MountPointNodeFactory factory;
             try {
-                mountMeta = libContext.bindTo((ContainerNode) data);
+                factory = libContext.bindTo((ContainerNode) data);
             } catch (YangParserException e) {
                 throw new IOException("Failed to assemble context for " + data, e);
             }
 
-            writeTo(mountWriter, mountMeta);
+            writeTo(mountWriter, factory);
             return;
         }
 
@@ -114,7 +114,7 @@ public final class MountPointData extends AbstractIdentifiable<MountPointIdentif
     }
 
     private void writeTo(final @NonNull MountPointStreamWriter mountWriter,
-            final @NonNull MountPointSchema mountMeta) throws IOException {
+            final @NonNull MountPointNodeFactory mountMeta) throws IOException {
         try (NormalizedNodeStreamWriter writer = mountWriter.startMountPoint(mountMeta)) {
             for (MountPointChild child : children) {
                 child.writeTo(writer, mountMeta.getSchemaContext());