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