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;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.model.api.*;
14 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
15 import org.opendaylight.yangtools.yang.parser.util.Comparators;
17 public final class IdentitySchemaNodeBuilder extends AbstractSchemaNodeBuilder {
18 private boolean isBuilt;
19 private final IdentitySchemaNodeImpl instance;
20 private IdentitySchemaNode baseIdentity;
21 private IdentitySchemaNodeBuilder baseIdentityBuilder;
22 private final Set<IdentitySchemaNode> derivedIdentities = new HashSet<>();
23 private String baseIdentityName;
25 IdentitySchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
26 super(moduleName, line, qname);
27 this.schemaPath = path;
28 instance = new IdentitySchemaNodeImpl(qname, path, derivedIdentities);
31 IdentitySchemaNodeBuilder(final String moduleName, IdentitySchemaNode base) {
32 super(moduleName, 0, base.getQName());
33 schemaPath = base.getPath();
34 derivedIdentities.addAll(base.getDerivedIdentities());
35 unknownNodes.addAll(base.getUnknownSchemaNodes());
36 instance = new IdentitySchemaNodeImpl(qname, schemaPath, derivedIdentities);
40 public IdentitySchemaNode build() {
42 if(baseIdentityBuilder != null) {
43 baseIdentityBuilder.addDerivedIdentity(instance);
44 baseIdentity = baseIdentityBuilder.build();
46 instance.setBaseIdentity(baseIdentity);
49 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
50 unknownNodes.add(b.build());
52 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
53 instance.addUnknownSchemaNodes(unknownNodes);
62 public SchemaPath getPath() {
67 public String getDescription() {
68 return instance.description;
72 public void setDescription(final String description) {
73 instance.description = description;
77 public String getReference() {
78 return instance.reference;
82 public void setReference(final String reference) {
83 instance.reference = reference;
87 public Status getStatus() {
88 return instance.status;
92 public void setStatus(Status status) {
94 instance.status = status;
98 public String getBaseIdentityName() {
99 return baseIdentityName;
102 public void setBaseIdentityName(final String baseIdentityName) {
103 this.baseIdentityName = baseIdentityName;
106 public void setBaseIdentity(final IdentitySchemaNodeBuilder baseType) {
107 this.baseIdentityBuilder = baseType;
110 public void addDerivedIdentity(IdentitySchemaNode derivedIdentity) {
111 if (derivedIdentity != null) {
112 derivedIdentities.add(derivedIdentity);
117 public String toString() {
118 return "identity " + qname.getLocalName();
121 private static final class IdentitySchemaNodeImpl implements IdentitySchemaNode {
122 private final QName qname;
123 private final SchemaPath path;
124 private IdentitySchemaNode baseIdentity;
125 private final Set<IdentitySchemaNode> derivedIdentities;
126 private String description;
127 private String reference;
128 private Status status = Status.CURRENT;
129 private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
131 private IdentitySchemaNodeImpl(final QName qname, final SchemaPath path, final Set<IdentitySchemaNode> derivedIdentities) {
134 this.derivedIdentities = derivedIdentities;
138 public QName getQName() {
143 public IdentitySchemaNode getBaseIdentity() {
147 private void setBaseIdentity(final IdentitySchemaNode baseIdentity) {
148 this.baseIdentity = baseIdentity;
152 public Set<IdentitySchemaNode> getDerivedIdentities() {
153 return Collections.unmodifiableSet(derivedIdentities);
157 public String getDescription() {
162 public String getReference() {
167 public Status getStatus() {
172 public SchemaPath getPath() {
177 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
178 return Collections.unmodifiableList(unknownNodes);
181 private void addUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
182 if (unknownSchemaNodes != null) {
183 this.unknownNodes.addAll(unknownSchemaNodes);
188 public int hashCode() {
189 final int prime = 31;
191 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
192 result = prime * result + ((path == null) ? 0 : path.hashCode());
197 public boolean equals(Object obj) {
204 if (getClass() != obj.getClass()) {
207 IdentitySchemaNodeImpl other = (IdentitySchemaNodeImpl) obj;
209 if (other.qname != null) {
212 } else if (!qname.equals(other.qname)) {
216 if (other.path != null) {
219 } else if (!path.equals(other.path)) {
226 public String toString() {
227 StringBuilder sb = new StringBuilder(IdentitySchemaNodeImpl.class.getSimpleName());
229 sb.append("base=" + baseIdentity);
230 sb.append(", qname=" + qname);
232 return sb.toString();