2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
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;
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;
32 public class CaseShorthandImpl implements ChoiceCaseNode, DerivableSchemaNode {
34 private final DataSchemaNode caseShorthandNode;
35 private final QName qName;
36 private final SchemaPath path;
38 private final String description;
39 private final String reference;
40 private final Status status;
42 private final boolean augmenting;
43 private final boolean addedByUses;
44 ConstraintDefinition constraints;
45 private ChoiceCaseNode original;
47 ImmutableList<UnknownSchemaNode> unknownNodes;
49 public CaseShorthandImpl(DataSchemaNode caseShorthandNode) {
50 this.caseShorthandNode = caseShorthandNode;
51 this.qName = caseShorthandNode.getQName();
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());
60 this.description = caseShorthandNode.getDescription();
61 this.reference = caseShorthandNode.getReference();
62 this.status = caseShorthandNode.getStatus();
64 this.augmenting = caseShorthandNode.isAugmenting();
65 this.addedByUses = caseShorthandNode.isAddedByUses();
66 this.constraints = caseShorthandNode.getConstraints();
67 this.unknownNodes = ImmutableList.copyOf(caseShorthandNode.getUnknownSchemaNodes());
71 public boolean isAugmenting() {
76 public boolean isAddedByUses() {
81 public boolean isConfiguration() {
86 public ConstraintDefinition getConstraints() {
91 public QName getQName() {
96 public SchemaPath getPath() {
101 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
106 public String getDescription() {
111 public String getReference() {
116 public Status getStatus() {
121 public Set<TypeDefinition<?>> getTypeDefinitions() {
122 return Collections.emptySet();
126 public Collection<DataSchemaNode> getChildNodes() {
127 return Arrays.asList(caseShorthandNode);
131 public Set<GroupingDefinition> getGroupings() {
132 return Collections.emptySet();
136 public DataSchemaNode getDataChildByName(QName name) {
137 if (qName.equals(name)) {
138 return caseShorthandNode;
145 public DataSchemaNode getDataChildByName(String name) {
146 if (qName.getLocalName().equals(name)) {
147 return caseShorthandNode;
154 public Set<UsesNode> getUses() {
155 return Collections.emptySet();
159 public Set<AugmentationSchema> getAvailableAugmentations() {
160 return Collections.emptySet();
164 public Optional<? extends SchemaNode> getOriginal() {
165 return Optional.fromNullable(original);
169 public int hashCode() {
170 final int prime = 31;
172 result = prime * result + ((qName == null) ? 0 : qName.hashCode());
173 result = prime * result + ((path == null) ? 0 : path.hashCode());
178 public boolean equals(final Object obj) {
185 if (getClass() != obj.getClass()) {
188 CaseShorthandImpl other = (CaseShorthandImpl) obj;
190 if (other.qName != null) {
193 } else if (!qName.equals(other.qName)) {
197 if (other.path != null) {
200 } else if (!path.equals(other.path)) {
207 public String toString() {
208 StringBuilder sb = new StringBuilder(
209 CaseShorthandImpl.class.getSimpleName());
214 return sb.toString();