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