Refactored parsing of YANG uses statement.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / 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.controller.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.controller.yang.common.QName;
15 import org.opendaylight.controller.yang.model.api.SchemaPath;
16 import org.opendaylight.controller.yang.model.api.Status;
17 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.controller.yang.parser.builder.api.AbstractSchemaNodeBuilder;
19
20 public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
21     private boolean isBuilt;
22     private final UnknownSchemaNodeImpl instance;
23     private boolean addedByUses;
24     private List<UnknownSchemaNode> unknownNodes;
25     private QName nodeType;
26     private String nodeParameter;
27
28     public UnknownSchemaNodeBuilder(final QName qname, final int line) {
29         super(qname, line);
30         instance = new UnknownSchemaNodeImpl(qname);
31     }
32
33     public UnknownSchemaNodeBuilder(UnknownSchemaNodeBuilder b) {
34         super(b.getQName(), b.getLine());
35         instance = new UnknownSchemaNodeImpl(qname);
36         path = b.getPath();
37         description = b.getDescription();
38         reference = b.getReference();
39         status = b.getStatus();
40         addedByUses = b.isAddedByUses();
41         unknownNodes = b.unknownNodes;
42         addedUnknownNodes.addAll(b.addedUnknownNodes);
43         nodeType = b.getNodeType();
44         nodeParameter = b.getNodeParameter();
45     }
46
47     @Override
48     public UnknownSchemaNode build() {
49         if (!isBuilt) {
50             instance.setPath(path);
51             instance.setNodeType(nodeType);
52             instance.setNodeParameter(nodeParameter);
53             instance.setDescription(description);
54             instance.setReference(reference);
55             instance.setStatus(status);
56             instance.setAddedByUses(addedByUses);
57
58             // UNKNOWN NODES
59             if (unknownNodes == null) {
60                 unknownNodes = new ArrayList<UnknownSchemaNode>();
61                 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
62                     unknownNodes.add(b.build());
63                 }
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 void setUnknownNodes(final List<UnknownSchemaNode> unknownNodes) {
82         this.unknownNodes = unknownNodes;
83     }
84
85     public QName getNodeType() {
86         return nodeType;
87     }
88
89     public void setNodeType(final QName nodeType) {
90         this.nodeType = nodeType;
91     }
92
93     public String getNodeParameter() {
94         return nodeParameter;
95     }
96
97     public void setNodeParameter(final String nodeParameter) {
98         this.nodeParameter = nodeParameter;
99     }
100
101     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
102         private final QName qname;
103         private SchemaPath path;
104         private String description;
105         private String reference;
106         private Status status = Status.CURRENT;
107         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
108         private QName nodeType;
109         private String nodeParameter;
110         private boolean addedByUses;
111
112         private UnknownSchemaNodeImpl(final QName qname) {
113             this.qname = qname;
114         }
115
116         @Override
117         public QName getQName() {
118             return qname;
119         }
120
121         @Override
122         public SchemaPath getPath() {
123             return path;
124         }
125
126         private void setPath(final SchemaPath path) {
127             this.path = path;
128         }
129
130         @Override
131         public String getDescription() {
132             return description;
133         }
134
135         private void setDescription(final String description) {
136             this.description = description;
137         }
138
139         @Override
140         public String getReference() {
141             return reference;
142         }
143
144         private void setReference(final String reference) {
145             this.reference = reference;
146         }
147
148         @Override
149         public Status getStatus() {
150             return status;
151         }
152
153         private void setStatus(final Status status) {
154             if (status != null) {
155                 this.status = status;
156             }
157         }
158
159         @Override
160         public boolean isAddedByUses() {
161             return addedByUses;
162         }
163
164         private void setAddedByUses(final boolean addedByUses) {
165             this.addedByUses = addedByUses;
166         }
167
168         @Override
169         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
170             return unknownNodes;
171         }
172
173         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
174             if (unknownNodes != null) {
175                 this.unknownNodes = unknownNodes;
176             }
177         }
178
179         @Override
180         public QName getNodeType() {
181             return nodeType;
182         }
183
184         private void setNodeType(final QName nodeType) {
185             this.nodeType = nodeType;
186         }
187
188         @Override
189         public String getNodeParameter() {
190             return nodeParameter;
191         }
192
193         private void setNodeParameter(final String nodeParameter) {
194             this.nodeParameter = nodeParameter;
195         }
196
197         @Override
198         public String toString() {
199             StringBuilder sb = new StringBuilder(UnknownSchemaNodeImpl.class.getSimpleName());
200             sb.append("[");
201             sb.append(qname);
202             sb.append("]");
203             return sb.toString();
204         }
205     }
206
207 }