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.rcf8528.data.util;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.base.MoreObjects.ToStringHelper;
14 import java.util.Collection;
15 import java.util.Optional;
16 import org.eclipse.jdt.annotation.NonNull;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.opendaylight.yangtools.concepts.Immutable;
19 import org.opendaylight.yangtools.rfc8528.data.api.InlineMountPointNode;
20 import org.opendaylight.yangtools.rfc8528.data.api.MountPointIdentifier;
21 import org.opendaylight.yangtools.rfc8528.data.api.MountPointNode;
22 import org.opendaylight.yangtools.rfc8528.data.api.SharedSchemaMountPointNode;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
24 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
26 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
27 import org.opendaylight.yangtools.yang.model.util.AbstractIdentifiableSchemaContextProvider;
30 public abstract class ImmutableMountPointNode<M extends MountPointNode, T extends ImmutableMountPointNode<M, T>>
31 extends AbstractIdentifiableSchemaContextProvider<MountPointIdentifier> implements MountPointNode, Immutable {
33 private static final class Inline extends ImmutableMountPointNode<InlineMountPointNode, Inline>
34 implements InlineMountPointNode {
36 Inline(final MountPointIdentifier identifier, final SchemaContext schemaContext, final ContainerNode delegate) {
37 super(identifier, schemaContext, delegate);
42 private static final class SharedSchema extends ImmutableMountPointNode<SharedSchemaMountPointNode, SharedSchema>
43 implements SharedSchemaMountPointNode {
45 SharedSchema(final MountPointIdentifier identifier, final SchemaContext schemaContext,
46 final ContainerNode delegate) {
47 super(identifier, schemaContext, delegate);
51 private final @NonNull ContainerNode delegate;
53 ImmutableMountPointNode(final @NonNull MountPointIdentifier identifier,
54 final @NonNull SchemaContext schemaContext, final @NonNull ContainerNode delegate) {
55 super(schemaContext, identifier);
56 this.delegate = requireNonNull(delegate);
59 public static @NonNull InlineMountPointNode inlineOf(final @NonNull MountPointIdentifier identifier,
60 final @NonNull SchemaContext schemaContext, final @NonNull ContainerNode delegate) {
61 return new Inline(identifier, schemaContext, delegate);
64 public static @NonNull SharedSchemaMountPointNode sharedSchemaOf(final @NonNull MountPointIdentifier identifier,
65 final @NonNull SchemaContext schemaContext, final @NonNull ContainerNode delegate) {
66 return new SharedSchema(identifier, schemaContext, delegate);
70 public final Collection<DataContainerChild<? extends PathArgument, ?>> getValue() {
71 return delegate.getValue();
75 public final Optional<DataContainerChild<? extends PathArgument, ?>> getChild(final PathArgument child) {
76 return delegate.getChild(child);
80 protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
81 return super.addToStringAttributes(helper).add("delegate", delegate);