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