0a6700af4da49e3601362ce93cd58570503144d3
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / FeatureBuilder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
9
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import java.util.List;
13 import java.util.Objects;
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.UnknownSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
21
22 public final class FeatureBuilder extends AbstractSchemaNodeBuilder {
23     private FeatureDefinitionImpl instance;
24
25     FeatureBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
26         super(moduleName, line, qname);
27         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
28     }
29
30     @Override
31     public FeatureDefinitionImpl build() {
32         if (instance != null) {
33             return instance;
34         }
35
36         instance = new FeatureDefinitionImpl(qname, schemaPath);
37
38         // UNKNOWN NODES
39         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
40             unknownNodes.add(b.build());
41         }
42         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
43
44         return instance;
45     }
46
47     @Override
48     public String toString() {
49         return "feature " + qname.getLocalName();
50     }
51
52     private static final class FeatureDefinitionImpl implements FeatureDefinition {
53         private final QName qname;
54         private final SchemaPath path;
55         private String description;
56         private String reference;
57         private Status status;
58         private ImmutableList<UnknownSchemaNode> unknownNodes;
59
60         private FeatureDefinitionImpl(final QName qname, final SchemaPath path) {
61             this.qname = qname;
62             this.path = path;
63         }
64
65         @Override
66         public QName getQName() {
67             return qname;
68         }
69
70         @Override
71         public SchemaPath getPath() {
72             return path;
73         }
74
75         @Override
76         public String getDescription() {
77             return description;
78         }
79
80         @Override
81         public String getReference() {
82             return reference;
83         }
84
85         @Override
86         public Status getStatus() {
87             return status;
88         }
89
90         @Override
91         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
92             return unknownNodes;
93         }
94
95         @Override
96         public int hashCode() {
97             final int prime = 31;
98             int result = 1;
99             result = prime * result + Objects.hashCode(qname);
100             result = prime * result + Objects.hashCode(path);
101             return result;
102         }
103
104         @Override
105         public boolean equals(final Object obj) {
106             if (this == obj) {
107                 return true;
108             }
109             if (obj == null) {
110                 return false;
111             }
112             if (getClass() != obj.getClass()) {
113                 return false;
114             }
115             FeatureDefinitionImpl other = (FeatureDefinitionImpl) obj;
116             if (qname == null) {
117                 if (other.qname != null) {
118                     return false;
119                 }
120             } else if (!qname.equals(other.qname)) {
121                 return false;
122             }
123             if (path == null) {
124                 if (other.path != null) {
125                     return false;
126                 }
127             } else if (!path.equals(other.path)) {
128                 return false;
129             }
130             return true;
131         }
132
133         @Override
134         public String toString() {
135             StringBuilder sb = new StringBuilder(FeatureDefinitionImpl.class.getSimpleName());
136             sb.append("[name=").append(qname).append("]");
137             return sb.toString();
138         }
139     }
140
141 }