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.Date;
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.SimpleDateFormatUtil;
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;
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 startModuleNode(final String identifier) {
52 writer.startStatement(YangStmtMapping.MODULE);
53 writer.writeArgument(identifier);
57 public void startOrganizationNode(final String input) {
58 writer.startStatement(YangStmtMapping.ORGANIZATION);
59 writer.writeArgument(input);
63 public void startContactNode(final String input) {
64 writer.startStatement(YangStmtMapping.CONTACT);
65 writer.writeArgument(input);
69 public void startDescriptionNode(final String input) {
70 writer.startStatement(YangStmtMapping.DESCRIPTION);
71 writer.writeArgument(input);
75 public void startReferenceNode(final String input) {
76 writer.startStatement(YangStmtMapping.REFERENCE);
77 writer.writeArgument(input);
81 public void startUnitsNode(final String input) {
82 writer.startStatement(YangStmtMapping.UNITS);
83 writer.writeArgument(input);
87 public void startYangVersionNode(final String input) {
88 writer.startStatement(YangStmtMapping.YANG_VERSION);
89 writer.writeArgument(input);
93 public void startNamespaceNode(final URI uri) {
94 writer.startStatement(YangStmtMapping.NAMESPACE);
95 writer.writeArgument(uri.toString());
99 public void startKeyNode(final List<QName> keyList) {
100 writer.startStatement(YangStmtMapping.KEY);
101 final StringBuilder keyStr = new StringBuilder();
102 final Iterator<QName> iter = keyList.iterator();
103 while (iter.hasNext()) {
104 keyStr.append(iter.next().getLocalName());
105 if (iter.hasNext()) {
109 writer.writeArgument(keyStr.toString());
113 public void startPrefixNode(final String input) {
114 writer.startStatement(YangStmtMapping.PREFIX);
115 writer.writeArgument(input);
119 public void startFeatureNode(final QName qName) {
120 writer.startStatement(YangStmtMapping.FEATURE);
121 writer.writeArgument(qName);
125 public void startExtensionNode(final QName qName) {
126 writer.startStatement(YangStmtMapping.EXTENSION);
127 writer.writeArgument(qName);
131 public void startArgumentNode(final String input) {
132 writer.startStatement(YangStmtMapping.ARGUMENT);
133 writer.writeArgument(input);
137 public void startStatusNode(final Status status) {
138 writer.startStatement(YangStmtMapping.STATUS);
139 writer.writeArgument(status.toString().toLowerCase());
143 public void startTypeNode(final QName qName) {
144 writer.startStatement(YangStmtMapping.TYPE);
145 writer.writeArgument(qName);
149 public void startLeafNode(final QName qName) {
150 writer.startStatement(YangStmtMapping.LEAF);
151 writer.writeArgument(qName);
155 public void startContainerNode(final QName qName) {
156 writer.startStatement(YangStmtMapping.CONTAINER);
157 writer.writeArgument(qName);
161 public void startGroupingNode(final QName qName) {
162 writer.startStatement(YangStmtMapping.GROUPING);
163 writer.writeArgument(qName);
167 public void startRpcNode(final QName qName) {
168 writer.startStatement(YangStmtMapping.RPC);
169 writer.writeArgument(qName);
173 public void startInputNode() {
174 writer.startStatement(YangStmtMapping.INPUT);
178 public void startOutputNode() {
179 writer.startStatement(YangStmtMapping.OUTPUT);
183 public void startLeafListNode(final QName qName) {
184 writer.startStatement(YangStmtMapping.LEAF_LIST);
185 writer.writeArgument(qName);
189 public void startListNode(final QName qName) {
190 writer.startStatement(YangStmtMapping.LIST);
191 writer.writeArgument(qName);
195 public void startChoiceNode(final QName qName) {
196 writer.startStatement(YangStmtMapping.CHOICE);
197 writer.writeArgument(qName);
201 public void startCaseNode(final QName qName) {
202 writer.startStatement(YangStmtMapping.CASE);
203 writer.writeArgument(qName);
207 public void startNotificationNode(final QName qName) {
208 writer.startStatement(YangStmtMapping.NOTIFICATION);
209 writer.writeArgument(qName);
213 public void startIdentityNode(final QName qName) {
214 writer.startStatement(YangStmtMapping.IDENTITY);
215 writer.writeArgument(qName);
219 public void startBaseNode(final QName qName) {
220 writer.startStatement(YangStmtMapping.BASE);
221 writer.writeArgument(qName);
225 public void startTypedefNode(final QName qName) {
226 writer.startStatement(YangStmtMapping.TYPEDEF);
227 writer.writeArgument(qName);
231 public void startRevisionNode(final Date date) {
232 writer.startStatement(YangStmtMapping.REVISION);
233 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
237 public void startDefaultNode(final String string) {
238 writer.startStatement(YangStmtMapping.DEFAULT);
239 writer.writeArgument(string);
243 public void startMustNode(final RevisionAwareXPath xpath) {
244 writer.startStatement(YangStmtMapping.MUST);
245 writer.writeArgument(xpath);
249 public void startErrorMessageNode(final String input) {
250 writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
251 writer.writeArgument(input);
255 public void startErrorAppTagNode(final String input) {
256 writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
257 writer.writeArgument(input);
261 public void startPatternNode(final String regularExpression) {
262 writer.startStatement(YangStmtMapping.PATTERN);
263 writer.writeArgument(regularExpression);
267 public void startValueNode(final Integer integer) {
268 writer.startStatement(YangStmtMapping.VALUE);
269 writer.writeArgument(integer.toString());
273 public void startEnumNode(final String name) {
274 writer.startStatement(YangStmtMapping.ENUM);
275 writer.writeArgument(name);
279 public void startRequireInstanceNode(final boolean require) {
280 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
281 writer.writeArgument(Boolean.toString(require));
285 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
286 writer.startStatement(YangStmtMapping.PATH);
287 writer.writeArgument(revisionAwareXPath);
291 public void startBitNode(final String name) {
292 writer.startStatement(YangStmtMapping.BIT);
293 writer.writeArgument(name);
297 public void startPositionNode(final UnsignedInteger position) {
298 writer.startStatement(YangStmtMapping.POSITION);
299 writer.writeArgument(position.toString());
303 public void startImportNode(final String moduleName) {
304 writer.startStatement(YangStmtMapping.IMPORT);
305 writer.writeArgument(moduleName);
309 public void startRevisionDateNode(final Date date) {
310 writer.startStatement(YangStmtMapping.REVISION_DATE);
311 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
315 public void startUsesNode(final QName groupingName) {
316 writer.startStatement(YangStmtMapping.USES);
317 writer.writeArgument(groupingName);
321 public void startAugmentNode(final SchemaPath targetPath) {
322 writer.startStatement(YangStmtMapping.AUGMENT);
323 writer.writeArgument(targetPath);
327 public void startConfigNode(final boolean config) {
328 writer.startStatement(YangStmtMapping.CONFIG);
329 writer.writeArgument(Boolean.toString(config));
333 public void startLengthNode(final String lengthString) {
334 writer.startStatement(YangStmtMapping.LENGTH);
335 writer.writeArgument(lengthString);
339 public void startMaxElementsNode(final Integer max) {
340 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
341 writer.writeArgument(max.toString());
345 public void startMinElementsNode(final Integer min) {
346 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
347 writer.writeArgument(min.toString());
351 public void startPresenceNode(final boolean presence) {
352 writer.startStatement(YangStmtMapping.PRESENCE);
353 writer.writeArgument(Boolean.toString(presence));
357 public void startOrderedByNode(final String ordering) {
358 writer.startStatement(YangStmtMapping.ORDERED_BY);
359 writer.writeArgument(ordering);
363 public void startRangeNode(final String rangeString) {
364 writer.startStatement(YangStmtMapping.RANGE);
365 writer.writeArgument(rangeString);
369 public void startFractionDigitsNode(final Integer fractionDigits) {
370 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
371 writer.writeArgument(fractionDigits.toString());
375 public void startRefineNode(final SchemaPath path) {
376 writer.startStatement(YangStmtMapping.REFINE);
377 writer.writeArgument(path);
381 public void startMandatoryNode(final boolean mandatory) {
382 writer.startStatement(YangStmtMapping.MANDATORY);
383 writer.writeArgument(Boolean.toString(mandatory));
387 public void startAnyxmlNode(final QName qName) {
388 writer.startStatement(YangStmtMapping.ANYXML);
389 writer.writeArgument(qName);
393 public void startUnknownNode(final StatementDefinition def) {
394 writer.startStatement(def);
398 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
399 writer.startStatement(def);
400 writer.writeArgument(nodeParameter);
404 public void startYinElementNode(final boolean yinElement) {
405 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
406 writer.writeArgument(Boolean.toString(yinElement));
410 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
411 writer.startStatement(YangStmtMapping.WHEN);
412 writer.writeArgument(revisionAwareXPath);
416 public void startAnydataNode(final QName qName) {
417 writer.startStatement(YangStmtMapping.ANYDATA);
418 writer.writeArgument(qName);
422 public void startActionNode(final QName qName) {
423 writer.startStatement(YangStmtMapping.ACTION);
424 writer.writeArgument(qName);
428 public void startModifierNode(final ModifierKind modifier) {
429 writer.startStatement(YangStmtMapping.MODIFIER);
430 writer.writeArgument(modifier.getKeyword());
434 public void startUniqueNode(final UniqueConstraint uniqueConstraint) {
435 writer.startStatement(YangStmtMapping.UNIQUE);
436 final StringBuilder uniqueStr = new StringBuilder();
437 final Collection<Relative> tag = uniqueConstraint.getTag();
439 final Iterator<Relative> iter = tag.iterator();
440 while (iter.hasNext()) {
442 String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName())));
443 if (iter.hasNext()) {
444 uniqueStr.append(' ');
447 writer.writeArgument(uniqueStr.toString());
451 public void startRevisionNode(final String rawArgument) {
452 writer.startStatement(YangStmtMapping.REVISION);
453 writer.writeArgument(rawArgument);
457 public void startRevisionDateNode(final String rawArgument) {
458 writer.startStatement(YangStmtMapping.REVISION_DATE);
459 writer.writeArgument(rawArgument);
463 public void startExtensionNode(final String rawArgument) {
464 writer.startStatement(YangStmtMapping.EXTENSION);
465 writer.writeArgument(rawArgument);
469 public void startBaseNode(final String rawArgument) {
470 writer.startStatement(YangStmtMapping.BASE);
471 writer.writeArgument(rawArgument);
475 public void startFeatureNode(final String rawArgument) {
476 writer.startStatement(YangStmtMapping.FEATURE);
477 writer.writeArgument(rawArgument);
481 public void startYinElementNode(final String rawArgument) {
482 writer.startStatement(YangStmtMapping.YIN_ELEMENT);
483 writer.writeArgument(rawArgument);
487 public void startIdentityNode(final String rawArgument) {
488 writer.startStatement(YangStmtMapping.IDENTITY);
489 writer.writeArgument(rawArgument);
493 public void startTypedefNode(final String rawArgument) {
494 writer.startStatement(YangStmtMapping.TYPEDEF);
495 writer.writeArgument(rawArgument);
499 public void startRpcNode(final String rawArgument) {
500 writer.startStatement(YangStmtMapping.RPC);
501 writer.writeArgument(rawArgument);
505 public void startTypeNode(final String rawArgument) {
506 writer.startStatement(YangStmtMapping.TYPE);
507 writer.writeArgument(rawArgument);
511 public void startContainerNode(final String rawArgument) {
512 writer.startStatement(YangStmtMapping.CONTAINER);
513 writer.writeArgument(rawArgument);
517 public void startPresenceNode(final String rawArgument) {
518 writer.startStatement(YangStmtMapping.PRESENCE);
519 writer.writeArgument(rawArgument);
523 public void startStatusNode(final String rawArgument) {
524 writer.startStatement(YangStmtMapping.STATUS);
525 writer.writeArgument(rawArgument);
529 public void startConfigNode(final String rawArgument) {
530 writer.startStatement(YangStmtMapping.CONFIG);
531 writer.writeArgument(rawArgument);
535 public void startLeafNode(final String rawArgument) {
536 writer.startStatement(YangStmtMapping.LEAF);
537 writer.writeArgument(rawArgument);
541 public void startWhenNode(final String rawArgument) {
542 writer.startStatement(YangStmtMapping.WHEN);
543 writer.writeArgument(rawArgument);
547 public void startLeafListNode(final String rawArgument) {
548 writer.startStatement(YangStmtMapping.LEAF_LIST);
549 writer.writeArgument(rawArgument);
553 public void startMustNode(final String rawArgument) {
554 writer.startStatement(YangStmtMapping.MUST);
555 writer.writeArgument(rawArgument);
559 public void startMinElementsNode(final String rawArgument) {
560 writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
561 writer.writeArgument(rawArgument);
565 public void startMaxElementsNode(final String rawArgument) {
566 writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
567 writer.writeArgument(rawArgument);
571 public void startListNode(final String rawArgument) {
572 writer.startStatement(YangStmtMapping.LIST);
573 writer.writeArgument(rawArgument);
577 public void startKeyNode(final String rawArgument) {
578 writer.startStatement(YangStmtMapping.KEY);
579 writer.writeArgument(rawArgument);
583 public void startUniqueNode(final String rawArgument) {
584 writer.startStatement(YangStmtMapping.UNIQUE);
585 writer.writeArgument(rawArgument);
589 public void startActionNode(final String rawArgument) {
590 writer.startStatement(YangStmtMapping.ACTION);
591 writer.writeArgument(rawArgument);
595 public void startChoiceNode(final String rawArgument) {
596 writer.startStatement(YangStmtMapping.CHOICE);
597 writer.writeArgument(rawArgument);
601 public void startMandatoryNode(final String rawArgument) {
602 writer.startStatement(YangStmtMapping.MANDATORY);
603 writer.writeArgument(rawArgument);
607 public void startAnyxmlNode(final String rawArgument) {
608 writer.startStatement(YangStmtMapping.ANYXML);
609 writer.writeArgument(rawArgument);
613 public void startCaseNode(final String rawArgument) {
614 writer.startStatement(YangStmtMapping.CASE);
615 writer.writeArgument(rawArgument);
619 public void startAnydataNode(final String rawArgument) {
620 writer.startStatement(YangStmtMapping.ANYDATA);
621 writer.writeArgument(rawArgument);
625 public void startGroupingNode(final String rawArgument) {
626 writer.startStatement(YangStmtMapping.GROUPING);
627 writer.writeArgument(rawArgument);
631 public void startUsesNode(final String rawArgument) {
632 writer.startStatement(YangStmtMapping.USES);
633 writer.writeArgument(rawArgument);
637 public void startRefineNode(final String rawArgument) {
638 writer.startStatement(YangStmtMapping.REFINE);
639 writer.writeArgument(rawArgument);
643 public void startAugmentNode(final String rawArgument) {
644 writer.startStatement(YangStmtMapping.AUGMENT);
645 writer.writeArgument(rawArgument);
649 public void startNotificationNode(final String rawArgument) {
650 writer.startStatement(YangStmtMapping.NOTIFICATION);
651 writer.writeArgument(rawArgument);
655 public void startValueNode(final String rawArgument) {
656 writer.startStatement(YangStmtMapping.VALUE);
657 writer.writeArgument(rawArgument);
661 public void startModifierNode(final String rawArgument) {
662 writer.startStatement(YangStmtMapping.MODIFIER);
663 writer.writeArgument(rawArgument);
667 public void startFractionDigitsNode(final String rawArgument) {
668 writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
669 writer.writeArgument(rawArgument);
673 public void startPathNode(final String rawArgument) {
674 writer.startStatement(YangStmtMapping.PATH);
675 writer.writeArgument(rawArgument);
679 public void startRequireInstanceNode(final String rawArgument) {
680 writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
681 writer.writeArgument(rawArgument);
685 public void startPositionNode(final String rawArgument) {
686 writer.startStatement(YangStmtMapping.POSITION);
687 writer.writeArgument(rawArgument);
691 public void startBelongsToNode(final String rawArgument) {
692 writer.startStatement(YangStmtMapping.BELONGS_TO);
693 writer.writeArgument(rawArgument);
697 public void startIfFeatureNode(final String rawArgument) {
698 writer.startStatement(YangStmtMapping.IF_FEATURE);
699 writer.writeArgument(rawArgument);
703 public void startSubmoduleNode(final String rawArgument) {
704 writer.startStatement(YangStmtMapping.SUBMODULE);
705 writer.writeArgument(rawArgument);
709 public void startIncludeNode(final String rawArgument) {
710 writer.startStatement(YangStmtMapping.INCLUDE);
711 writer.writeArgument(rawArgument);
715 public void startDeviationNode(final String rawArgument) {
716 writer.startStatement(YangStmtMapping.DEVIATION);
717 writer.writeArgument(rawArgument);
721 public void startDeviateNode(final String rawArgument) {
722 writer.startStatement(YangStmtMapping.DEVIATE);
723 writer.writeArgument(rawArgument);