2 * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.impl.schema;
10 import com.google.common.annotations.Beta;
11 import com.google.common.collect.ClassToInstanceMap;
12 import java.io.IOException;
13 import java.util.Optional;
14 import org.opendaylight.yangtools.concepts.ObjectExtensions;
15 import org.opendaylight.yangtools.concepts.ObjectExtensions.Factory;
16 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
17 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactory;
18 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNodeFactoryResolver;
19 import org.opendaylight.yangtools.rfc8528.data.api.MountPointStreamWriter;
20 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
21 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
22 import org.opendaylight.yangtools.yang.data.api.schema.stream.AnydataExtension;
23 import org.opendaylight.yangtools.yang.data.api.schema.stream.ForwardingNormalizedNodeStreamWriter;
24 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
25 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriterExtension;
27 // FIXME: document usage of this
29 public abstract class ImmutableMountPointNormalizedNodeStreamWriter extends ImmutableNormalizedNodeStreamWriter
30 implements MountPointStreamWriter {
31 private static final Factory<ImmutableMountPointNormalizedNodeStreamWriter, ?, NormalizedNodeStreamWriterExtension>
32 EXTENSIONS_FACTORY = ObjectExtensions.factory(ImmutableMountPointNormalizedNodeStreamWriter.class,
33 AnydataExtension.class, MountPointStreamWriter.class);
35 protected ImmutableMountPointNormalizedNodeStreamWriter(final NormalizedNodeResult result) {
40 public final ClassToInstanceMap<NormalizedNodeStreamWriterExtension> getExtensions() {
41 return EXTENSIONS_FACTORY.newInstance(this);
45 public final Optional<MountPointNodeFactoryResolver> findMountPoint(final MountPointIdentifier label) {
46 return findResolver(label).map(factory -> factory);
50 public final NormalizedNodeStreamWriter startMountPoint(final MountPointNodeFactory factory) {
51 final NormalizedNodeResult mountResult = new NormalizedNodeResult();
52 final NormalizedNodeStreamWriter mountDelegate = ImmutableNormalizedNodeStreamWriter.from(mountResult);
54 return new ForwardingNormalizedNodeStreamWriter() {
56 protected NormalizedNodeStreamWriter delegate() {
61 public void close() throws IOException {
64 final NormalizedNode<?, ?> data = mountResult.getResult();
65 if (!(data instanceof ContainerNode)) {
66 throw new IOException("Unhandled mount data " + data);
69 writeChild(factory.createMountPoint((ContainerNode) data));
74 // XXX: this resolver must end up returning MountPointNodeFactory
75 protected abstract Optional<MountPointNodeFactoryResolver> findResolver(MountPointIdentifier label);