Rework NormalizedNode type hierarchy
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / ImmutableMountPointNormalizedNodeStreamWriter.java
index 7a5321bbc4375e36e3b922b386f87464ea732f34..38bc4121633ade1b84235dfdc098f477a82ec166 100644 (file)
@@ -9,17 +9,14 @@ package org.opendaylight.yangtools.yang.data.impl.schema;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import java.io.IOException;
-import java.util.Optional;
-import org.opendaylight.yangtools.concepts.ObjectExtensions;
-import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
+import org.opendaylight.yangtools.rcf8528.data.util.ImmutableMountPointNode;
+import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
 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.MountPointStreamWriter;
+import org.opendaylight.yangtools.rfc8528.data.api.StreamWriterMountPointExtension;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
 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;
@@ -27,27 +24,19 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 // FIXME: document usage of this
 @Beta
 public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends ImmutableNormalizedNodeStreamWriter
-        implements MountPointStreamWriter {
-    private static final Factory<ImmutableMountPointNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
-        EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMountPointNormalizedNodeStreamWriter.class,
-            AnydataExtension.class, MountPointStreamWriter.class);
-
+        implements StreamWriterMountPointExtension {
     protected ImmutableMountPointNormalizedNodeStreamWriter(final NormalizedNodeResult result) {
         super(result);
     }
 
     @Override
     public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
-        return EXTENSIONS_FACTORY.newInstance(this);
+        return ImmutableClassToInstanceMap.of(StreamWriterMountPointExtension.class, this);
     }
 
     @Override
-    public final Optional<MountPointNodeFactoryResolver> findMountPoint(final MountPointIdentifier label) {
-        return findResolver(label).map(factory -> factory);
-    }
-
-    @Override
-    public final NormalizedNodeStreamWriter startMountPoint(final MountPointNodeFactory factory) {
+    public final NormalizedNodeStreamWriter startMountPoint(final MountPointIdentifier mountId,
+            final MountPointContext mountCtx) {
         final NormalizedNodeResult mountResult = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter mountDelegate = ImmutableNormalizedNodeStreamWriter.from(mountResult);
 
@@ -61,16 +50,13 @@ public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends Immu
             public void close() throws IOException {
                 super.close();
 
-                final NormalizedNode<?, ?> data = mountResult.getResult();
+                final NormalizedNode data = mountResult.getResult();
                 if (!(data instanceof ContainerNode)) {
                     throw new IOException("Unhandled mount data " + data);
                 }
 
-                writeChild(factory.createMountPoint((ContainerNode) data));
+                writeChild(ImmutableMountPointNode.of(mountId, mountCtx, (ContainerNode) data));
             }
         };
     }
-
-    // XXX: this resolver must end up returning MountPointNodeFactory
-    protected abstract Optional<MountPointNodeFactoryResolver> findResolver(MountPointIdentifier label);
 }