Bug 4412: New yang parser effective statements cleanup
[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 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     private final String description;
39     private final String reference;
40     private final Status status;
41     private final boolean augmenting;
42     private final boolean addedByUses;
43     private final ConstraintDefinition constraints;
44     private final List<UnknownSchemaNode> unknownNodes;
45
46     public CaseShorthandImpl(final DataSchemaNode caseShorthandNode) {
47         this.caseShorthandNode = caseShorthandNode;
48         this.qName = caseShorthandNode.getQName();
49         this.path = Preconditions.checkNotNull(caseShorthandNode.getPath().getParent());
50         this.description = caseShorthandNode.getDescription();
51         this.reference = caseShorthandNode.getReference();
52         this.status = caseShorthandNode.getStatus();
53
54         this.augmenting = caseShorthandNode.isAugmenting();
55         this.addedByUses = caseShorthandNode.isAddedByUses();
56         this.constraints = caseShorthandNode.getConstraints();
57         this.unknownNodes = ImmutableList.copyOf(caseShorthandNode.getUnknownSchemaNodes());
58     }
59
60     @Override
61     public boolean isAugmenting() {
62         return augmenting;
63     }
64
65     @Override
66     public boolean isAddedByUses() {
67         return addedByUses;
68     }
69
70     @Override
71     public boolean isConfiguration() {
72         return false;
73     }
74
75     @Override
76     public ConstraintDefinition getConstraints() {
77         return constraints;
78     }
79
80     @Override
81     public QName getQName() {
82         return qName;
83     }
84
85     @Override
86     public SchemaPath getPath() {
87         return path;
88     }
89
90     @Override
91     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
92         return unknownNodes;
93     }
94
95     @Override
96     public String getDescription() {
97         return description;
98     }
99
100     @Override
101     public String getReference() {
102         return reference;
103     }
104
105     @Override
106     public Status getStatus() {
107         return status;
108     }
109
110     @Override
111     public Set<TypeDefinition<?>> getTypeDefinitions() {
112         return Collections.emptySet();
113     }
114
115     @Override
116     public Collection<DataSchemaNode> getChildNodes() {
117         return Arrays.asList(caseShorthandNode);
118     }
119
120     @Override
121     public Set<GroupingDefinition> getGroupings() {
122         return Collections.emptySet();
123     }
124
125     @Override
126     public DataSchemaNode getDataChildByName(final QName name) {
127         if (qName.equals(name)) {
128             return caseShorthandNode;
129         } else {
130             return null;
131         }
132     }
133
134     @Override
135     public DataSchemaNode getDataChildByName(final String name) {
136         if (qName.getLocalName().equals(name)) {
137             return caseShorthandNode;
138         } else {
139             return null;
140         }
141     }
142
143     @Override
144     public Set<UsesNode> getUses() {
145         return Collections.emptySet();
146     }
147
148     @Override
149     public Set<AugmentationSchema> getAvailableAugmentations() {
150         return Collections.emptySet();
151     }
152
153     @Override
154     public Optional<? extends SchemaNode> getOriginal() {
155         return Optional.absent();
156     }
157
158     @Override
159     public int hashCode() {
160         final int prime = 31;
161         int result = 1;
162         result = prime * result + Objects.hashCode(qName);
163         result = prime * result + Objects.hashCode(path);
164         return result;
165     }
166
167     @Override
168     public boolean equals(final Object obj) {
169         if (this == obj) {
170             return true;
171         }
172         if (obj == null) {
173             return false;
174         }
175         if (getClass() != obj.getClass()) {
176             return false;
177         }
178         CaseShorthandImpl other = (CaseShorthandImpl) obj;
179         return Objects.equals(qName, other.qName) && Objects.equals(path, other.path);
180     }
181
182     @Override
183     public String toString() {
184         StringBuilder sb = new StringBuilder(CaseShorthandImpl.class.getSimpleName());
185         sb.append("[");
186         sb.append("qname=");
187         sb.append(qName);
188         sb.append("]");
189         return sb.toString();
190     }
191 }