Merge "Bug 2561: Parser incorrectly allows usage of union in list"
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ChoiceNodeImpl.java
1 package org.opendaylight.yangtools.yang.parser.builder.impl;
2
3 import com.google.common.base.Optional;
4 import com.google.common.collect.ImmutableList;
5 import com.google.common.collect.ImmutableSet;
6 import java.util.List;
7 import java.util.Set;
8 import org.opendaylight.yangtools.yang.common.QName;
9 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
10 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
11 import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
12 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
13 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
14 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
15 import org.opendaylight.yangtools.yang.model.api.Status;
16 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
17
18 final class ChoiceNodeImpl implements ChoiceNode, DerivableSchemaNode {
19     private final QName qname;
20     private final SchemaPath path;
21     String description;
22     String reference;
23     Status status;
24     boolean augmenting;
25     boolean addedByUses;
26     ChoiceNode original;
27     boolean configuration;
28     ConstraintDefinition constraints;
29     ImmutableSet<ChoiceCaseNode> cases;
30     ImmutableSet<AugmentationSchema> augmentations;
31     ImmutableList<UnknownSchemaNode> unknownNodes;
32     String defaultCase;
33
34     ChoiceNodeImpl(final QName qname, final SchemaPath path) {
35         this.qname = qname;
36         this.path = path;
37     }
38
39     @Override
40     public QName getQName() {
41         return qname;
42     }
43
44     @Override
45     public SchemaPath getPath() {
46         return path;
47     }
48
49     @Override
50     public String getDescription() {
51         return description;
52     }
53
54     @Override
55     public String getReference() {
56         return reference;
57     }
58
59     @Override
60     public Status getStatus() {
61         return status;
62     }
63
64     @Override
65     public boolean isAugmenting() {
66         return augmenting;
67     }
68
69     @Override
70     public boolean isAddedByUses() {
71         return addedByUses;
72     }
73
74     @Override
75     public Optional<ChoiceNode> getOriginal() {
76         return Optional.fromNullable(original);
77     }
78
79     @Override
80     public boolean isConfiguration() {
81         return configuration;
82     }
83
84     @Override
85     public ConstraintDefinition getConstraints() {
86         return constraints;
87     }
88
89     @Override
90     public Set<AugmentationSchema> getAvailableAugmentations() {
91         return augmentations;
92     }
93
94     @Override
95     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
96         return unknownNodes;
97     }
98
99     @Override
100     public Set<ChoiceCaseNode> getCases() {
101         return cases;
102     }
103
104     @Override
105     public ChoiceCaseNode getCaseNodeByName(final QName name) {
106         if (name == null) {
107             throw new IllegalArgumentException("Choice Case QName cannot be NULL!");
108         }
109         for (final ChoiceCaseNode caseNode : cases) {
110             if (caseNode != null && name.equals(caseNode.getQName())) {
111                 return caseNode;
112             }
113         }
114         return null;
115     }
116
117     @Override
118     public ChoiceCaseNode getCaseNodeByName(final String name) {
119         if (name == null) {
120             throw new IllegalArgumentException("Choice Case string Name cannot be NULL!");
121         }
122         for (final ChoiceCaseNode caseNode : cases) {
123             if (caseNode != null && (caseNode.getQName() != null)
124                     && name.equals(caseNode.getQName().getLocalName())) {
125                 return caseNode;
126             }
127         }
128         return null;
129     }
130
131     @Override
132     public String getDefaultCase() {
133         return defaultCase;
134     }
135
136     @Override
137     public int hashCode() {
138         final int prime = 31;
139         int result = 1;
140         result = prime * result + ((qname == null) ? 0 : qname.hashCode());
141         result = prime * result + ((path == null) ? 0 : path.hashCode());
142         return result;
143     }
144
145     @Override
146     public boolean equals(final Object obj) {
147         if (this == obj) {
148             return true;
149         }
150         if (obj == null) {
151             return false;
152         }
153         if (getClass() != obj.getClass()) {
154             return false;
155         }
156         ChoiceNodeImpl other = (ChoiceNodeImpl) obj;
157         if (qname == null) {
158             if (other.qname != null) {
159                 return false;
160             }
161         } else if (!qname.equals(other.qname)) {
162             return false;
163         }
164         if (path == null) {
165             if (other.path != null) {
166                 return false;
167             }
168         } else if (!path.equals(other.path)) {
169             return false;
170         }
171         return true;
172     }
173
174     @Override
175     public String toString() {
176         StringBuilder sb = new StringBuilder(ChoiceNodeImpl.class.getSimpleName());
177         sb.append("[");
178         sb.append("qname=").append(qname);
179         sb.append("]");
180         return sb.toString();
181     }
182
183 }