Propagate @Nonnull and @Nullable annotations
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / CaseShorthandImpl.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.parser.stmt.rfc6020.effective;
9
10 import com.google.common.base.Optional;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.ImmutableList;
13 import com.google.common.collect.ImmutableSet;
14 import java.util.Collection;
15 import java.util.List;
16 import java.util.Objects;
17 import java.util.Set;
18 import javax.annotation.Nonnull;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
21 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
22 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
23 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
26 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
28 import org.opendaylight.yangtools.yang.model.api.Status;
29 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
30 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.UsesNode;
32
33 final class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
34
35     private final DataSchemaNode caseShorthandNode;
36     private final ChoiceCaseNode original;
37     private final SchemaPath path;
38     private final boolean augmenting;
39
40     CaseShorthandImpl(final DataSchemaNode caseShorthandNode) {
41         this.caseShorthandNode = Preconditions.checkNotNull(caseShorthandNode);
42         this.path = Preconditions.checkNotNull(caseShorthandNode.getPath().getParent());
43         this.original = getOriginalIfPresent(caseShorthandNode);
44
45         // We need to cache this, as it will be reset
46         this.augmenting = caseShorthandNode.isAugmenting();
47     }
48
49     @Override
50     public boolean isAugmenting() {
51         return augmenting;
52     }
53
54     @Override
55     public boolean isAddedByUses() {
56         return caseShorthandNode.isAddedByUses();
57     }
58
59     @Override
60     public boolean isConfiguration() {
61         return caseShorthandNode.isConfiguration();
62     }
63
64     @Override
65     public ConstraintDefinition getConstraints() {
66         return caseShorthandNode.getConstraints();
67     }
68
69     @Nonnull
70     @Override
71     public QName getQName() {
72         return caseShorthandNode.getQName();
73     }
74
75     @Nonnull
76     @Override
77     public SchemaPath getPath() {
78         return path;
79     }
80
81     @Nonnull
82     @Override
83     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
84         return ImmutableList.of();
85     }
86
87     @Override
88     public String getDescription() {
89         return caseShorthandNode.getDescription();
90     }
91
92     @Override
93     public String getReference() {
94         return caseShorthandNode.getReference();
95     }
96
97     @Nonnull
98     @Override
99     public Status getStatus() {
100         return caseShorthandNode.getStatus();
101     }
102
103     @Override
104     public Set<TypeDefinition<?>> getTypeDefinitions() {
105         return ImmutableSet.of();
106     }
107
108     @Override
109     public Collection<DataSchemaNode> getChildNodes() {
110         return ImmutableList.of(caseShorthandNode);
111     }
112
113     @Override
114     public Set<GroupingDefinition> getGroupings() {
115         return ImmutableSet.of();
116     }
117
118     @Override
119     public DataSchemaNode getDataChildByName(final QName name) {
120         return getQName().equals(name) ? caseShorthandNode : null;
121     }
122
123     @Override
124     public Set<UsesNode> getUses() {
125         return ImmutableSet.of();
126     }
127
128     @Override
129     public Set<AugmentationSchema> getAvailableAugmentations() {
130         return ImmutableSet.of();
131     }
132
133     @Override
134     public Optional<? extends SchemaNode> getOriginal() {
135         return Optional.fromNullable(original);
136     }
137
138     @Override
139     public int hashCode() {
140         final int prime = 31;
141         int result = 1;
142         result = prime * result + Objects.hashCode(getQName());
143         result = prime * result + Objects.hashCode(path);
144         return result;
145     }
146
147     @Override
148     public boolean equals(final Object obj) {
149         if (this == obj) {
150             return true;
151         }
152         if (obj == null) {
153             return false;
154         }
155         if (getClass() != obj.getClass()) {
156             return false;
157         }
158         CaseShorthandImpl other = (CaseShorthandImpl) obj;
159         return Objects.equals(getQName(), other.getQName()) && Objects.equals(path, other.path);
160     }
161
162     @Override
163     public String toString() {
164         return CaseShorthandImpl.class.getSimpleName() + "[" + "qname=" + getQName() + "]";
165     }
166
167     private static ChoiceCaseNode getOriginalIfPresent(final SchemaNode caseShorthandNode) {
168         if (caseShorthandNode instanceof DerivableSchemaNode) {
169             final Optional<? extends SchemaNode> original = ((DerivableSchemaNode) caseShorthandNode).getOriginal();
170             if (original.isPresent()) {
171                 return new CaseShorthandImpl((DataSchemaNode) original.get());
172             }
173         }
174         return null;
175     }
176 }