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 com.google.common.collect.ImmutableList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
15 import org.opendaylight.yangtools.yang.common.QName;
16 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.model.api.Status;
19 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
20 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
22 public final class IdentitySchemaNodeBuilder extends AbstractSchemaNodeBuilder {
23 private IdentitySchemaNodeImpl instance;
24 private IdentitySchemaNode baseIdentity;
25 private IdentitySchemaNodeBuilder baseIdentityBuilder;
26 private final Set<IdentitySchemaNode> derivedIdentities = new HashSet<>();
27 private String baseIdentityName;
29 IdentitySchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
30 super(moduleName, line, qname);
34 IdentitySchemaNodeBuilder(final String moduleName, IdentitySchemaNode base) {
35 super(moduleName, 0, base.getQName());
36 schemaPath = base.getPath();
37 derivedIdentities.addAll(base.getDerivedIdentities());
38 unknownNodes.addAll(base.getUnknownSchemaNodes());
42 public IdentitySchemaNode build() {
43 if (instance != null) {
47 instance = new IdentitySchemaNodeImpl(qname, schemaPath, derivedIdentities);
49 instance.description = description;
50 instance.reference = reference;
51 instance.status = status;
53 if (baseIdentityBuilder != null) {
54 baseIdentityBuilder.addDerivedIdentity(instance);
55 baseIdentity = baseIdentityBuilder.build();
57 instance.baseIdentity = baseIdentity;
60 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
61 unknownNodes.add(b.build());
63 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
68 public String getBaseIdentityName() {
69 return baseIdentityName;
72 public void setBaseIdentityName(final String baseIdentityName) {
73 this.baseIdentityName = baseIdentityName;
76 public void setBaseIdentity(final IdentitySchemaNodeBuilder baseType) {
77 this.baseIdentityBuilder = baseType;
80 public void addDerivedIdentity(IdentitySchemaNode derivedIdentity) {
81 if (derivedIdentity != null) {
82 derivedIdentities.add(derivedIdentity);
87 public String toString() {
88 return "identity " + qname.getLocalName();
91 private static final class IdentitySchemaNodeImpl implements IdentitySchemaNode {
92 private final QName qname;
93 private final SchemaPath path;
94 private IdentitySchemaNode baseIdentity;
95 private final Set<IdentitySchemaNode> derivedIdentities;
96 private String description;
97 private String reference;
98 private Status status;
99 private ImmutableList<UnknownSchemaNode> unknownNodes;
101 private IdentitySchemaNodeImpl(final QName qname, final SchemaPath path,
102 final Set<IdentitySchemaNode> derivedIdentities) {
105 this.derivedIdentities = derivedIdentities;
109 public QName getQName() {
114 public IdentitySchemaNode getBaseIdentity() {
119 public Set<IdentitySchemaNode> getDerivedIdentities() {
120 return Collections.unmodifiableSet(derivedIdentities);
124 public String getDescription() {
129 public String getReference() {
134 public Status getStatus() {
139 public SchemaPath getPath() {
144 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
149 public int hashCode() {
150 final int prime = 31;
152 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
153 result = prime * result + ((path == null) ? 0 : path.hashCode());
158 public boolean equals(Object obj) {
165 if (getClass() != obj.getClass()) {
168 IdentitySchemaNodeImpl other = (IdentitySchemaNodeImpl) obj;
170 if (other.qname != null) {
173 } else if (!qname.equals(other.qname)) {
177 if (other.path != null) {
180 } else if (!path.equals(other.path)) {
187 public String toString() {
188 StringBuilder sb = new StringBuilder(IdentitySchemaNodeImpl.class.getSimpleName());
190 sb.append("base=" + baseIdentity);
191 sb.append(", qname=" + qname);
193 return sb.toString();