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.Collections;
11 import java.util.HashSet;
12 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.UnknownSchemaNodeBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
23 import com.google.common.base.Preconditions;
24 import com.google.common.collect.ImmutableList;
26 public final class IdentitySchemaNodeBuilder extends AbstractSchemaNodeBuilder {
27 private IdentitySchemaNodeImpl instance;
28 private IdentitySchemaNode baseIdentity;
29 private IdentitySchemaNodeBuilder baseIdentityBuilder;
30 private final Set<IdentitySchemaNode> derivedIdentities = new HashSet<>();
31 private String baseIdentityName;
33 IdentitySchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
34 super(moduleName, line, qname);
35 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
38 IdentitySchemaNodeBuilder(final String moduleName, final IdentitySchemaNode base) {
39 super(moduleName, 0, base.getQName());
40 schemaPath = base.getPath();
41 derivedIdentities.addAll(base.getDerivedIdentities());
42 unknownNodes.addAll(base.getUnknownSchemaNodes());
46 public IdentitySchemaNode build() {
47 if (instance != null) {
51 instance = new IdentitySchemaNodeImpl(qname, schemaPath, derivedIdentities);
53 instance.description = description;
54 instance.reference = reference;
55 instance.status = status;
57 if (baseIdentityBuilder != null) {
58 baseIdentityBuilder.addDerivedIdentity(instance);
59 baseIdentity = baseIdentityBuilder.build();
61 instance.baseIdentity = baseIdentity;
64 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
65 unknownNodes.add(b.build());
67 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
72 public String getBaseIdentityName() {
73 return baseIdentityName;
76 public void setBaseIdentityName(final String baseIdentityName) {
77 this.baseIdentityName = baseIdentityName;
80 public void setBaseIdentity(final IdentitySchemaNodeBuilder baseType) {
81 this.baseIdentityBuilder = baseType;
84 public void addDerivedIdentity(final IdentitySchemaNode derivedIdentity) {
85 if (derivedIdentity != null) {
86 derivedIdentities.add(derivedIdentity);
91 public String toString() {
92 return "identity " + qname.getLocalName();
95 private static final class IdentitySchemaNodeImpl implements IdentitySchemaNode {
96 private final QName qname;
97 private final SchemaPath path;
98 private IdentitySchemaNode baseIdentity;
99 private final Set<IdentitySchemaNode> derivedIdentities;
100 private String description;
101 private String reference;
102 private Status status;
103 private ImmutableList<UnknownSchemaNode> unknownNodes;
105 private IdentitySchemaNodeImpl(final QName qname, final SchemaPath path,
106 final Set<IdentitySchemaNode> derivedIdentities) {
109 this.derivedIdentities = derivedIdentities;
113 public QName getQName() {
118 public IdentitySchemaNode getBaseIdentity() {
123 public Set<IdentitySchemaNode> getDerivedIdentities() {
124 return Collections.unmodifiableSet(derivedIdentities);
128 public String getDescription() {
133 public String getReference() {
138 public Status getStatus() {
143 public SchemaPath getPath() {
148 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
153 public int hashCode() {
154 final int prime = 31;
156 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
157 result = prime * result + ((path == null) ? 0 : path.hashCode());
162 public boolean equals(final Object obj) {
169 if (getClass() != obj.getClass()) {
172 IdentitySchemaNodeImpl other = (IdentitySchemaNodeImpl) obj;
174 if (other.qname != null) {
177 } else if (!qname.equals(other.qname)) {
181 if (other.path != null) {
184 } else if (!path.equals(other.path)) {
191 public String toString() {
192 StringBuilder sb = new StringBuilder(IdentitySchemaNodeImpl.class.getSimpleName());
194 sb.append("base=" + baseIdentity);
195 sb.append(", qname=" + qname);
197 return sb.toString();