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.List;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
16 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
17 import org.opendaylight.yangtools.yang.model.api.Status;
18 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
19 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.util.Comparators;
22 public final class FeatureBuilder extends AbstractSchemaNodeBuilder {
23 private boolean isBuilt;
24 private final FeatureDefinitionImpl instance;
26 FeatureBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
27 super(moduleName, line, qname);
28 this.schemaPath = path;
29 instance = new FeatureDefinitionImpl(qname, path);
33 public FeatureDefinitionImpl build() {
36 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
37 unknownNodes.add(b.build());
39 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
40 instance.addUnknownSchemaNodes(unknownNodes);
48 public SchemaPath getPath() {
53 public String getDescription() {
54 return instance.description;
58 public void setDescription(final String description) {
59 instance.description = description;
63 public String getReference() {
64 return instance.reference;
68 public void setReference(final String reference) {
69 instance.reference = reference;
73 public Status getStatus() {
74 return instance.status;
78 public void setStatus(Status status) {
80 instance.status = status;
85 public String toString() {
86 return "feature " + qname.getLocalName();
89 private final class FeatureDefinitionImpl implements FeatureDefinition {
90 private final QName qname;
91 private final SchemaPath path;
92 private String description;
93 private String reference;
94 private Status status = Status.CURRENT;
95 private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
97 private FeatureDefinitionImpl(final QName qname, final SchemaPath path) {
103 public QName getQName() {
108 public SchemaPath getPath() {
113 public String getDescription() {
118 public String getReference() {
123 public Status getStatus() {
128 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
129 return Collections.unmodifiableList(unknownNodes);
132 private void addUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
133 if (unknownNodes != null) {
134 this.unknownNodes.addAll(unknownNodes);
139 public int hashCode() {
140 final int prime = 31;
142 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
143 result = prime * result + ((path == null) ? 0 : path.hashCode());
148 public boolean equals(Object obj) {
155 if (getClass() != obj.getClass()) {
158 FeatureDefinitionImpl other = (FeatureDefinitionImpl) obj;
160 if (other.qname != null) {
163 } else if (!qname.equals(other.qname)) {
167 if (other.path != null) {
170 } else if (!path.equals(other.path)) {
177 public String toString() {
178 StringBuilder sb = new StringBuilder(FeatureDefinitionImpl.class.getSimpleName());
179 sb.append("[name=" + qname + "]");
180 return sb.toString();