BUG-865: deprecate pre-Beryllium parser elements
[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 /**
23  * @deprecated Pre-Beryllium implementation, scheduled for removal.
24  */
25 @Deprecated
26 public final class FeatureBuilder extends AbstractSchemaNodeBuilder {
27     private FeatureDefinitionImpl instance;
28
29     FeatureBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
30         super(moduleName, line, qname);
31         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
32     }
33
34     @Override
35     public FeatureDefinitionImpl build() {
36         if (instance != null) {
37             return instance;
38         }
39
40         instance = new FeatureDefinitionImpl(qname, schemaPath);
41
42         // UNKNOWN NODES
43         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
44             unknownNodes.add(b.build());
45         }
46         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
47
48         return instance;
49     }
50
51     @Override
52     public String toString() {
53         return "feature " + qname.getLocalName();
54     }
55
56     private static final class FeatureDefinitionImpl implements FeatureDefinition {
57         private final QName qname;
58         private final SchemaPath path;
59         private String description;
60         private String reference;
61         private Status status;
62         private ImmutableList<UnknownSchemaNode> unknownNodes;
63
64         private FeatureDefinitionImpl(final QName qname, final SchemaPath path) {
65             this.qname = qname;
66             this.path = path;
67         }
68
69         @Override
70         public QName getQName() {
71             return qname;
72         }
73
74         @Override
75         public SchemaPath getPath() {
76             return path;
77         }
78
79         @Override
80         public String getDescription() {
81             return description;
82         }
83
84         @Override
85         public String getReference() {
86             return reference;
87         }
88
89         @Override
90         public Status getStatus() {
91             return status;
92         }
93
94         @Override
95         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
96             return unknownNodes;
97         }
98
99         @Override
100         public int hashCode() {
101             final int prime = 31;
102             int result = 1;
103             result = prime * result + Objects.hashCode(qname);
104             result = prime * result + Objects.hashCode(path);
105             return result;
106         }
107
108         @Override
109         public boolean equals(final Object obj) {
110             if (this == obj) {
111                 return true;
112             }
113             if (obj == null) {
114                 return false;
115             }
116             if (getClass() != obj.getClass()) {
117                 return false;
118             }
119             FeatureDefinitionImpl other = (FeatureDefinitionImpl) obj;
120             if (qname == null) {
121                 if (other.qname != null) {
122                     return false;
123                 }
124             } else if (!qname.equals(other.qname)) {
125                 return false;
126             }
127             if (path == null) {
128                 if (other.path != null) {
129                     return false;
130                 }
131             } else if (!path.equals(other.path)) {
132                 return false;
133             }
134             return true;
135         }
136
137         @Override
138         public String toString() {
139             StringBuilder sb = new StringBuilder(FeatureDefinitionImpl.class.getSimpleName());
140             sb.append("[name=").append(qname).append("]");
141             return sb.toString();
142         }
143     }
144
145 }