aaa78c178eb4ab7db5bc2efe9a9fe228e48e14b6
[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.collect.ImmutableList;
12 import com.google.common.collect.Iterables;
13 import java.util.Arrays;
14 import java.util.Collection;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Objects;
18 import java.util.Set;
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 public class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
34
35     private final DataSchemaNode caseShorthandNode;
36     private final QName qName;
37     private final SchemaPath path;
38
39     private final String description;
40     private final String reference;
41     private final Status status;
42
43     private final boolean augmenting;
44     private final boolean addedByUses;
45     ConstraintDefinition constraints;
46     private ChoiceCaseNode original;
47
48     ImmutableList<UnknownSchemaNode> unknownNodes;
49
50     public CaseShorthandImpl(DataSchemaNode caseShorthandNode) {
51         this.caseShorthandNode = caseShorthandNode;
52         this.qName = caseShorthandNode.getQName();
53
54         SchemaPath caseShorthandNodePath = caseShorthandNode.getPath();
55         Iterable<QName> pathFromRoot = caseShorthandNodePath.getPathFromRoot();
56         this.path = SchemaPath
57                 .create(Iterables.limit(pathFromRoot,
58                         Iterables.size(pathFromRoot) - 1),
59                         caseShorthandNodePath.isAbsolute());
60
61         this.description = caseShorthandNode.getDescription();
62         this.reference = caseShorthandNode.getReference();
63         this.status = caseShorthandNode.getStatus();
64
65         this.augmenting = caseShorthandNode.isAugmenting();
66         this.addedByUses = caseShorthandNode.isAddedByUses();
67         this.constraints = caseShorthandNode.getConstraints();
68         this.unknownNodes = ImmutableList.copyOf(caseShorthandNode.getUnknownSchemaNodes());
69     }
70
71     @Override
72     public boolean isAugmenting() {
73         return augmenting;
74     }
75
76     @Override
77     public boolean isAddedByUses() {
78         return addedByUses;
79     }
80
81     @Override
82     public boolean isConfiguration() {
83         return false;
84     }
85
86     @Override
87     public ConstraintDefinition getConstraints() {
88         return constraints;
89     }
90
91     @Override
92     public QName getQName() {
93         return qName;
94     }
95
96     @Override
97     public SchemaPath getPath() {
98         return path;
99     }
100
101     @Override
102     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
103         return unknownNodes;
104     }
105
106     @Override
107     public String getDescription() {
108         return description;
109     }
110
111     @Override
112     public String getReference() {
113         return reference;
114     }
115
116     @Override
117     public Status getStatus() {
118         return status;
119     }
120
121     @Override
122     public Set<TypeDefinition<?>> getTypeDefinitions() {
123         return Collections.emptySet();
124     }
125
126     @Override
127     public Collection<DataSchemaNode> getChildNodes() {
128         return Arrays.asList(caseShorthandNode);
129     }
130
131     @Override
132     public Set<GroupingDefinition> getGroupings() {
133         return Collections.emptySet();
134     }
135
136     @Override
137     public DataSchemaNode getDataChildByName(QName name) {
138         if (qName.equals(name)) {
139             return caseShorthandNode;
140         } else {
141             return null;
142         }
143     }
144
145     @Override
146     public DataSchemaNode getDataChildByName(String name) {
147         if (qName.getLocalName().equals(name)) {
148             return caseShorthandNode;
149         } else {
150             return null;
151         }
152     }
153
154     @Override
155     public Set<UsesNode> getUses() {
156         return Collections.emptySet();
157     }
158
159     @Override
160     public Set<AugmentationSchema> getAvailableAugmentations() {
161         return Collections.emptySet();
162     }
163
164     @Override
165     public Optional<? extends SchemaNode> getOriginal() {
166         return Optional.fromNullable(original);
167     }
168
169     @Override
170     public int hashCode() {
171         final int prime = 31;
172         int result = 1;
173         result = prime * result + Objects.hashCode(qName);
174         result = prime * result + Objects.hashCode(path);
175         return result;
176     }
177
178     @Override
179     public boolean equals(final Object obj) {
180         if (this == obj) {
181             return true;
182         }
183         if (obj == null) {
184             return false;
185         }
186         if (getClass() != obj.getClass()) {
187             return false;
188         }
189         CaseShorthandImpl other = (CaseShorthandImpl) obj;
190         if (qName == null) {
191             if (other.qName != null) {
192                 return false;
193             }
194         } else if (!qName.equals(other.qName)) {
195             return false;
196         }
197         if (path == null) {
198             if (other.path != null) {
199                 return false;
200             }
201         } else if (!path.equals(other.path)) {
202             return false;
203         }
204         return true;
205     }
206
207     @Override
208     public String toString() {
209         StringBuilder sb = new StringBuilder(
210                 CaseShorthandImpl.class.getSimpleName());
211         sb.append("[");
212         sb.append("qname=");
213         sb.append(qName);
214         sb.append("]");
215         return sb.toString();
216     }
217
218 }