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.primitives.UnsignedInteger;
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;
28 final class SchemaToStatementWriterAdaptor implements Rfc6020ModuleWriter {
30 private final StatementTextWriter writer;
32 private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
33 this.writer = Preconditions.checkNotNull(writer);
36 public static Rfc6020ModuleWriter from(final StatementTextWriter writer) {
37 return new SchemaToStatementWriterAdaptor(writer);
41 public void endNode() {
42 writer.endStatement();
46 public void startModuleNode(final String identifier) {
47 writer.startStatement(Rfc6020Mapping.MODULE);
48 writer.writeArgument(identifier);
52 public void startOrganizationNode(final String input) {
53 writer.startStatement(Rfc6020Mapping.ORGANIZATION);
54 writer.writeArgument(input);
58 public void startContactNode(final String input) {
59 writer.startStatement(Rfc6020Mapping.CONTACT);
60 writer.writeArgument(input);
64 public void startDescriptionNode(final String input) {
65 writer.startStatement(Rfc6020Mapping.DESCRIPTION);
66 writer.writeArgument(input);
70 public void startReferenceNode(final String input) {
71 writer.startStatement(Rfc6020Mapping.REFERENCE);
72 writer.writeArgument(input);
76 public void startUnitsNode(final String input) {
77 writer.startStatement(Rfc6020Mapping.UNITS);
78 writer.writeArgument(input);
82 public void startYangVersionNode(final String input) {
83 writer.startStatement(Rfc6020Mapping.YANG_VERSION);
84 writer.writeArgument(input);
88 public void startNamespaceNode(final URI uri) {
89 writer.startStatement(Rfc6020Mapping.NAMESPACE);
90 writer.writeArgument(uri.toString());
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()) {
104 writer.writeArgument(keyStr.toString());
108 public void startPrefixNode(final String input) {
109 writer.startStatement(Rfc6020Mapping.PREFIX);
110 writer.writeArgument(input);
114 public void startFeatureNode(final QName qName) {
115 writer.startStatement(Rfc6020Mapping.FEATURE);
116 writer.writeArgument(qName);
120 public void startExtensionNode(final QName qName) {
121 writer.startStatement(Rfc6020Mapping.EXTENSION);
122 writer.writeArgument(qName);
126 public void startArgumentNode(final String input) {
127 writer.startStatement(Rfc6020Mapping.ARGUMENT);
128 writer.writeArgument(input);
132 public void startStatusNode(final Status status) {
133 writer.startStatement(Rfc6020Mapping.STATUS);
134 writer.writeArgument(status.toString().toLowerCase());
138 public void startTypeNode(final QName qName) {
139 writer.startStatement(Rfc6020Mapping.TYPE);
140 writer.writeArgument(qName);
144 public void startLeafNode(final QName qName) {
145 writer.startStatement(Rfc6020Mapping.LEAF);
146 writer.writeArgument(qName);
150 public void startContainerNode(final QName qName) {
151 writer.startStatement(Rfc6020Mapping.CONTAINER);
152 writer.writeArgument(qName);
156 public void startGroupingNode(final QName qName) {
157 writer.startStatement(Rfc6020Mapping.GROUPING);
158 writer.writeArgument(qName);
162 public void startRpcNode(final QName qName) {
163 writer.startStatement(Rfc6020Mapping.RPC);
164 writer.writeArgument(qName);
168 public void startInputNode() {
169 writer.startStatement(Rfc6020Mapping.INPUT);
173 public void startOutputNode() {
174 writer.startStatement(Rfc6020Mapping.OUTPUT);
178 public void startLeafListNode(final QName qName) {
179 writer.startStatement(Rfc6020Mapping.LEAF_LIST);
180 writer.writeArgument(qName);
184 public void startListNode(final QName qName) {
185 writer.startStatement(Rfc6020Mapping.LIST);
186 writer.writeArgument(qName);
190 public void startChoiceNode(final QName qName) {
191 writer.startStatement(Rfc6020Mapping.CHOICE);
192 writer.writeArgument(qName);
196 public void startCaseNode(final QName qName) {
197 writer.startStatement(Rfc6020Mapping.CASE);
198 writer.writeArgument(qName);
202 public void startNotificationNode(final QName qName) {
203 writer.startStatement(Rfc6020Mapping.NOTIFICATION);
204 writer.writeArgument(qName);
208 public void startIdentityNode(final QName qName) {
209 writer.startStatement(Rfc6020Mapping.IDENTITY);
210 writer.writeArgument(qName);
214 public void startBaseNode(final QName qName) {
215 writer.startStatement(Rfc6020Mapping.BASE);
216 writer.writeArgument(qName);
220 public void startTypedefNode(final QName qName) {
221 writer.startStatement(Rfc6020Mapping.TYPEDEF);
222 writer.writeArgument(qName);
226 public void startRevisionNode(final Date date) {
227 writer.startStatement(Rfc6020Mapping.REVISION);
228 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
232 public void startDefaultNode(final String string) {
233 writer.startStatement(Rfc6020Mapping.DEFAULT);
234 writer.writeArgument(string);
238 public void startMustNode(final RevisionAwareXPath xpath) {
239 writer.startStatement(Rfc6020Mapping.MUST);
240 writer.writeArgument(xpath);
244 public void startErrorMessageNode(final String input) {
245 writer.startStatement(Rfc6020Mapping.ERROR_MESSAGE);
246 writer.writeArgument(input);
250 public void startErrorAppTagNode(final String input) {
251 writer.startStatement(Rfc6020Mapping.ERROR_APP_TAG);
252 writer.writeArgument(input);
256 public void startPatternNode(final String regularExpression) {
257 writer.startStatement(Rfc6020Mapping.PATTERN);
258 writer.writeArgument(regularExpression);
262 public void startValueNode(final Integer integer) {
263 writer.startStatement(Rfc6020Mapping.VALUE);
264 writer.writeArgument(integer.toString());
268 public void startEnumNode(final String name) {
269 writer.startStatement(Rfc6020Mapping.ENUM);
270 writer.writeArgument(name);
274 public void startRequireInstanceNode(final boolean require) {
275 writer.startStatement(Rfc6020Mapping.REQUIRE_INSTANCE);
276 writer.writeArgument(Boolean.toString(require));
280 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
281 writer.startStatement(Rfc6020Mapping.PATH);
282 writer.writeArgument(revisionAwareXPath);
286 public void startBitNode(final String name) {
287 writer.startStatement(Rfc6020Mapping.BIT);
288 writer.writeArgument(name);
292 public void startPositionNode(final UnsignedInteger position) {
293 writer.startStatement(Rfc6020Mapping.POSITION);
294 writer.writeArgument(position.toString());
298 public void startImportNode(final String moduleName) {
299 writer.startStatement(Rfc6020Mapping.IMPORT);
300 writer.writeArgument(moduleName);
304 public void startRevisionDateNode(final Date date) {
305 writer.startStatement(Rfc6020Mapping.REVISION_DATE);
306 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
310 public void startUsesNode(final QName groupingName) {
311 writer.startStatement(Rfc6020Mapping.USES);
312 writer.writeArgument(groupingName);
316 public void startAugmentNode(final SchemaPath targetPath) {
317 writer.startStatement(Rfc6020Mapping.AUGMENT);
318 writer.writeArgument(targetPath);
322 public void startConfigNode(final boolean config) {
323 writer.startStatement(Rfc6020Mapping.CONFIG);
324 writer.writeArgument(Boolean.toString(config));
328 public void startLengthNode(final String lengthString) {
329 writer.startStatement(Rfc6020Mapping.LENGTH);
330 writer.writeArgument(lengthString);
334 public void startMaxElementsNode(final Integer max) {
335 writer.startStatement(Rfc6020Mapping.MAX_ELEMENTS);
336 writer.writeArgument(max.toString());
340 public void startMinElementsNode(final Integer min) {
341 writer.startStatement(Rfc6020Mapping.MIN_ELEMENTS);
342 writer.writeArgument(min.toString());
346 public void startPresenceNode(final boolean presence) {
347 writer.startStatement(Rfc6020Mapping.PRESENCE);
348 writer.writeArgument(Boolean.toString(presence));
352 public void startOrderedByNode(final String ordering) {
353 writer.startStatement(Rfc6020Mapping.ORDERED_BY);
354 writer.writeArgument(ordering);
358 public void startRangeNode(final String rangeString) {
359 writer.startStatement(Rfc6020Mapping.RANGE);
360 writer.writeArgument(rangeString);
364 public void startFractionDigitsNode(final Integer fractionDigits) {
365 writer.startStatement(Rfc6020Mapping.FRACTION_DIGITS);
366 writer.writeArgument(fractionDigits.toString());
370 public void startRefineNode(final SchemaPath path) {
371 writer.startStatement(Rfc6020Mapping.REFINE);
372 writer.writeArgument(path);
376 public void startMandatoryNode(final boolean mandatory) {
377 writer.startStatement(Rfc6020Mapping.MANDATORY);
378 writer.writeArgument(Boolean.toString(mandatory));
382 public void startAnyxmlNode(final QName qName) {
383 writer.startStatement(Rfc6020Mapping.ANYXML);
384 writer.writeArgument(qName);
388 public void startUnknownNode(final StatementDefinition def) {
389 writer.startStatement(def);
393 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
394 writer.startStatement(def);
395 writer.writeArgument(nodeParameter);
399 public void startYinElementNode(final boolean yinElement) {
400 writer.startStatement(Rfc6020Mapping.YIN_ELEMENT);
401 writer.writeArgument(Boolean.toString(yinElement));
405 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
406 writer.startStatement(Rfc6020Mapping.WHEN);
407 writer.writeArgument(revisionAwareXPath);