2 * Copyright (c) 2013 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.builder.impl;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
19 import org.opendaylight.yangtools.yang.model.api.Status;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
22 import org.opendaylight.yangtools.yang.parser.util.Comparators;
24 public final class IdentitySchemaNodeBuilder extends AbstractSchemaNodeBuilder {
25 private boolean isBuilt;
26 private final IdentitySchemaNodeImpl instance;
27 private IdentitySchemaNode baseIdentity;
28 private IdentitySchemaNodeBuilder baseIdentityBuilder;
29 private final Set<IdentitySchemaNode> derivedIdentities = new HashSet<>();
30 private String baseIdentityName;
32 IdentitySchemaNodeBuilder(final String moduleName, final int line, final QName qname) {
33 super(moduleName, line, qname);
34 instance = new IdentitySchemaNodeImpl(qname);
35 instance.setDerivedIdentities(derivedIdentities);
39 public IdentitySchemaNode build() {
41 instance.setPath(schemaPath);
42 instance.setDescription(description);
43 instance.setReference(reference);
44 instance.setStatus(status);
46 if (baseIdentity == null) {
47 if(baseIdentityBuilder != null) {
48 baseIdentityBuilder.addDerivedIdentity(instance);
49 baseIdentity = baseIdentityBuilder.build();
52 if(baseIdentity instanceof IdentitySchemaNodeImpl) {
53 ((IdentitySchemaNodeImpl)baseIdentity).toBuilder().addDerivedIdentity(instance);
56 instance.setBaseIdentity(baseIdentity);
59 if (unknownNodes == null) {
60 unknownNodes = new ArrayList<>();
61 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
62 unknownNodes.add(b.build());
64 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
66 instance.setUnknownSchemaNodes(unknownNodes);
74 public String getBaseIdentityName() {
75 return baseIdentityName;
78 public void setBaseIdentityName(final String baseIdentityName) {
79 this.baseIdentityName = baseIdentityName;
82 public void setBaseIdentity(final IdentitySchemaNodeBuilder baseType) {
83 this.baseIdentityBuilder = baseType;
86 public void setBaseIdentity(final IdentitySchemaNode baseType) {
87 this.baseIdentity = baseType;
90 public void addDerivedIdentity(IdentitySchemaNode derivedIdentity) {
91 if (derivedIdentity != null) {
92 derivedIdentities.add(derivedIdentity);
97 public String toString() {
98 return "identity " + qname.getLocalName();
101 public final class IdentitySchemaNodeImpl implements IdentitySchemaNode {
102 private final QName qname;
103 private IdentitySchemaNode baseIdentity;
104 private Set<IdentitySchemaNode> derivedIdentities = Collections.emptySet();
105 private String description;
106 private String reference;
107 private Status status = Status.CURRENT;
108 private SchemaPath path;
109 private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
111 private IdentitySchemaNodeImpl(final QName qname) {
116 public QName getQName() {
121 public IdentitySchemaNode getBaseIdentity() {
125 private void setBaseIdentity(final IdentitySchemaNode baseIdentity) {
126 this.baseIdentity = baseIdentity;
130 public Set<IdentitySchemaNode> getDerivedIdentities() {
131 return derivedIdentities;
134 private void setDerivedIdentities(Set<IdentitySchemaNode> derivedIdentities) {
135 if (derivedIdentities != null) {
136 this.derivedIdentities = derivedIdentities;
141 public String getDescription() {
145 private void setDescription(final String description) {
146 this.description = description;
150 public String getReference() {
154 private void setReference(final String reference) {
155 this.reference = reference;
159 public Status getStatus() {
163 private void setStatus(final Status status) {
164 if (status != null) {
165 this.status = status;
170 public SchemaPath getPath() {
174 private void setPath(final SchemaPath path) {
179 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
183 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
184 if (unknownSchemaNodes != null) {
185 this.unknownNodes = unknownSchemaNodes;
189 public IdentitySchemaNodeBuilder toBuilder() {
190 return IdentitySchemaNodeBuilder.this;
194 public int hashCode() {
195 final int prime = 31;
197 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
198 result = prime * result + ((path == null) ? 0 : path.hashCode());
203 public boolean equals(Object obj) {
210 if (getClass() != obj.getClass()) {
213 IdentitySchemaNodeImpl other = (IdentitySchemaNodeImpl) obj;
215 if (other.qname != null) {
218 } else if (!qname.equals(other.qname)) {
222 if (other.path != null) {
225 } else if (!path.equals(other.path)) {
232 public String toString() {
233 StringBuilder sb = new StringBuilder(IdentitySchemaNodeImpl.class.getSimpleName());
235 sb.append("base=" + baseIdentity);
236 sb.append(", qname=" + qname);
238 return sb.toString();