Deprecate DerivableSchemaNode
[yangtools.git] / model / yang-model-ri / src / main / java / org / opendaylight / yangtools / yang / model / ri / stmt / impl / eff / ContainerEffectiveStatementImpl.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.collect.ImmutableList;
13 import java.util.Optional;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.eclipse.jdt.annotation.Nullable;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.compat.ActionNodeContainerCompat;
23 import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
24 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultWithDataTree.WithTypedefNamespace;
25 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.ActionNodeContainerMixin;
26 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.AugmentationTargetMixin;
27 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DataNodeContainerMixin;
28 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DataSchemaNodeMixin;
29 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.MustConstraintMixin;
30 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.NotificationNodeContainerMixin;
31 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.PresenceMixin;
32
33 public final class ContainerEffectiveStatementImpl
34         extends WithTypedefNamespace<QName, ContainerStatement, ContainerEffectiveStatement>
35         implements ContainerEffectiveStatement, ContainerSchemaNode, DataSchemaNodeMixin<ContainerStatement>,
36             DataNodeContainerMixin<QName, ContainerStatement>, ActionNodeContainerMixin<QName, ContainerStatement>,
37             ActionNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
38             NotificationNodeContainerMixin<QName, ContainerStatement>,
39             NotificationNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
40             MustConstraintMixin<QName, ContainerStatement>, PresenceMixin<QName, ContainerStatement>,
41             AugmentationTargetMixin<QName, ContainerStatement> {
42
43     private final int flags;
44     private final @NonNull QName argument;
45     private final @Nullable ContainerSchemaNode original;
46
47     public ContainerEffectiveStatementImpl(final ContainerStatement declared,
48             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final QName argument,
49             final int flags, final @Nullable ContainerSchemaNode original) {
50         super(declared, substatements);
51         this.argument = requireNonNull(argument);
52         this.original = original;
53         this.flags = flags;
54     }
55
56     public ContainerEffectiveStatementImpl(final ContainerEffectiveStatementImpl origEffective, final QName argument,
57             final int flags, final @Nullable ContainerSchemaNode original) {
58         super(origEffective);
59         this.argument = requireNonNull(argument);
60         this.original = original;
61         this.flags = flags;
62     }
63
64     @Override
65     public int flags() {
66         return flags;
67     }
68
69     @Override
70     public QName argument() {
71         return argument;
72     }
73
74     @Override
75     @Deprecated(since = "7.0.9", forRemoval = true)
76     public Optional<ContainerSchemaNode> getOriginal() {
77         return Optional.ofNullable(original);
78     }
79
80     @Override
81     public boolean isPresenceContainer() {
82         return presence();
83     }
84
85     @Override
86     public DataSchemaNode dataChildByName(final QName name) {
87         return dataSchemaNode(name);
88     }
89
90     @Override
91     public ContainerEffectiveStatement asEffectiveStatement() {
92         return this;
93     }
94
95     @Override
96     public String toString() {
97         return "container " + argument.getLocalName();
98     }
99 }