Fix implementation nullness guarantees
[yangtools.git] / yang / yang-data-util / src / main / java / org / opendaylight / yangtools / yang / data / util / OperationAsContainer.java
1 /*
2  * Copyright (c) 2016 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.data.util;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ForwardingObject;
14 import com.google.common.collect.ImmutableSet;
15 import java.util.ArrayList;
16 import java.util.Collection;
17 import java.util.List;
18 import java.util.Optional;
19 import org.eclipse.jdt.annotation.NonNull;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ContainerLike;
24 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
26 import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
28 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
29 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
30 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
32 import org.opendaylight.yangtools.yang.model.api.Status;
33 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
34 import org.opendaylight.yangtools.yang.model.api.UsesNode;
35 import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
36
37 @Beta
38 public class OperationAsContainer extends ForwardingObject implements ContainerLike, OperationDefinition {
39     private final @NonNull OperationDefinition delegate;
40
41     OperationAsContainer(final OperationDefinition parentNode) {
42         delegate = requireNonNull(parentNode);
43     }
44
45     public static @NonNull OperationAsContainer of(final OperationDefinition delegate) {
46         return new OperationAsContainer(delegate);
47     }
48
49     @Override
50     protected final @NonNull OperationDefinition delegate() {
51         return delegate;
52     }
53
54     @Override
55     public final Optional<String> getDescription() {
56         return delegate.getDescription();
57     }
58
59     @Override
60     public final Optional<String> getReference() {
61         return delegate.getReference();
62     }
63
64     @Override
65     public final Collection<? extends @NonNull TypeDefinition<?>> getTypeDefinitions() {
66         return delegate.getTypeDefinitions();
67     }
68
69     @Override
70     public final Collection<? extends @NonNull GroupingDefinition> getGroupings() {
71         return delegate.getGroupings();
72     }
73
74     @Override
75     public final Status getStatus() {
76         return delegate.getStatus();
77     }
78
79     @Override
80     public final InputSchemaNode getInput() {
81         return delegate.getInput();
82     }
83
84     @Override
85     public final OutputSchemaNode getOutput() {
86         return delegate.getOutput();
87     }
88
89     @Override
90     public final QName getQName() {
91         return delegate.getQName();
92     }
93
94     @Override
95     @Deprecated
96     public final SchemaPath getPath() {
97         return delegate.getPath();
98     }
99
100     @Override
101     public final Optional<DataSchemaNode> findDataChildByName(final QName name) {
102         if (!name.getModule().equals(getQName().getModule())) {
103             return Optional.empty();
104         }
105
106         switch (name.getLocalName()) {
107             case "input":
108                 return Optional.of(delegate.getInput());
109             case "output":
110                 return Optional.of(delegate.getOutput());
111             default:
112                 return Optional.empty();
113         }
114     }
115
116     @Override
117     public Collection<? extends UsesNode> getUses() {
118         return ImmutableSet.of();
119     }
120
121     @Override
122     public final Collection<? extends AugmentationSchemaNode> getAvailableAugmentations() {
123         return ImmutableSet.of();
124     }
125
126     @Override
127     public final Collection<? extends DataSchemaNode> getChildNodes() {
128         final List<DataSchemaNode> ret = new ArrayList<>();
129         final InputSchemaNode input = getInput();
130         if (input != null) {
131             ret.add(input);
132         }
133         final OutputSchemaNode output = getOutput();
134         if (output != null) {
135             ret.add(output);
136         }
137         return ret;
138     }
139
140     @Deprecated
141     @Override
142     public final boolean isAugmenting() {
143         return false;
144     }
145
146     @Deprecated
147     @Override
148     public final boolean isAddedByUses() {
149         return false;
150     }
151
152     @Override
153     public final Optional<Boolean> effectiveConfig() {
154         return Optional.empty();
155     }
156
157     @Override
158     public final Collection<? extends ActionDefinition> getActions() {
159         return ImmutableSet.of();
160     }
161
162     @Override
163     public Optional<ActionDefinition> findAction(final QName qname) {
164         requireNonNull(qname);
165         return Optional.empty();
166     }
167
168     @Override
169     public final Collection<? extends NotificationDefinition> getNotifications() {
170         return ImmutableSet.of();
171     }
172
173     @Override
174     public Optional<NotificationDefinition> findNotification(final QName qname) {
175         requireNonNull(qname);
176         return Optional.empty();
177     }
178
179     @Override
180     public final Collection<? extends @NonNull MustDefinition> getMustConstraints() {
181         return ImmutableSet.of();
182     }
183
184     @Override
185     public final Optional<? extends QualifiedBound> getWhenCondition() {
186         return Optional.empty();
187     }
188 }