Fixed path correction process of nodes defined by uses statement.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UnknownSchemaNodeBuilder.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 java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
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;
21
22 public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
23     private boolean isBuilt;
24     private final UnknownSchemaNodeImpl instance;
25     private boolean addedByUses;
26     private QName nodeType;
27     private String nodeParameter;
28
29     private ExtensionDefinition extensionDefinition;
30     private ExtensionBuilder extensionBuilder;
31
32     public UnknownSchemaNodeBuilder(final String moduleName, final int line, final QName qname) {
33         super(moduleName, line, qname);
34         instance = new UnknownSchemaNodeImpl(qname);
35     }
36
37     @Override
38     public UnknownSchemaNode build() {
39         if (!isBuilt) {
40             instance.setPath(schemaPath);
41             instance.setNodeType(nodeType);
42             instance.setNodeParameter(nodeParameter);
43             instance.setDescription(description);
44             instance.setReference(reference);
45             instance.setStatus(status);
46             instance.setAddedByUses(addedByUses);
47
48             // EXTENSION
49             if (extensionDefinition != null) {
50                 instance.setExtensionDefinition(extensionDefinition);
51             } else {
52                 if (extensionBuilder != null) {
53                     instance.setExtensionDefinition(extensionBuilder.build());
54                 }
55             }
56
57             // UNKNOWN NODES
58             if (unknownNodes == null) {
59                 unknownNodes = new ArrayList<UnknownSchemaNode>();
60                 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
61                     unknownNodes.add(b.build());
62                 }
63                 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
64             }
65             instance.setUnknownSchemaNodes(unknownNodes);
66
67             isBuilt = true;
68         }
69
70         return instance;
71     }
72
73     public boolean isAddedByUses() {
74         return addedByUses;
75     }
76
77     public void setAddedByUses(final boolean addedByUses) {
78         this.addedByUses = addedByUses;
79     }
80
81     public QName getNodeType() {
82         return nodeType;
83     }
84
85     public void setNodeType(final QName nodeType) {
86         this.nodeType = nodeType;
87     }
88
89     public String getNodeParameter() {
90         return nodeParameter;
91     }
92
93     public void setNodeParameter(final String nodeParameter) {
94         this.nodeParameter = nodeParameter;
95     }
96
97     public ExtensionDefinition getExtensionDefinition() {
98         return extensionDefinition;
99     }
100
101     public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
102         this.extensionDefinition = extensionDefinition;
103     }
104
105     public ExtensionBuilder getExtensionBuilder() {
106         return extensionBuilder;
107     }
108
109     public void setExtensionBuilder(final ExtensionBuilder extension) {
110         this.extensionBuilder = extension;
111     }
112
113     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
114         private final QName qname;
115         private SchemaPath path;
116         private ExtensionDefinition extension;
117         private String description;
118         private String reference;
119         private Status status = Status.CURRENT;
120         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
121         private QName nodeType;
122         private String nodeParameter;
123         private boolean addedByUses;
124
125         private UnknownSchemaNodeImpl(final QName qname) {
126             this.qname = qname;
127         }
128
129         @Override
130         public QName getQName() {
131             return qname;
132         }
133
134         @Override
135         public SchemaPath getPath() {
136             return path;
137         }
138
139         private void setPath(final SchemaPath path) {
140             this.path = path;
141         }
142
143         @Override
144         public ExtensionDefinition getExtensionDefinition() {
145             return extension;
146         }
147
148         private void setExtensionDefinition(final ExtensionDefinition extension) {
149             this.extension = extension;
150         }
151
152         @Override
153         public String getDescription() {
154             return description;
155         }
156
157         private void setDescription(final String description) {
158             this.description = description;
159         }
160
161         @Override
162         public String getReference() {
163             return reference;
164         }
165
166         private void setReference(final String reference) {
167             this.reference = reference;
168         }
169
170         @Override
171         public Status getStatus() {
172             return status;
173         }
174
175         private void setStatus(final Status status) {
176             if (status != null) {
177                 this.status = status;
178             }
179         }
180
181         @Override
182         public boolean isAddedByUses() {
183             return addedByUses;
184         }
185
186         private void setAddedByUses(final boolean addedByUses) {
187             this.addedByUses = addedByUses;
188         }
189
190         @Override
191         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
192             return unknownNodes;
193         }
194
195         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
196             if (unknownNodes != null) {
197                 this.unknownNodes = unknownNodes;
198             }
199         }
200
201         @Override
202         public QName getNodeType() {
203             return nodeType;
204         }
205
206         private void setNodeType(final QName nodeType) {
207             this.nodeType = nodeType;
208         }
209
210         @Override
211         public String getNodeParameter() {
212             return nodeParameter;
213         }
214
215         private void setNodeParameter(final String nodeParameter) {
216             this.nodeParameter = nodeParameter;
217         }
218
219         @Override
220         public String toString() {
221             StringBuilder sb = new StringBuilder(UnknownSchemaNodeImpl.class.getSimpleName());
222             sb.append("[");
223             sb.append(qname);
224             sb.append("]");
225             return sb.toString();
226         }
227     }
228
229 }