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;
32 final class SchemaToStatementWriterAdaptor implements YangModuleWriter {
34 private final StatementTextWriter writer;
36 private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
37 this.writer = Preconditions.checkNotNull(writer);
40 public static YangModuleWriter from(final StatementTextWriter writer) {
41 return new SchemaToStatementWriterAdaptor(writer);
45 public void endNode() {
46 writer.endStatement();
50 public void startModuleNode(final String identifier) {
51 writer.startStatement(YangStmtMapping.MODULE);
52 writer.writeArgument(identifier);
56 public void startOrganizationNode(final String input) {
57 writer.startStatement(YangStmtMapping.ORGANIZATION);
58 writer.writeArgument(input);
62 public void startContactNode(final String input) {
63 writer.startStatement(YangStmtMapping.CONTACT);
64 writer.writeArgument(input);
68 public void startDescriptionNode(final String input) {
69 writer.startStatement(YangStmtMapping.DESCRIPTION);
70 writer.writeArgument(input);
74 public void startReferenceNode(final String input) {
75 writer.startStatement(YangStmtMapping.REFERENCE);
76 writer.writeArgument(input);
80 public void startUnitsNode(final String input) {
81 writer.startStatement(YangStmtMapping.UNITS);
82 writer.writeArgument(input);
86 public void startYangVersionNode(final String input) {
87 writer.startStatement(YangStmtMapping.YANG_VERSION);
88 writer.writeArgument(input);
92 public void startNamespaceNode(final URI uri) {
93 writer.startStatement(YangStmtMapping.NAMESPACE);
94 writer.writeArgument(uri.toString());
98 public void startKeyNode(final List<QName> keyList) {
99 writer.startStatement(YangStmtMapping.KEY);
100 final StringBuilder keyStr = new StringBuilder();
101 final Iterator<QName> iter = keyList.iterator();
102 while (iter.hasNext()) {
103 keyStr.append(iter.next().getLocalName());
104 if (iter.hasNext()) {
108 writer.writeArgument(keyStr.toString());
112 public void startPrefixNode(final String input) {
113 writer.startStatement(YangStmtMapping.PREFIX);
114 writer.writeArgument(input);
118 public void startFeatureNode(final QName qName) {
119 writer.startStatement(YangStmtMapping.FEATURE);
120 writer.writeArgument(qName);
124 public void startExtensionNode(final QName qName) {
125 writer.startStatement(YangStmtMapping.EXTENSION);
126 writer.writeArgument(qName);
130 public void startArgumentNode(final String input) {
131 writer.startStatement(YangStmtMapping.ARGUMENT);
132 writer.writeArgument(input);
136 public void startStatusNode(final Status status) {
137 writer.startStatement(YangStmtMapping.STATUS);
138 writer.writeArgument(status.toString().toLowerCase());
142 public void startTypeNode(final QName qName) {
143 writer.startStatement(YangStmtMapping.TYPE);
144 writer.writeArgument(qName);
148 public void startLeafNode(final QName qName) {
149 writer.startStatement(YangStmtMapping.LEAF);
150 writer.writeArgument(qName);
154 public void startContainerNode(final QName qName) {
155 writer.startStatement(YangStmtMapping.CONTAINER);
156 writer.writeArgument(qName);
160 public void startGroupingNode(final QName qName) {
161 writer.startStatement(YangStmtMapping.GROUPING);
162 writer.writeArgument(qName);
166 public void startRpcNode(final QName qName) {
167 writer.startStatement(YangStmtMapping.RPC);
168 writer.writeArgument(qName);
172 public void startInputNode() {
173 writer.startStatement(YangStmtMapping.INPUT);
177 public void startOutputNode() {
178 writer.startStatement(YangStmtMapping.OUTPUT);
182 public void startLeafListNode(final QName qName) {
183 writer.startStatement(YangStmtMapping.LEAF_LIST);
184 writer.writeArgument(qName);
188 public void startListNode(final QName qName) {
189 writer.startStatement(YangStmtMapping.LIST);
190 writer.writeArgument(qName);
194 public void startChoiceNode(final QName qName) {
195 writer.startStatement(YangStmtMapping.CHOICE);
196 writer.writeArgument(qName);
200 public void startCaseNode(final QName qName) {
201 writer.startStatement(YangStmtMapping.CASE);
202 writer.writeArgument(qName);
206 public void startNotificationNode(final QName qName) {
207 writer.startStatement(YangStmtMapping.NOTIFICATION);
208 writer.writeArgument(qName);
212 public void startIdentityNode(final QName qName) {
213 writer.startStatement(YangStmtMapping.IDENTITY);
214 writer.writeArgument(qName);
218 public void startBaseNode(final QName qName) {
219 writer.startStatement(YangStmtMapping.BASE);
220 writer.writeArgument(qName);
224 public void startTypedefNode(final QName qName) {
225 writer.startStatement(YangStmtMapping.TYPEDEF);
226 writer.writeArgument(qName);
230 public void startRevisionNode(final Revision date) {
231 writer.startStatement(YangStmtMapping.REVISION);
232 writer.writeArgument(date.toString());
236 public void startDefaultNode(final String string) {
237 writer.startStatement(YangStmtMapping.DEFAULT);
238 writer.writeArgument(string);
242 public void startMustNode(final RevisionAwareXPath xpath) {
243 writer.startStatement(YangStmtMapping.MUST);
244 writer.writeArgument(xpath);
248 public void startErrorMessageNode(final String input) {
249 writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
250 writer.writeArgument(input);
254 public void startErrorAppTagNode(final String input) {
255 writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
256 writer.writeArgument(input);
260 public void startPatternNode(final String regularExpression) {
261 writer.startStatement(YangStmtMapping.PATTERN);
262 writer.writeArgument(regularExpression);
266 public void startValueNode(final Integer integer) {
267 writer.startStatement(YangStmtMapping.VALUE);
268 writer.writeArgument(integer.toString());
272 public void startEnumNode(final String name) {
273 writer.startStatement(YangStmtMapping.ENUM);
274 writer.writeArgument(name);
278 public void startRequireInstanceNode(final boolean require) {
279 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
280 writer.writeArgument(Boolean.toString(require));
284 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
285 writer.startStatement(YangStmtMapping.PATH);
286 writer.writeArgument(revisionAwareXPath);
290 public void startBitNode(final String name) {
291 writer.startStatement(YangStmtMapping.BIT);
292 writer.writeArgument(name);
296 public void startPositionNode(final UnsignedInteger position) {
297 writer.startStatement(YangStmtMapping.POSITION);
298 writer.writeArgument(position.toString());
302 public void startImportNode(final String moduleName) {
303 writer.startStatement(YangStmtMapping.IMPORT);
304 writer.writeArgument(moduleName);
308 public void startRevisionDateNode(final Revision date) {
309 writer.startStatement(YangStmtMapping.REVISION_DATE);
310 writer.writeArgument(date.toString());
314 public void startUsesNode(final QName groupingName) {
315 writer.startStatement(YangStmtMapping.USES);
316 writer.writeArgument(groupingName);
320 public void startAugmentNode(final SchemaPath targetPath) {
321 writer.startStatement(YangStmtMapping.AUGMENT);
322 writer.writeArgument(targetPath);
326 public void startConfigNode(final boolean config) {
327 writer.startStatement(YangStmtMapping.CONFIG);
328 writer.writeArgument(Boolean.toString(config));
332 public void startLengthNode(final String lengthString) {
333 writer.startStatement(YangStmtMapping.LENGTH);
334 writer.writeArgument(lengthString);
338 public void startMaxElementsNode(final Integer max) {
339 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
340 writer.writeArgument(max.toString());
344 public void startMinElementsNode(final Integer min) {
345 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
346 writer.writeArgument(min.toString());
350 public void startPresenceNode(final boolean presence) {
351 writer.startStatement(YangStmtMapping.PRESENCE);
352 writer.writeArgument(Boolean.toString(presence));
356 public void startOrderedByNode(final String ordering) {
357 writer.startStatement(YangStmtMapping.ORDERED_BY);
358 writer.writeArgument(ordering);
362 public void startRangeNode(final String rangeString) {
363 writer.startStatement(YangStmtMapping.RANGE);
364 writer.writeArgument(rangeString);
368 public void startFractionDigitsNode(final Integer fractionDigits) {
369 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
370 writer.writeArgument(fractionDigits.toString());
374 public void startRefineNode(final SchemaPath path) {
375 writer.startStatement(YangStmtMapping.REFINE);
376 writer.writeArgument(path);
380 public void startMandatoryNode(final boolean mandatory) {
381 writer.startStatement(YangStmtMapping.MANDATORY);
382 writer.writeArgument(Boolean.toString(mandatory));
386 public void startAnyxmlNode(final QName qName) {
387 writer.startStatement(YangStmtMapping.ANYXML);
388 writer.writeArgument(qName);
392 public void startUnknownNode(final StatementDefinition def) {
393 writer.startStatement(def);
397 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
398 writer.startStatement(def);
399 writer.writeArgument(nodeParameter);
403 public void startYinElementNode(final boolean yinElement) {
404 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
405 writer.writeArgument(Boolean.toString(yinElement));
409 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
410 writer.startStatement(YangStmtMapping.WHEN);
411 writer.writeArgument(revisionAwareXPath);
415 public void startAnydataNode(final QName qName) {
416 writer.startStatement(YangStmtMapping.ANYDATA);
417 writer.writeArgument(qName);
421 public void startActionNode(final QName qName) {
422 writer.startStatement(YangStmtMapping.ACTION);
423 writer.writeArgument(qName);
427 public void startModifierNode(final ModifierKind modifier) {
428 writer.startStatement(YangStmtMapping.MODIFIER);
429 writer.writeArgument(modifier.getKeyword());
433 public void startUniqueNode(final UniqueConstraint uniqueConstraint) {
434 writer.startStatement(YangStmtMapping.UNIQUE);
435 final StringBuilder uniqueStr = new StringBuilder();
436 final Collection<Relative> tag = uniqueConstraint.getTag();
438 final Iterator<Relative> iter = tag.iterator();
439 while (iter.hasNext()) {
441 String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName())));
442 if (iter.hasNext()) {
443 uniqueStr.append(' ');
446 writer.writeArgument(uniqueStr.toString());
450 public void startRevisionNode(final String rawArgument) {
451 writer.startStatement(YangStmtMapping.REVISION);
452 writer.writeArgument(rawArgument);
456 public void startRevisionDateNode(final String rawArgument) {
457 writer.startStatement(YangStmtMapping.REVISION_DATE);
458 writer.writeArgument(rawArgument);
462 public void startExtensionNode(final String rawArgument) {
463 writer.startStatement(YangStmtMapping.EXTENSION);
464 writer.writeArgument(rawArgument);
468 public void startBaseNode(final String rawArgument) {
469 writer.startStatement(YangStmtMapping.BASE);
470 writer.writeArgument(rawArgument);
474 public void startFeatureNode(final String rawArgument) {
475 writer.startStatement(YangStmtMapping.FEATURE);
476 writer.writeArgument(rawArgument);
480 public void startYinElementNode(final String rawArgument) {
481 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
482 writer.writeArgument(rawArgument);
486 public void startIdentityNode(final String rawArgument) {
487 writer.startStatement(YangStmtMapping.IDENTITY);
488 writer.writeArgument(rawArgument);
492 public void startTypedefNode(final String rawArgument) {
493 writer.startStatement(YangStmtMapping.TYPEDEF);
494 writer.writeArgument(rawArgument);
498 public void startRpcNode(final String rawArgument) {
499 writer.startStatement(YangStmtMapping.RPC);
500 writer.writeArgument(rawArgument);
504 public void startTypeNode(final String rawArgument) {
505 writer.startStatement(YangStmtMapping.TYPE);
506 writer.writeArgument(rawArgument);
510 public void startContainerNode(final String rawArgument) {
511 writer.startStatement(YangStmtMapping.CONTAINER);
512 writer.writeArgument(rawArgument);
516 public void startPresenceNode(final String rawArgument) {
517 writer.startStatement(YangStmtMapping.PRESENCE);
518 writer.writeArgument(rawArgument);
522 public void startStatusNode(final String rawArgument) {
523 writer.startStatement(YangStmtMapping.STATUS);
524 writer.writeArgument(rawArgument);
528 public void startConfigNode(final String rawArgument) {
529 writer.startStatement(YangStmtMapping.CONFIG);
530 writer.writeArgument(rawArgument);
534 public void startLeafNode(final String rawArgument) {
535 writer.startStatement(YangStmtMapping.LEAF);
536 writer.writeArgument(rawArgument);
540 public void startWhenNode(final String rawArgument) {
541 writer.startStatement(YangStmtMapping.WHEN);
542 writer.writeArgument(rawArgument);
546 public void startLeafListNode(final String rawArgument) {
547 writer.startStatement(YangStmtMapping.LEAF_LIST);
548 writer.writeArgument(rawArgument);
552 public void startMustNode(final String rawArgument) {
553 writer.startStatement(YangStmtMapping.MUST);
554 writer.writeArgument(rawArgument);
558 public void startMinElementsNode(final String rawArgument) {
559 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
560 writer.writeArgument(rawArgument);
564 public void startMaxElementsNode(final String rawArgument) {
565 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
566 writer.writeArgument(rawArgument);
570 public void startListNode(final String rawArgument) {
571 writer.startStatement(YangStmtMapping.LIST);
572 writer.writeArgument(rawArgument);
576 public void startKeyNode(final String rawArgument) {
577 writer.startStatement(YangStmtMapping.KEY);
578 writer.writeArgument(rawArgument);
582 public void startUniqueNode(final String rawArgument) {
583 writer.startStatement(YangStmtMapping.UNIQUE);
584 writer.writeArgument(rawArgument);
588 public void startActionNode(final String rawArgument) {
589 writer.startStatement(YangStmtMapping.ACTION);
590 writer.writeArgument(rawArgument);
594 public void startChoiceNode(final String rawArgument) {
595 writer.startStatement(YangStmtMapping.CHOICE);
596 writer.writeArgument(rawArgument);
600 public void startMandatoryNode(final String rawArgument) {
601 writer.startStatement(YangStmtMapping.MANDATORY);
602 writer.writeArgument(rawArgument);
606 public void startAnyxmlNode(final String rawArgument) {
607 writer.startStatement(YangStmtMapping.ANYXML);
608 writer.writeArgument(rawArgument);
612 public void startCaseNode(final String rawArgument) {
613 writer.startStatement(YangStmtMapping.CASE);
614 writer.writeArgument(rawArgument);
618 public void startAnydataNode(final String rawArgument) {
619 writer.startStatement(YangStmtMapping.ANYDATA);
620 writer.writeArgument(rawArgument);
624 public void startGroupingNode(final String rawArgument) {
625 writer.startStatement(YangStmtMapping.GROUPING);
626 writer.writeArgument(rawArgument);
630 public void startUsesNode(final String rawArgument) {
631 writer.startStatement(YangStmtMapping.USES);
632 writer.writeArgument(rawArgument);
636 public void startRefineNode(final String rawArgument) {
637 writer.startStatement(YangStmtMapping.REFINE);
638 writer.writeArgument(rawArgument);
642 public void startAugmentNode(final String rawArgument) {
643 writer.startStatement(YangStmtMapping.AUGMENT);
644 writer.writeArgument(rawArgument);
648 public void startNotificationNode(final String rawArgument) {
649 writer.startStatement(YangStmtMapping.NOTIFICATION);
650 writer.writeArgument(rawArgument);
654 public void startValueNode(final String rawArgument) {
655 writer.startStatement(YangStmtMapping.VALUE);
656 writer.writeArgument(rawArgument);
660 public void startModifierNode(final String rawArgument) {
661 writer.startStatement(YangStmtMapping.MODIFIER);
662 writer.writeArgument(rawArgument);
666 public void startFractionDigitsNode(final String rawArgument) {
667 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
668 writer.writeArgument(rawArgument);
672 public void startPathNode(final String rawArgument) {
673 writer.startStatement(YangStmtMapping.PATH);
674 writer.writeArgument(rawArgument);
678 public void startRequireInstanceNode(final String rawArgument) {
679 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
680 writer.writeArgument(rawArgument);
684 public void startPositionNode(final String rawArgument) {
685 writer.startStatement(YangStmtMapping.POSITION);
686 writer.writeArgument(rawArgument);
690 public void startBelongsToNode(final String rawArgument) {
691 writer.startStatement(YangStmtMapping.BELONGS_TO);
692 writer.writeArgument(rawArgument);
696 public void startIfFeatureNode(final String rawArgument) {
697 writer.startStatement(YangStmtMapping.IF_FEATURE);
698 writer.writeArgument(rawArgument);
702 public void startSubmoduleNode(final String rawArgument) {
703 writer.startStatement(YangStmtMapping.SUBMODULE);
704 writer.writeArgument(rawArgument);
708 public void startIncludeNode(final String rawArgument) {
709 writer.startStatement(YangStmtMapping.INCLUDE);
710 writer.writeArgument(rawArgument);
714 public void startDeviationNode(final String rawArgument) {
715 writer.startStatement(YangStmtMapping.DEVIATION);
716 writer.writeArgument(rawArgument);
720 public void startDeviateNode(final String rawArgument) {
721 writer.startStatement(YangStmtMapping.DEVIATE);
722 writer.writeArgument(rawArgument);