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 com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.Iterables;
13 import com.google.common.primitives.UnsignedInteger;
15 import java.util.Collection;
16 import java.util.Iterator;
17 import java.util.List;
18 import javax.annotation.concurrent.NotThreadSafe;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.common.Revision;
21 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
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.UniqueConstraint;
25 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
26 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
27 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
28 import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
33 final class SchemaToStatementWriterAdaptor implements YangModuleWriter {
35 private final StatementTextWriter writer;
37 private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
38 this.writer = Preconditions.checkNotNull(writer);
41 public static YangModuleWriter from(final StatementTextWriter writer) {
42 return new SchemaToStatementWriterAdaptor(writer);
46 public void endNode() {
47 writer.endStatement();
51 public void startActionNode(final QName qname) {
52 writer.startStatement(YangStmtMapping.ACTION);
53 writer.writeArgument(qname);
57 public void startActionNode(final String rawArgument) {
58 writer.startStatement(YangStmtMapping.ACTION);
59 writer.writeArgument(rawArgument);
63 public void startAnydataNode(final QName qname) {
64 writer.startStatement(YangStmtMapping.ANYDATA);
65 writer.writeArgument(qname);
69 public void startAnydataNode(final String rawArgument) {
70 writer.startStatement(YangStmtMapping.ANYDATA);
71 writer.writeArgument(rawArgument);
75 public void startAnyxmlNode(final QName qname) {
76 writer.startStatement(YangStmtMapping.ANYXML);
77 writer.writeArgument(qname);
81 public void startAnyxmlNode(final String rawArgument) {
82 writer.startStatement(YangStmtMapping.ANYXML);
83 writer.writeArgument(rawArgument);
87 public void startArgumentNode(final String input) {
88 writer.startStatement(YangStmtMapping.ARGUMENT);
89 writer.writeArgument(input);
93 public void startAugmentNode(final SchemaPath targetPath) {
94 writer.startStatement(YangStmtMapping.AUGMENT);
95 writer.writeArgument(targetPath);
99 public void startAugmentNode(final String rawArgument) {
100 writer.startStatement(YangStmtMapping.AUGMENT);
101 writer.writeArgument(rawArgument);
105 public void startBaseNode(final QName qname) {
106 writer.startStatement(YangStmtMapping.BASE);
107 writer.writeArgument(qname);
111 public void startBaseNode(final String rawArgument) {
112 writer.startStatement(YangStmtMapping.BASE);
113 writer.writeArgument(rawArgument);
117 public void startBelongsToNode(final String rawArgument) {
118 writer.startStatement(YangStmtMapping.BELONGS_TO);
119 writer.writeArgument(rawArgument);
123 public void startBitNode(final String name) {
124 writer.startStatement(YangStmtMapping.BIT);
125 writer.writeArgument(name);
129 public void startCaseNode(final QName qname) {
130 writer.startStatement(YangStmtMapping.CASE);
131 writer.writeArgument(qname);
135 public void startCaseNode(final String rawArgument) {
136 writer.startStatement(YangStmtMapping.CASE);
137 writer.writeArgument(rawArgument);
141 public void startChoiceNode(final QName qname) {
142 writer.startStatement(YangStmtMapping.CHOICE);
143 writer.writeArgument(qname);
147 public void startChoiceNode(final String rawArgument) {
148 writer.startStatement(YangStmtMapping.CHOICE);
149 writer.writeArgument(rawArgument);
153 public void startConfigNode(final boolean config) {
154 writer.startStatement(YangStmtMapping.CONFIG);
155 writer.writeArgument(Boolean.toString(config));
159 public void startConfigNode(final String rawArgument) {
160 writer.startStatement(YangStmtMapping.CONFIG);
161 writer.writeArgument(rawArgument);
165 public void startContactNode(final String input) {
166 writer.startStatement(YangStmtMapping.CONTACT);
167 writer.writeArgument(input);
171 public void startContainerNode(final QName qname) {
172 writer.startStatement(YangStmtMapping.CONTAINER);
173 writer.writeArgument(qname);
177 public void startContainerNode(final String rawArgument) {
178 writer.startStatement(YangStmtMapping.CONTAINER);
179 writer.writeArgument(rawArgument);
183 public void startDefaultNode(final String string) {
184 writer.startStatement(YangStmtMapping.DEFAULT);
185 writer.writeArgument(string);
189 public void startDescriptionNode(final String input) {
190 writer.startStatement(YangStmtMapping.DESCRIPTION);
191 writer.writeArgument(input);
195 public void startDeviateNode(final String rawArgument) {
196 writer.startStatement(YangStmtMapping.DEVIATE);
197 writer.writeArgument(rawArgument);
201 public void startDeviationNode(final String rawArgument) {
202 writer.startStatement(YangStmtMapping.DEVIATION);
203 writer.writeArgument(rawArgument);
207 public void startEnumNode(final String name) {
208 writer.startStatement(YangStmtMapping.ENUM);
209 writer.writeArgument(name);
213 public void startErrorAppTagNode(final String input) {
214 writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
215 writer.writeArgument(input);
219 public void startErrorMessageNode(final String input) {
220 writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
221 writer.writeArgument(input);
225 public void startExtensionNode(final QName qname) {
226 writer.startStatement(YangStmtMapping.EXTENSION);
227 writer.writeArgument(qname);
231 public void startExtensionNode(final String rawArgument) {
232 writer.startStatement(YangStmtMapping.EXTENSION);
233 writer.writeArgument(rawArgument);
237 public void startFeatureNode(final QName qname) {
238 writer.startStatement(YangStmtMapping.FEATURE);
239 writer.writeArgument(qname);
243 public void startFeatureNode(final String rawArgument) {
244 writer.startStatement(YangStmtMapping.FEATURE);
245 writer.writeArgument(rawArgument);
249 public void startFractionDigitsNode(final Integer fractionDigits) {
250 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
251 writer.writeArgument(fractionDigits.toString());
255 public void startFractionDigitsNode(final String rawArgument) {
256 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
257 writer.writeArgument(rawArgument);
261 public void startGroupingNode(final QName qname) {
262 writer.startStatement(YangStmtMapping.GROUPING);
263 writer.writeArgument(qname);
267 public void startGroupingNode(final String rawArgument) {
268 writer.startStatement(YangStmtMapping.GROUPING);
269 writer.writeArgument(rawArgument);
273 public void startIdentityNode(final QName qname) {
274 writer.startStatement(YangStmtMapping.IDENTITY);
275 writer.writeArgument(qname);
279 public void startIdentityNode(final String rawArgument) {
280 writer.startStatement(YangStmtMapping.IDENTITY);
281 writer.writeArgument(rawArgument);
285 public void startIfFeatureNode(final String rawArgument) {
286 writer.startStatement(YangStmtMapping.IF_FEATURE);
287 writer.writeArgument(rawArgument);
291 public void startImportNode(final String moduleName) {
292 writer.startStatement(YangStmtMapping.IMPORT);
293 writer.writeArgument(moduleName);
297 public void startIncludeNode(final String rawArgument) {
298 writer.startStatement(YangStmtMapping.INCLUDE);
299 writer.writeArgument(rawArgument);
303 public void startInputNode() {
304 writer.startStatement(YangStmtMapping.INPUT);
308 public void startKeyNode(final List<QName> keyList) {
309 writer.startStatement(YangStmtMapping.KEY);
310 final StringBuilder keyStr = new StringBuilder();
311 final Iterator<QName> iter = keyList.iterator();
312 while (iter.hasNext()) {
313 keyStr.append(iter.next().getLocalName());
314 if (iter.hasNext()) {
318 writer.writeArgument(keyStr.toString());
322 public void startKeyNode(final String rawArgument) {
323 writer.startStatement(YangStmtMapping.KEY);
324 writer.writeArgument(rawArgument);
328 public void startLeafListNode(final QName qname) {
329 writer.startStatement(YangStmtMapping.LEAF_LIST);
330 writer.writeArgument(qname);
334 public void startLeafListNode(final String rawArgument) {
335 writer.startStatement(YangStmtMapping.LEAF_LIST);
336 writer.writeArgument(rawArgument);
340 public void startLeafNode(final QName qname) {
341 writer.startStatement(YangStmtMapping.LEAF);
342 writer.writeArgument(qname);
346 public void startLeafNode(final String rawArgument) {
347 writer.startStatement(YangStmtMapping.LEAF);
348 writer.writeArgument(rawArgument);
352 public void startLengthNode(final String lengthString) {
353 writer.startStatement(YangStmtMapping.LENGTH);
354 writer.writeArgument(lengthString);
358 public void startListNode(final QName qname) {
359 writer.startStatement(YangStmtMapping.LIST);
360 writer.writeArgument(qname);
364 public void startListNode(final String rawArgument) {
365 writer.startStatement(YangStmtMapping.LIST);
366 writer.writeArgument(rawArgument);
370 public void startMandatoryNode(final boolean mandatory) {
371 writer.startStatement(YangStmtMapping.MANDATORY);
372 writer.writeArgument(Boolean.toString(mandatory));
376 public void startMandatoryNode(final String rawArgument) {
377 writer.startStatement(YangStmtMapping.MANDATORY);
378 writer.writeArgument(rawArgument);
382 public void startMaxElementsNode(final Integer max) {
383 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
384 writer.writeArgument(max.toString());
388 public void startMaxElementsNode(final String rawArgument) {
389 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
390 writer.writeArgument(rawArgument);
394 public void startMinElementsNode(final Integer min) {
395 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
396 writer.writeArgument(min.toString());
400 public void startMinElementsNode(final String rawArgument) {
401 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
402 writer.writeArgument(rawArgument);
406 public void startModifierNode(final ModifierKind modifier) {
407 writer.startStatement(YangStmtMapping.MODIFIER);
408 writer.writeArgument(modifier.getKeyword());
412 public void startModifierNode(final String rawArgument) {
413 writer.startStatement(YangStmtMapping.MODIFIER);
414 writer.writeArgument(rawArgument);
418 public void startModuleNode(final String identifier) {
419 writer.startStatement(YangStmtMapping.MODULE);
420 writer.writeArgument(identifier);
424 public void startMustNode(final RevisionAwareXPath xpath) {
425 writer.startStatement(YangStmtMapping.MUST);
426 writer.writeArgument(xpath);
430 public void startMustNode(final String rawArgument) {
431 writer.startStatement(YangStmtMapping.MUST);
432 writer.writeArgument(rawArgument);
436 public void startNamespaceNode(final URI uri) {
437 writer.startStatement(YangStmtMapping.NAMESPACE);
438 writer.writeArgument(uri.toString());
442 public void startNotificationNode(final QName qname) {
443 writer.startStatement(YangStmtMapping.NOTIFICATION);
444 writer.writeArgument(qname);
448 public void startNotificationNode(final String rawArgument) {
449 writer.startStatement(YangStmtMapping.NOTIFICATION);
450 writer.writeArgument(rawArgument);
454 public void startOrderedByNode(final String ordering) {
455 writer.startStatement(YangStmtMapping.ORDERED_BY);
456 writer.writeArgument(ordering);
460 public void startOrganizationNode(final String input) {
461 writer.startStatement(YangStmtMapping.ORGANIZATION);
462 writer.writeArgument(input);
466 public void startOutputNode() {
467 writer.startStatement(YangStmtMapping.OUTPUT);
471 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
472 writer.startStatement(YangStmtMapping.PATH);
473 writer.writeArgument(revisionAwareXPath);
477 public void startPathNode(final String rawArgument) {
478 writer.startStatement(YangStmtMapping.PATH);
479 writer.writeArgument(rawArgument);
483 public void startPatternNode(final String regularExpression) {
484 writer.startStatement(YangStmtMapping.PATTERN);
485 writer.writeArgument(regularExpression);
489 public void startPositionNode(final UnsignedInteger position) {
490 writer.startStatement(YangStmtMapping.POSITION);
491 writer.writeArgument(position.toString());
495 public void startPositionNode(final String rawArgument) {
496 writer.startStatement(YangStmtMapping.POSITION);
497 writer.writeArgument(rawArgument);
501 public void startPrefixNode(final String input) {
502 writer.startStatement(YangStmtMapping.PREFIX);
503 writer.writeArgument(input);
507 public void startPresenceNode(final boolean presence) {
508 writer.startStatement(YangStmtMapping.PRESENCE);
509 writer.writeArgument(Boolean.toString(presence));
513 public void startPresenceNode(final String rawArgument) {
514 writer.startStatement(YangStmtMapping.PRESENCE);
515 writer.writeArgument(rawArgument);
519 public void startRangeNode(final String rangeString) {
520 writer.startStatement(YangStmtMapping.RANGE);
521 writer.writeArgument(rangeString);
525 public void startReferenceNode(final String input) {
526 writer.startStatement(YangStmtMapping.REFERENCE);
527 writer.writeArgument(input);
531 public void startRefineNode(final SchemaPath path) {
532 writer.startStatement(YangStmtMapping.REFINE);
533 writer.writeArgument(path);
537 public void startRefineNode(final String rawArgument) {
538 writer.startStatement(YangStmtMapping.REFINE);
539 writer.writeArgument(rawArgument);
543 public void startRequireInstanceNode(final boolean require) {
544 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
545 writer.writeArgument(Boolean.toString(require));
549 public void startRequireInstanceNode(final String rawArgument) {
550 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
551 writer.writeArgument(rawArgument);
555 public void startRevisionDateNode(final Revision date) {
556 writer.startStatement(YangStmtMapping.REVISION_DATE);
557 writer.writeArgument(date.toString());
561 public void startRevisionDateNode(final String rawArgument) {
562 writer.startStatement(YangStmtMapping.REVISION_DATE);
563 writer.writeArgument(rawArgument);
567 public void startRevisionNode(final Revision date) {
568 writer.startStatement(YangStmtMapping.REVISION);
569 writer.writeArgument(date.toString());
573 public void startRevisionNode(final String rawArgument) {
574 writer.startStatement(YangStmtMapping.REVISION);
575 writer.writeArgument(rawArgument);
579 public void startRpcNode(final QName qname) {
580 writer.startStatement(YangStmtMapping.RPC);
581 writer.writeArgument(qname);
585 public void startRpcNode(final String rawArgument) {
586 writer.startStatement(YangStmtMapping.RPC);
587 writer.writeArgument(rawArgument);
591 public void startStatusNode(final Status status) {
592 writer.startStatement(YangStmtMapping.STATUS);
593 writer.writeArgument(status.toString().toLowerCase());
597 public void startStatusNode(final String rawArgument) {
598 writer.startStatement(YangStmtMapping.STATUS);
599 writer.writeArgument(rawArgument);
603 public void startSubmoduleNode(final String rawArgument) {
604 writer.startStatement(YangStmtMapping.SUBMODULE);
605 writer.writeArgument(rawArgument);
609 public void startTypeNode(final QName qname) {
610 writer.startStatement(YangStmtMapping.TYPE);
611 writer.writeArgument(qname);
615 public void startTypeNode(final String rawArgument) {
616 writer.startStatement(YangStmtMapping.TYPE);
617 writer.writeArgument(rawArgument);
621 public void startTypedefNode(final QName qname) {
622 writer.startStatement(YangStmtMapping.TYPEDEF);
623 writer.writeArgument(qname);
627 public void startTypedefNode(final String rawArgument) {
628 writer.startStatement(YangStmtMapping.TYPEDEF);
629 writer.writeArgument(rawArgument);
633 public void startUniqueNode(final UniqueConstraint uniqueConstraint) {
634 writer.startStatement(YangStmtMapping.UNIQUE);
635 final StringBuilder uniqueStr = new StringBuilder();
636 final Collection<Relative> tag = uniqueConstraint.getTag();
638 final Iterator<Relative> iter = tag.iterator();
639 while (iter.hasNext()) {
641 String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName())));
642 if (iter.hasNext()) {
643 uniqueStr.append(' ');
646 writer.writeArgument(uniqueStr.toString());
650 public void startUniqueNode(final String rawArgument) {
651 writer.startStatement(YangStmtMapping.UNIQUE);
652 writer.writeArgument(rawArgument);
656 public void startUnitsNode(final String input) {
657 writer.startStatement(YangStmtMapping.UNITS);
658 writer.writeArgument(input);
662 public void startUnknownNode(final StatementDefinition def) {
663 writer.startStatement(def);
667 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
668 writer.startStatement(def);
669 writer.writeArgument(nodeParameter);
673 public void startUsesNode(final QName groupingName) {
674 writer.startStatement(YangStmtMapping.USES);
675 writer.writeArgument(groupingName);
679 public void startUsesNode(final String rawArgument) {
680 writer.startStatement(YangStmtMapping.USES);
681 writer.writeArgument(rawArgument);
685 public void startValueNode(final Integer integer) {
686 writer.startStatement(YangStmtMapping.VALUE);
687 writer.writeArgument(integer.toString());
691 public void startValueNode(final String rawArgument) {
692 writer.startStatement(YangStmtMapping.VALUE);
693 writer.writeArgument(rawArgument);
697 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
698 writer.startStatement(YangStmtMapping.WHEN);
699 writer.writeArgument(revisionAwareXPath);
703 public void startWhenNode(final String rawArgument) {
704 writer.startStatement(YangStmtMapping.WHEN);
705 writer.writeArgument(rawArgument);
709 public void startYangVersionNode(final String input) {
710 writer.startStatement(YangStmtMapping.YANG_VERSION);
711 writer.writeArgument(input);
715 public void startYinElementNode(final boolean yinElement) {
716 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
717 writer.writeArgument(Boolean.toString(yinElement));
721 public void startYinElementNode(final String rawArgument) {
722 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
723 writer.writeArgument(rawArgument);