Add support for parsing JSON/XML notifications
[yangtools.git] / data / 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.ImmutableSet;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.List;
17 import org.eclipse.jdt.annotation.NonNull;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
22 import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
24 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
26
27 @Beta
28 public class OperationAsContainer extends AbstractAsContainer implements OperationDefinition {
29     private final @NonNull OperationDefinition delegate;
30
31     OperationAsContainer(final OperationDefinition parentNode) {
32         delegate = requireNonNull(parentNode);
33     }
34
35     public static @NonNull OperationAsContainer of(final OperationDefinition delegate) {
36         return new OperationAsContainer(delegate);
37     }
38
39     @Override
40     protected final @NonNull OperationDefinition delegate() {
41         return delegate;
42     }
43
44     @Override
45     public final Collection<? extends @NonNull TypeDefinition<?>> getTypeDefinitions() {
46         return delegate.getTypeDefinitions();
47     }
48
49     @Override
50     public final Collection<? extends @NonNull GroupingDefinition> getGroupings() {
51         return delegate.getGroupings();
52     }
53
54     @Override
55     public final InputSchemaNode getInput() {
56         return delegate.getInput();
57     }
58
59     @Override
60     public final OutputSchemaNode getOutput() {
61         return delegate.getOutput();
62     }
63
64     @Override
65     public final DataSchemaNode dataChildByName(final QName name) {
66         if (!name.getModule().equals(getQName().getModule())) {
67             return null;
68         }
69
70         switch (name.getLocalName()) {
71             case "input":
72                 return delegate.getInput();
73             case "output":
74                 return delegate.getOutput();
75             default:
76                 return null;
77         }
78     }
79
80     @Override
81     public final Collection<? extends AugmentationSchemaNode> getAvailableAugmentations() {
82         return ImmutableSet.of();
83     }
84
85     @Override
86     public final Collection<? extends DataSchemaNode> getChildNodes() {
87         final List<DataSchemaNode> ret = new ArrayList<>();
88         final InputSchemaNode input = getInput();
89         if (input != null) {
90             ret.add(input);
91         }
92         final OutputSchemaNode output = getOutput();
93         if (output != null) {
94             ret.add(output);
95         }
96         return ret;
97     }
98 }