Merge "Bug 2362 - Milestone: Basic constraints validation"
[yangtools.git] / yang / yang-model-export / src / main / java / org / opendaylight / yangtools / yang / model / export / SchemaToStatementWriterAdaptor.java
1 /*
2  * Copyright (c) 2014 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.model.export;
9
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import com.google.common.primitives.UnsignedInteger;
13 import java.net.URI;
14 import java.util.Date;
15 import java.util.Iterator;
16 import java.util.List;
17 import javax.annotation.concurrent.NotThreadSafe;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
20 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
21 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
22 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
23 import org.opendaylight.yangtools.yang.model.api.Status;
24 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
25
26 @Beta
27 @NotThreadSafe
28 final class SchemaToStatementWriterAdaptor implements Rfc6020ModuleWriter {
29
30     private final StatementTextWriter writer;
31
32     private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
33         this.writer = Preconditions.checkNotNull(writer);
34     }
35
36     public static final Rfc6020ModuleWriter from(final StatementTextWriter writer) {
37         return new SchemaToStatementWriterAdaptor(writer);
38     }
39
40     @Override
41     public void endNode() {
42         writer.endStatement();
43     }
44
45     @Override
46     public void startModuleNode(final String identifier) {
47         writer.startStatement(Rfc6020Mapping.MODULE);
48         writer.writeArgument(identifier);
49     }
50
51     @Override
52     public void startOrganizationNode(final String input) {
53         writer.startStatement(Rfc6020Mapping.ORGANIZATION);
54         writer.writeArgument(input);
55     }
56
57     @Override
58     public void startContactNode(final String input) {
59         writer.startStatement(Rfc6020Mapping.CONTACT);
60         writer.writeArgument(input);
61     }
62
63     @Override
64     public void startDescriptionNode(final String input) {
65         writer.startStatement(Rfc6020Mapping.DESCRIPTION);
66         writer.writeArgument(input);
67     }
68
69     @Override
70     public void startReferenceNode(final String input) {
71         writer.startStatement(Rfc6020Mapping.REFERENCE);
72         writer.writeArgument(input);
73     }
74
75     @Override
76     public void startUnitsNode(final String input) {
77         writer.startStatement(Rfc6020Mapping.UNITS);
78         writer.writeArgument(input);
79     }
80
81     @Override
82     public void startYangVersionNode(final String input) {
83         writer.startStatement(Rfc6020Mapping.YANG_VERSION);
84         writer.writeArgument(input);
85     }
86
87     @Override
88     public void startNamespaceNode(final URI uri) {
89         writer.startStatement(Rfc6020Mapping.NAMESPACE);
90         writer.writeArgument(uri.toString());
91     }
92
93     @Override
94     public void startKeyNode(final List<QName> keyList) {
95         writer.startStatement(Rfc6020Mapping.KEY);
96         final StringBuilder keyStr = new StringBuilder();
97         final Iterator<QName> iter = keyList.iterator();
98         while (iter.hasNext()) {
99             keyStr.append(iter.next().getLocalName());
100             if (iter.hasNext()) {
101                 keyStr.append(' ');
102             }
103         }
104         writer.writeArgument(keyStr.toString());
105     }
106
107     @Override
108     public void startPrefixNode(final String input) {
109         writer.startStatement(Rfc6020Mapping.PREFIX);
110         writer.writeArgument(input);
111     }
112
113     @Override
114     public void startFeatureNode(final QName qName) {
115         writer.startStatement(Rfc6020Mapping.FEATURE);
116         writer.writeArgument(qName);
117     }
118
119     @Override
120     public void startExtensionNode(final QName qName) {
121         writer.startStatement(Rfc6020Mapping.EXTENSION);
122         writer.writeArgument(qName);
123     }
124
125     @Override
126     public void startArgumentNode(final String input) {
127         writer.startStatement(Rfc6020Mapping.ARGUMENT);
128         writer.writeArgument(input);
129     }
130
131     @Override
132     public void startStatusNode(final Status status) {
133         writer.startStatement(Rfc6020Mapping.STATUS);
134         writer.writeArgument(status.toString().toLowerCase());
135     }
136
137     @Override
138     public void startTypeNode(final QName qName) {
139         writer.startStatement(Rfc6020Mapping.TYPE);
140         writer.writeArgument(qName);
141     }
142
143     @Override
144     public void startLeafNode(final QName qName) {
145         writer.startStatement(Rfc6020Mapping.LEAF);
146         writer.writeArgument(qName);
147     }
148
149     @Override
150     public void startContainerNode(final QName qName) {
151         writer.startStatement(Rfc6020Mapping.CONTAINER);
152         writer.writeArgument(qName);
153     }
154
155     @Override
156     public void startGroupingNode(final QName qName) {
157         writer.startStatement(Rfc6020Mapping.GROUPING);
158         writer.writeArgument(qName);
159     }
160
161     @Override
162     public void startRpcNode(final QName qName) {
163         writer.startStatement(Rfc6020Mapping.RPC);
164         writer.writeArgument(qName);
165     }
166
167     @Override
168     public void startInputNode() {
169         writer.startStatement(Rfc6020Mapping.INPUT);
170     }
171
172     @Override
173     public void startOutputNode() {
174         writer.startStatement(Rfc6020Mapping.OUTPUT);
175     }
176
177     @Override
178     public void startLeafListNode(final QName qName) {
179         writer.startStatement(Rfc6020Mapping.LEAF_LIST);
180         writer.writeArgument(qName);
181     }
182
183     @Override
184     public void startListNode(final QName qName) {
185         writer.startStatement(Rfc6020Mapping.LIST);
186         writer.writeArgument(qName);
187     }
188
189     @Override
190     public void startChoiceNode(final QName qName) {
191         writer.startStatement(Rfc6020Mapping.CHOICE);
192         writer.writeArgument(qName);
193     }
194
195     @Override
196     public void startCaseNode(final QName qName) {
197         writer.startStatement(Rfc6020Mapping.CASE);
198         writer.writeArgument(qName);
199     }
200
201     @Override
202     public void startNotificationNode(final QName qName) {
203         writer.startStatement(Rfc6020Mapping.NOTIFICATION);
204         writer.writeArgument(qName);
205     }
206
207     @Override
208     public void startIdentityNode(final QName qName) {
209         writer.startStatement(Rfc6020Mapping.IDENTITY);
210         writer.writeArgument(qName);
211     }
212
213     @Override
214     public void startBaseNode(final QName qName) {
215         writer.startStatement(Rfc6020Mapping.BASE);
216         writer.writeArgument(qName);
217     }
218
219     @Override
220     public void startTypedefNode(final QName qName) {
221         writer.startStatement(Rfc6020Mapping.TYPEDEF);
222         writer.writeArgument(qName);
223     }
224
225     @Override
226     public void startRevisionNode(final Date date) {
227         writer.startStatement(Rfc6020Mapping.REVISION);
228         writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
229     }
230
231     @Override
232     public void startDefaultNode(final String string) {
233         writer.startStatement(Rfc6020Mapping.DEFAULT);
234         writer.writeArgument(string);
235     }
236
237     @Override
238     public void startMustNode(final RevisionAwareXPath xpath) {
239         writer.startStatement(Rfc6020Mapping.MUST);
240         writer.writeArgument(xpath);
241     }
242
243     @Override
244     public void startErrorMessageNode(final String input) {
245         writer.startStatement(Rfc6020Mapping.ERROR_MESSAGE);
246         writer.writeArgument(input);
247     }
248
249     @Override
250     public void startErrorAppTagNode(final String input) {
251         writer.startStatement(Rfc6020Mapping.ERROR_APP_TAG);
252         writer.writeArgument(input);
253     }
254
255     @Override
256     public void startPatternNode(final String regularExpression) {
257         writer.startStatement(Rfc6020Mapping.PATTERN);
258         writer.writeArgument(regularExpression);
259     }
260
261     @Override
262     public void startValueNode(final Integer integer) {
263         writer.startStatement(Rfc6020Mapping.VALUE);
264         writer.writeArgument(integer.toString());
265     }
266
267     @Override
268     public void startEnumNode(final String name) {
269         writer.startStatement(Rfc6020Mapping.ENUM);
270         writer.writeArgument(name);
271     }
272
273     @Override
274     public void startRequireInstanceNode(final boolean require) {
275         writer.startStatement(Rfc6020Mapping.REQUIRE_INSTANCE);
276         writer.writeArgument(Boolean.toString(require));
277     }
278
279     @Override
280     public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
281         writer.startStatement(Rfc6020Mapping.PATH);
282         writer.writeArgument(revisionAwareXPath);
283     }
284
285     @Override
286     public void startBitNode(final String name) {
287         writer.startStatement(Rfc6020Mapping.BIT);
288         writer.writeArgument(name);
289     }
290
291     @Override
292     public void startPositionNode(final UnsignedInteger position) {
293         writer.startStatement(Rfc6020Mapping.POSITION);
294         writer.writeArgument(position.toString());
295     }
296
297     @Override
298     public void startImportNode(final String moduleName) {
299         writer.startStatement(Rfc6020Mapping.IMPORT);
300         writer.writeArgument(moduleName);
301     }
302
303     @Override
304     public void startRevisionDateNode(final Date date) {
305         writer.startStatement(Rfc6020Mapping.REVISION_DATE);
306         writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
307     }
308
309     @Override
310     public void startUsesNode(final QName groupingName) {
311         writer.startStatement(Rfc6020Mapping.USES);
312         writer.writeArgument(groupingName);
313     }
314
315     @Override
316     public void startAugmentNode(final SchemaPath targetPath) {
317         writer.startStatement(Rfc6020Mapping.AUGMENT);
318         writer.writeArgument(targetPath);
319     }
320
321     @Override
322     public void startConfigNode(final boolean config) {
323         writer.startStatement(Rfc6020Mapping.CONFIG);
324         writer.writeArgument(Boolean.toString(config));
325     }
326
327     @Override
328     public void startLengthNode(final String lengthString) {
329         writer.startStatement(Rfc6020Mapping.LENGTH);
330         writer.writeArgument(lengthString);
331     }
332
333     @Override
334     public void startMaxElementsNode(final Integer max) {
335         writer.startStatement(Rfc6020Mapping.MAX_ELEMENTS);
336         writer.writeArgument(max.toString());
337     }
338
339     @Override
340     public void startMinElementsNode(final Integer min) {
341         writer.startStatement(Rfc6020Mapping.MIN_ELEMENTS);
342         writer.writeArgument(min.toString());
343     }
344
345     @Override
346     public void startPresenceNode(final boolean presence) {
347         writer.startStatement(Rfc6020Mapping.PRESENCE);
348         writer.writeArgument(Boolean.toString(presence));
349     }
350
351     @Override
352     public void startOrderedByNode(final String ordering) {
353         writer.startStatement(Rfc6020Mapping.ORDERED_BY);
354         writer.writeArgument(ordering);
355     }
356
357     @Override
358     public void startRangeNode(final String rangeString) {
359         writer.startStatement(Rfc6020Mapping.RANGE);
360         writer.writeArgument(rangeString);
361     }
362
363     @Override
364     public void startFractionDigitsNode(final Integer fractionDigits) {
365         writer.startStatement(Rfc6020Mapping.FRACTION_DIGITS);
366         writer.writeArgument(fractionDigits.toString());
367     }
368
369     @Override
370     public void startRefineNode(final SchemaPath path) {
371         writer.startStatement(Rfc6020Mapping.REFINE);
372         writer.writeArgument(path);
373     }
374
375     @Override
376     public void startMandatoryNode(final boolean mandatory) {
377         writer.startStatement(Rfc6020Mapping.MANDATORY);
378         writer.writeArgument(Boolean.toString(mandatory));
379     }
380
381     @Override
382     public void startAnyxmlNode(final QName qName) {
383         writer.startStatement(Rfc6020Mapping.ANYXML);
384         writer.writeArgument(qName);
385     }
386
387     @Override
388     public void startUnknownNode(final StatementDefinition def) {
389         writer.startStatement(def);
390     }
391
392     @Override
393     public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
394         writer.startStatement(def);
395         writer.writeArgument(nodeParameter);
396     }
397
398     @Override
399     public void startYinElementNode(final boolean yinElement) {
400         writer.startStatement(Rfc6020Mapping.YIN_ELEMENT);
401         writer.writeArgument(Boolean.toString(yinElement));
402     }
403
404     @Override
405     public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
406         writer.startStatement(Rfc6020Mapping.WHEN);
407         writer.writeArgument(revisionAwareXPath);
408     }
409 }