Bug 1131 - yang-parser-impl cleanup
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ExtensionBuilderImpl.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 org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.model.api.Status;
17 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.yangtools.yang.parser.builder.api.ExtensionBuilder;
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 ExtensionBuilderImpl extends AbstractSchemaNodeBuilder implements ExtensionBuilder {
23     private ExtensionDefinitionImpl instance;
24     private String argument;
25     private boolean yin;
26
27     ExtensionBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path) {
28         super(moduleName, line, qname);
29         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
30     }
31
32     @Override
33     public ExtensionDefinition build() {
34         if (instance != null) {
35             return instance;
36         }
37
38         instance = new ExtensionDefinitionImpl(qname, schemaPath);
39         instance.argument = argument;
40         instance.yin = yin;
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 void setYinElement(final boolean yin) {
53         this.yin = yin;
54     }
55
56     @Override
57     public void setArgument(final String argument) {
58         this.argument = argument;
59     }
60
61     @Override
62     public String toString() {
63         return "extension " + qname.getLocalName();
64     }
65
66     private static final class ExtensionDefinitionImpl implements ExtensionDefinition {
67         private final QName qname;
68         private String argument;
69         private final SchemaPath schemaPath;
70         private String description;
71         private String reference;
72         private Status status;
73         private ImmutableList<UnknownSchemaNode> unknownNodes;
74         private boolean yin;
75
76         private ExtensionDefinitionImpl(final QName qname, final SchemaPath path) {
77             this.qname = qname;
78             this.schemaPath = path;
79         }
80
81         @Override
82         public QName getQName() {
83             return qname;
84         }
85
86         @Override
87         public SchemaPath getPath() {
88             return schemaPath;
89         }
90
91         @Override
92         public String getDescription() {
93             return description;
94         }
95
96         @Override
97         public String getReference() {
98             return reference;
99         }
100
101         @Override
102         public Status getStatus() {
103             return status;
104         }
105
106         @Override
107         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
108             return unknownNodes;
109         }
110
111         @Override
112         public String getArgument() {
113             return argument;
114         }
115
116         @Override
117         public boolean isYinElement() {
118             return yin;
119         }
120
121         @Override
122         public int hashCode() {
123             final int prime = 31;
124             int result = 1;
125             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
126             result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
127             return result;
128         }
129
130         @Override
131         public boolean equals(final Object obj) {
132             if (this == obj) {
133                 return true;
134             }
135             if (obj == null) {
136                 return false;
137             }
138             if (getClass() != obj.getClass()) {
139                 return false;
140             }
141             ExtensionDefinitionImpl other = (ExtensionDefinitionImpl) obj;
142             if (qname == null) {
143                 if (other.qname != null) {
144                     return false;
145                 }
146             } else if (!qname.equals(other.qname)) {
147                 return false;
148             }
149             if (schemaPath == null) {
150                 if (other.schemaPath != null) {
151                     return false;
152                 }
153             } else if (!schemaPath.equals(other.schemaPath)) {
154                 return false;
155             }
156             return true;
157         }
158
159         @Override
160         public String toString() {
161             StringBuilder sb = new StringBuilder(ExtensionDefinitionImpl.class.getSimpleName());
162             sb.append("[");
163             sb.append("argument=").append(argument);
164             sb.append(", qname=").append(qname);
165             sb.append(", schemaPath=").append(schemaPath);
166             sb.append(", extensionSchemaNodes=").append(unknownNodes);
167             sb.append(", yin=").append(yin);
168             sb.append("]");
169             return sb.toString();
170         }
171     }
172
173 }