2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.yang.model.export;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.Iterables;
14 import com.google.common.primitives.UnsignedInteger;
16 import java.util.Collection;
17 import java.util.Iterator;
18 import java.util.List;
19 import javax.annotation.concurrent.NotThreadSafe;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.Revision;
22 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
23 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
24 import org.opendaylight.yangtools.yang.model.api.Status;
25 import org.opendaylight.yangtools.yang.model.api.UniqueConstraint;
26 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
27 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
28 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
29 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
34 final class SchemaToStatementWriterAdaptor implements YangModuleWriter {
36 private final StatementTextWriter writer;
38 private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
39 this.writer = requireNonNull(writer);
42 public static YangModuleWriter from(final StatementTextWriter writer) {
43 return new SchemaToStatementWriterAdaptor(writer);
47 public void endNode() {
48 writer.endStatement();
52 public void startActionNode(final QName qname) {
53 writer.startStatement(YangStmtMapping.ACTION);
54 writer.writeArgument(qname);
58 public void startActionNode(final String rawArgument) {
59 writer.startStatement(YangStmtMapping.ACTION);
60 writer.writeArgument(rawArgument);
64 public void startAnydataNode(final QName qname) {
65 writer.startStatement(YangStmtMapping.ANYDATA);
66 writer.writeArgument(qname);
70 public void startAnydataNode(final String rawArgument) {
71 writer.startStatement(YangStmtMapping.ANYDATA);
72 writer.writeArgument(rawArgument);
76 public void startAnyxmlNode(final QName qname) {
77 writer.startStatement(YangStmtMapping.ANYXML);
78 writer.writeArgument(qname);
82 public void startAnyxmlNode(final String rawArgument) {
83 writer.startStatement(YangStmtMapping.ANYXML);
84 writer.writeArgument(rawArgument);
88 public void startArgumentNode(final String input) {
89 writer.startStatement(YangStmtMapping.ARGUMENT);
90 writer.writeArgument(input);
94 public void startAugmentNode(final SchemaPath targetPath) {
95 writer.startStatement(YangStmtMapping.AUGMENT);
96 writer.writeArgument(targetPath);
100 public void startAugmentNode(final String rawArgument) {
101 writer.startStatement(YangStmtMapping.AUGMENT);
102 writer.writeArgument(rawArgument);
106 public void startBaseNode(final QName qname) {
107 writer.startStatement(YangStmtMapping.BASE);
108 writer.writeArgument(qname);
112 public void startBaseNode(final String rawArgument) {
113 writer.startStatement(YangStmtMapping.BASE);
114 writer.writeArgument(rawArgument);
118 public void startBelongsToNode(final String rawArgument) {
119 writer.startStatement(YangStmtMapping.BELONGS_TO);
120 writer.writeArgument(rawArgument);
124 public void startBitNode(final String name) {
125 writer.startStatement(YangStmtMapping.BIT);
126 writer.writeArgument(name);
130 public void startCaseNode(final QName qname) {
131 writer.startStatement(YangStmtMapping.CASE);
132 writer.writeArgument(qname);
136 public void startCaseNode(final String rawArgument) {
137 writer.startStatement(YangStmtMapping.CASE);
138 writer.writeArgument(rawArgument);
142 public void startChoiceNode(final QName qname) {
143 writer.startStatement(YangStmtMapping.CHOICE);
144 writer.writeArgument(qname);
148 public void startChoiceNode(final String rawArgument) {
149 writer.startStatement(YangStmtMapping.CHOICE);
150 writer.writeArgument(rawArgument);
154 public void startConfigNode(final boolean config) {
155 writer.startStatement(YangStmtMapping.CONFIG);
156 writer.writeArgument(Boolean.toString(config));
160 public void startConfigNode(final String rawArgument) {
161 writer.startStatement(YangStmtMapping.CONFIG);
162 writer.writeArgument(rawArgument);
166 public void startContactNode(final String input) {
167 writer.startStatement(YangStmtMapping.CONTACT);
168 writer.writeArgument(input);
172 public void startContainerNode(final QName qname) {
173 writer.startStatement(YangStmtMapping.CONTAINER);
174 writer.writeArgument(qname);
178 public void startContainerNode(final String rawArgument) {
179 writer.startStatement(YangStmtMapping.CONTAINER);
180 writer.writeArgument(rawArgument);
184 public void startDefaultNode(final String string) {
185 writer.startStatement(YangStmtMapping.DEFAULT);
186 writer.writeArgument(string);
190 public void startDescriptionNode(final String input) {
191 writer.startStatement(YangStmtMapping.DESCRIPTION);
192 writer.writeArgument(input);
196 public void startDeviateNode(final String rawArgument) {
197 writer.startStatement(YangStmtMapping.DEVIATE);
198 writer.writeArgument(rawArgument);
202 public void startDeviationNode(final String rawArgument) {
203 writer.startStatement(YangStmtMapping.DEVIATION);
204 writer.writeArgument(rawArgument);
208 public void startEnumNode(final String name) {
209 writer.startStatement(YangStmtMapping.ENUM);
210 writer.writeArgument(name);
214 public void startErrorAppTagNode(final String input) {
215 writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
216 writer.writeArgument(input);
220 public void startErrorMessageNode(final String input) {
221 writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
222 writer.writeArgument(input);
226 public void startExtensionNode(final QName qname) {
227 writer.startStatement(YangStmtMapping.EXTENSION);
228 writer.writeArgument(qname);
232 public void startExtensionNode(final String rawArgument) {
233 writer.startStatement(YangStmtMapping.EXTENSION);
234 writer.writeArgument(rawArgument);
238 public void startFeatureNode(final QName qname) {
239 writer.startStatement(YangStmtMapping.FEATURE);
240 writer.writeArgument(qname);
244 public void startFeatureNode(final String rawArgument) {
245 writer.startStatement(YangStmtMapping.FEATURE);
246 writer.writeArgument(rawArgument);
250 public void startFractionDigitsNode(final Integer fractionDigits) {
251 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
252 writer.writeArgument(fractionDigits.toString());
256 public void startFractionDigitsNode(final String rawArgument) {
257 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
258 writer.writeArgument(rawArgument);
262 public void startGroupingNode(final QName qname) {
263 writer.startStatement(YangStmtMapping.GROUPING);
264 writer.writeArgument(qname);
268 public void startGroupingNode(final String rawArgument) {
269 writer.startStatement(YangStmtMapping.GROUPING);
270 writer.writeArgument(rawArgument);
274 public void startIdentityNode(final QName qname) {
275 writer.startStatement(YangStmtMapping.IDENTITY);
276 writer.writeArgument(qname);
280 public void startIdentityNode(final String rawArgument) {
281 writer.startStatement(YangStmtMapping.IDENTITY);
282 writer.writeArgument(rawArgument);
286 public void startIfFeatureNode(final String rawArgument) {
287 writer.startStatement(YangStmtMapping.IF_FEATURE);
288 writer.writeArgument(rawArgument);
292 public void startImportNode(final String moduleName) {
293 writer.startStatement(YangStmtMapping.IMPORT);
294 writer.writeArgument(moduleName);
298 public void startIncludeNode(final String rawArgument) {
299 writer.startStatement(YangStmtMapping.INCLUDE);
300 writer.writeArgument(rawArgument);
304 public void startInputNode() {
305 writer.startStatement(YangStmtMapping.INPUT);
309 public void startKeyNode(final List<QName> keyList) {
310 writer.startStatement(YangStmtMapping.KEY);
311 final StringBuilder keyStr = new StringBuilder();
312 final Iterator<QName> iter = keyList.iterator();
313 while (iter.hasNext()) {
314 keyStr.append(iter.next().getLocalName());
315 if (iter.hasNext()) {
319 writer.writeArgument(keyStr.toString());
323 public void startKeyNode(final String rawArgument) {
324 writer.startStatement(YangStmtMapping.KEY);
325 writer.writeArgument(rawArgument);
329 public void startLeafListNode(final QName qname) {
330 writer.startStatement(YangStmtMapping.LEAF_LIST);
331 writer.writeArgument(qname);
335 public void startLeafListNode(final String rawArgument) {
336 writer.startStatement(YangStmtMapping.LEAF_LIST);
337 writer.writeArgument(rawArgument);
341 public void startLeafNode(final QName qname) {
342 writer.startStatement(YangStmtMapping.LEAF);
343 writer.writeArgument(qname);
347 public void startLeafNode(final String rawArgument) {
348 writer.startStatement(YangStmtMapping.LEAF);
349 writer.writeArgument(rawArgument);
353 public void startLengthNode(final String lengthString) {
354 writer.startStatement(YangStmtMapping.LENGTH);
355 writer.writeArgument(lengthString);
359 public void startListNode(final QName qname) {
360 writer.startStatement(YangStmtMapping.LIST);
361 writer.writeArgument(qname);
365 public void startListNode(final String rawArgument) {
366 writer.startStatement(YangStmtMapping.LIST);
367 writer.writeArgument(rawArgument);
371 public void startMandatoryNode(final boolean mandatory) {
372 writer.startStatement(YangStmtMapping.MANDATORY);
373 writer.writeArgument(Boolean.toString(mandatory));
377 public void startMandatoryNode(final String rawArgument) {
378 writer.startStatement(YangStmtMapping.MANDATORY);
379 writer.writeArgument(rawArgument);
383 public void startMaxElementsNode(final Integer max) {
384 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
385 writer.writeArgument(max.toString());
389 public void startMaxElementsNode(final String rawArgument) {
390 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
391 writer.writeArgument(rawArgument);
395 public void startMinElementsNode(final Integer min) {
396 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
397 writer.writeArgument(min.toString());
401 public void startMinElementsNode(final String rawArgument) {
402 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
403 writer.writeArgument(rawArgument);
407 public void startModifierNode(final ModifierKind modifier) {
408 writer.startStatement(YangStmtMapping.MODIFIER);
409 writer.writeArgument(modifier.getKeyword());
413 public void startModifierNode(final String rawArgument) {
414 writer.startStatement(YangStmtMapping.MODIFIER);
415 writer.writeArgument(rawArgument);
419 public void startModuleNode(final String identifier) {
420 writer.startStatement(YangStmtMapping.MODULE);
421 writer.writeArgument(identifier);
425 public void startMustNode(final RevisionAwareXPath xpath) {
426 writer.startStatement(YangStmtMapping.MUST);
427 writer.writeArgument(xpath);
431 public void startMustNode(final String rawArgument) {
432 writer.startStatement(YangStmtMapping.MUST);
433 writer.writeArgument(rawArgument);
437 public void startNamespaceNode(final URI uri) {
438 writer.startStatement(YangStmtMapping.NAMESPACE);
439 writer.writeArgument(uri.toString());
443 public void startNotificationNode(final QName qname) {
444 writer.startStatement(YangStmtMapping.NOTIFICATION);
445 writer.writeArgument(qname);
449 public void startNotificationNode(final String rawArgument) {
450 writer.startStatement(YangStmtMapping.NOTIFICATION);
451 writer.writeArgument(rawArgument);
455 public void startOrderedByNode(final String ordering) {
456 writer.startStatement(YangStmtMapping.ORDERED_BY);
457 writer.writeArgument(ordering);
461 public void startOrganizationNode(final String input) {
462 writer.startStatement(YangStmtMapping.ORGANIZATION);
463 writer.writeArgument(input);
467 public void startOutputNode() {
468 writer.startStatement(YangStmtMapping.OUTPUT);
472 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
473 writer.startStatement(YangStmtMapping.PATH);
474 writer.writeArgument(revisionAwareXPath);
478 public void startPathNode(final String rawArgument) {
479 writer.startStatement(YangStmtMapping.PATH);
480 writer.writeArgument(rawArgument);
484 public void startPatternNode(final String regularExpression) {
485 writer.startStatement(YangStmtMapping.PATTERN);
486 writer.writeArgument(regularExpression);
490 public void startPositionNode(final UnsignedInteger position) {
491 writer.startStatement(YangStmtMapping.POSITION);
492 writer.writeArgument(position.toString());
496 public void startPositionNode(final String rawArgument) {
497 writer.startStatement(YangStmtMapping.POSITION);
498 writer.writeArgument(rawArgument);
502 public void startPrefixNode(final String input) {
503 writer.startStatement(YangStmtMapping.PREFIX);
504 writer.writeArgument(input);
508 public void startPresenceNode(final boolean presence) {
509 writer.startStatement(YangStmtMapping.PRESENCE);
510 writer.writeArgument(Boolean.toString(presence));
514 public void startPresenceNode(final String rawArgument) {
515 writer.startStatement(YangStmtMapping.PRESENCE);
516 writer.writeArgument(rawArgument);
520 public void startRangeNode(final String rangeString) {
521 writer.startStatement(YangStmtMapping.RANGE);
522 writer.writeArgument(rangeString);
526 public void startReferenceNode(final String input) {
527 writer.startStatement(YangStmtMapping.REFERENCE);
528 writer.writeArgument(input);
532 public void startRefineNode(final SchemaPath path) {
533 writer.startStatement(YangStmtMapping.REFINE);
534 writer.writeArgument(path);
538 public void startRefineNode(final String rawArgument) {
539 writer.startStatement(YangStmtMapping.REFINE);
540 writer.writeArgument(rawArgument);
544 public void startRequireInstanceNode(final boolean require) {
545 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
546 writer.writeArgument(Boolean.toString(require));
550 public void startRequireInstanceNode(final String rawArgument) {
551 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
552 writer.writeArgument(rawArgument);
556 public void startRevisionDateNode(final Revision date) {
557 writer.startStatement(YangStmtMapping.REVISION_DATE);
558 writer.writeArgument(date.toString());
562 public void startRevisionDateNode(final String rawArgument) {
563 writer.startStatement(YangStmtMapping.REVISION_DATE);
564 writer.writeArgument(rawArgument);
568 public void startRevisionNode(final Revision date) {
569 writer.startStatement(YangStmtMapping.REVISION);
570 writer.writeArgument(date.toString());
574 public void startRevisionNode(final String rawArgument) {
575 writer.startStatement(YangStmtMapping.REVISION);
576 writer.writeArgument(rawArgument);
580 public void startRpcNode(final QName qname) {
581 writer.startStatement(YangStmtMapping.RPC);
582 writer.writeArgument(qname);
586 public void startRpcNode(final String rawArgument) {
587 writer.startStatement(YangStmtMapping.RPC);
588 writer.writeArgument(rawArgument);
592 public void startStatusNode(final Status status) {
593 writer.startStatement(YangStmtMapping.STATUS);
594 writer.writeArgument(status.toString().toLowerCase());
598 public void startStatusNode(final String rawArgument) {
599 writer.startStatement(YangStmtMapping.STATUS);
600 writer.writeArgument(rawArgument);
604 public void startSubmoduleNode(final String rawArgument) {
605 writer.startStatement(YangStmtMapping.SUBMODULE);
606 writer.writeArgument(rawArgument);
610 public void startTypeNode(final QName qname) {
611 writer.startStatement(YangStmtMapping.TYPE);
612 writer.writeArgument(qname);
616 public void startTypeNode(final String rawArgument) {
617 writer.startStatement(YangStmtMapping.TYPE);
618 writer.writeArgument(rawArgument);
622 public void startTypedefNode(final QName qname) {
623 writer.startStatement(YangStmtMapping.TYPEDEF);
624 writer.writeArgument(qname);
628 public void startTypedefNode(final String rawArgument) {
629 writer.startStatement(YangStmtMapping.TYPEDEF);
630 writer.writeArgument(rawArgument);
634 public void startUniqueNode(final UniqueConstraint uniqueConstraint) {
635 writer.startStatement(YangStmtMapping.UNIQUE);
636 final StringBuilder uniqueStr = new StringBuilder();
637 final Collection<Relative> tag = uniqueConstraint.getTag();
639 final Iterator<Relative> iter = tag.iterator();
640 while (iter.hasNext()) {
642 String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName())));
643 if (iter.hasNext()) {
644 uniqueStr.append(' ');
647 writer.writeArgument(uniqueStr.toString());
651 public void startUniqueNode(final String rawArgument) {
652 writer.startStatement(YangStmtMapping.UNIQUE);
653 writer.writeArgument(rawArgument);
657 public void startUnitsNode(final String input) {
658 writer.startStatement(YangStmtMapping.UNITS);
659 writer.writeArgument(input);
663 public void startUnknownNode(final StatementDefinition def) {
664 writer.startStatement(def);
668 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
669 writer.startStatement(def);
670 writer.writeArgument(nodeParameter);
674 public void startUsesNode(final QName groupingName) {
675 writer.startStatement(YangStmtMapping.USES);
676 writer.writeArgument(groupingName);
680 public void startUsesNode(final String rawArgument) {
681 writer.startStatement(YangStmtMapping.USES);
682 writer.writeArgument(rawArgument);
686 public void startValueNode(final Integer integer) {
687 writer.startStatement(YangStmtMapping.VALUE);
688 writer.writeArgument(integer.toString());
692 public void startValueNode(final String rawArgument) {
693 writer.startStatement(YangStmtMapping.VALUE);
694 writer.writeArgument(rawArgument);
698 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
699 writer.startStatement(YangStmtMapping.WHEN);
700 writer.writeArgument(revisionAwareXPath);
704 public void startWhenNode(final String rawArgument) {
705 writer.startStatement(YangStmtMapping.WHEN);
706 writer.writeArgument(rawArgument);
710 public void startYangVersionNode(final String input) {
711 writer.startStatement(YangStmtMapping.YANG_VERSION);
712 writer.writeArgument(input);
716 public void startYinElementNode(final boolean yinElement) {
717 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
718 writer.writeArgument(Boolean.toString(yinElement));
722 public void startYinElementNode(final String rawArgument) {
723 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
724 writer.writeArgument(rawArgument);