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.List;
16 import javax.annotation.concurrent.NotThreadSafe;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
19 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
20 import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
21 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
22 import org.opendaylight.yangtools.yang.model.api.Status;
23 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
27 final class SchemaToStatementWriterAdaptor implements Rfc6020ModuleWriter {
29 private final StatementTextWriter writer;
31 private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
32 this.writer = Preconditions.checkNotNull(writer);
35 public static final Rfc6020ModuleWriter from(final StatementTextWriter writer) {
36 return new SchemaToStatementWriterAdaptor(writer);
40 public void endNode() {
41 writer.endStatement();
45 public void startModuleNode(final String identifier) {
46 writer.startStatement(Rfc6020Mapping.MODULE);
47 writer.writeArgument(identifier);
51 public void startOrganizationNode(final String input) {
52 writer.startStatement(Rfc6020Mapping.ORGANIZATION);
53 writer.writeArgument(input);
57 public void startContactNode(final String input) {
58 writer.startStatement(Rfc6020Mapping.CONTACT);
59 writer.writeArgument(input);
63 public void startDescriptionNode(final String input) {
64 writer.startStatement(Rfc6020Mapping.DESCRIPTION);
65 writer.writeArgument(input);
69 public void startReferenceNode(final String input) {
70 writer.startStatement(Rfc6020Mapping.REFERENCE);
71 writer.writeArgument(input);
75 public void startUnitsNode(final String input) {
76 writer.startStatement(Rfc6020Mapping.UNITS);
77 writer.writeArgument(input);
81 public void startYangVersionNode(final String input) {
82 writer.startStatement(Rfc6020Mapping.YANG_VERSION);
83 writer.writeArgument(input);
87 public void startNamespaceNode(final URI uri) {
88 writer.startStatement(Rfc6020Mapping.NAMESPACE);
89 writer.writeArgument(uri.toString());
93 public void startKeyNode(final List<QName> keyList) {
94 writer.startStatement(Rfc6020Mapping.KEY);
95 final StringBuilder keyStr = new StringBuilder();
96 for (final QName item : keyList) {
97 keyStr.append(item.getLocalName());
99 writer.writeArgument(keyStr.toString());
103 public void startPrefixNode(final String input) {
104 writer.startStatement(Rfc6020Mapping.PREFIX);
105 writer.writeArgument(input);
109 public void startFeatureNode(final QName qName) {
110 writer.startStatement(Rfc6020Mapping.FEATURE);
111 writer.writeArgument(qName);
115 public void startExtensionNode(final QName qName) {
116 writer.startStatement(Rfc6020Mapping.EXTENSION);
117 writer.writeArgument(qName);
121 public void startArgumentNode(final String input) {
122 writer.startStatement(Rfc6020Mapping.ARGUMENT);
123 writer.writeArgument(input);
127 public void startStatusNode(final Status status) {
128 writer.startStatement(Rfc6020Mapping.STATUS);
129 writer.writeArgument(status.toString().toLowerCase());
133 public void startTypeNode(final QName qName) {
134 writer.startStatement(Rfc6020Mapping.TYPE);
135 writer.writeArgument(qName);
139 public void startLeafNode(final QName qName) {
140 writer.startStatement(Rfc6020Mapping.LEAF);
141 writer.writeArgument(qName);
145 public void startContainerNode(final QName qName) {
146 writer.startStatement(Rfc6020Mapping.CONTAINER);
147 writer.writeArgument(qName);
151 public void startGroupingNode(final QName qName) {
152 writer.startStatement(Rfc6020Mapping.GROUPING);
153 writer.writeArgument(qName);
157 public void startRpcNode(final QName qName) {
158 writer.startStatement(Rfc6020Mapping.RPC);
159 writer.writeArgument(qName);
163 public void startInputNode() {
164 writer.startStatement(Rfc6020Mapping.INPUT);
168 public void startOutputNode() {
169 writer.startStatement(Rfc6020Mapping.OUTPUT);
173 public void startLeafListNode(final QName qName) {
174 writer.startStatement(Rfc6020Mapping.LEAF_LIST);
175 writer.writeArgument(qName);
179 public void startListNode(final QName qName) {
180 writer.startStatement(Rfc6020Mapping.LIST);
181 writer.writeArgument(qName);
185 public void startChoiceNode(final QName qName) {
186 writer.startStatement(Rfc6020Mapping.CHOICE);
187 writer.writeArgument(qName);
191 public void startCaseNode(final QName qName) {
192 writer.startStatement(Rfc6020Mapping.CASE);
193 writer.writeArgument(qName);
197 public void startNotificationNode(final QName qName) {
198 writer.startStatement(Rfc6020Mapping.NOTIFICATION);
199 writer.writeArgument(qName);
203 public void startIdentityNode(final QName qName) {
204 writer.startStatement(Rfc6020Mapping.IDENTITY);
205 writer.writeArgument(qName);
209 public void startBaseNode(final QName qName) {
210 writer.startStatement(Rfc6020Mapping.BASE);
211 writer.writeArgument(qName);
215 public void startTypedefNode(final QName qName) {
216 writer.startStatement(Rfc6020Mapping.TYPEDEF);
217 writer.writeArgument(qName);
221 public void startRevisionNode(final Date date) {
222 writer.startStatement(Rfc6020Mapping.REVISION);
223 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
227 public void startDefaultNode(final String string) {
228 writer.startStatement(Rfc6020Mapping.DEFAULT);
229 writer.writeArgument(string);
233 public void startMustNode(final RevisionAwareXPath xpath) {
234 writer.startStatement(Rfc6020Mapping.MUST);
235 writer.writeArgument(xpath);
239 public void startErrorMessageNode(final String input) {
240 writer.startStatement(Rfc6020Mapping.ERROR_MESSAGE);
241 writer.writeArgument(input);
245 public void startErrorAppTagNode(final String input) {
246 writer.startStatement(Rfc6020Mapping.ERROR_APP_TAG);
247 writer.writeArgument(input);
251 public void startPatternNode(final String regularExpression) {
252 writer.startStatement(Rfc6020Mapping.PATTERN);
253 writer.writeArgument(regularExpression);
257 public void startValueNode(final Integer integer) {
258 writer.startStatement(Rfc6020Mapping.VALUE);
259 writer.writeArgument(integer.toString());
263 public void startEnumNode(final String name) {
264 writer.startStatement(Rfc6020Mapping.ENUM);
265 writer.writeArgument(name);
269 public void startRequireInstanceNode(final boolean require) {
270 writer.startStatement(Rfc6020Mapping.REQUIRE_INSTANCE);
271 writer.writeArgument(Boolean.toString(require));
275 public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
276 writer.startStatement(Rfc6020Mapping.PATH);
277 writer.writeArgument(revisionAwareXPath);
281 public void startBitNode(final String name) {
282 writer.startStatement(Rfc6020Mapping.BIT);
283 writer.writeArgument(name);
287 public void startPositionNode(final UnsignedInteger position) {
288 writer.startStatement(Rfc6020Mapping.POSITION);
289 writer.writeArgument(position.toString());
293 public void startImportNode(final String moduleName) {
294 writer.startStatement(Rfc6020Mapping.IMPORT);
295 writer.writeArgument(moduleName);
299 public void startRevisionDateNode(final Date date) {
300 writer.startStatement(Rfc6020Mapping.REVISION_DATE);
301 writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
305 public void startUsesNode(final QName groupingName) {
306 writer.startStatement(Rfc6020Mapping.USES);
307 writer.writeArgument(groupingName);
311 public void startAugmentNode(final SchemaPath targetPath) {
312 writer.startStatement(Rfc6020Mapping.AUGMENT);
313 writer.writeArgument(targetPath);
317 public void startConfigNode(final boolean config) {
318 writer.startStatement(Rfc6020Mapping.CONFIG);
319 writer.writeArgument(Boolean.toString(config));
323 public void startLengthNode(final String lengthString) {
324 writer.startStatement(Rfc6020Mapping.LENGTH);
325 writer.writeArgument(lengthString);
329 public void startMaxElementsNode(final Integer max) {
330 writer.startStatement(Rfc6020Mapping.MAX_ELEMENTS);
331 writer.writeArgument(max.toString());
335 public void startMinElementsNode(final Integer min) {
336 writer.startStatement(Rfc6020Mapping.MIN_ELEMENTS);
337 writer.writeArgument(min.toString());
341 public void startPresenceNode(final boolean presence) {
342 writer.startStatement(Rfc6020Mapping.PRESENCE);
343 writer.writeArgument(Boolean.toString(presence));
347 public void startOrderedByNode(final String ordering) {
348 writer.startStatement(Rfc6020Mapping.ORDERED_BY);
349 writer.writeArgument(ordering);
353 public void startRangeNode(final String rangeString) {
354 writer.startStatement(Rfc6020Mapping.RANGE);
355 writer.writeArgument(rangeString);
359 public void startFractionDigitsNode(final Integer fractionDigits) {
360 writer.startStatement(Rfc6020Mapping.FRACTION_DIGITS);
361 writer.writeArgument(fractionDigits.toString());
365 public void startRefineNode(final SchemaPath path) {
366 writer.startStatement(Rfc6020Mapping.REFINE);
367 writer.writeArgument(path);
371 public void startMandatoryNode(final boolean mandatory) {
372 writer.startStatement(Rfc6020Mapping.MANDATORY);
373 writer.writeArgument(Boolean.toString(mandatory));
377 public void startAnyxmlNode(final QName qName) {
378 writer.startStatement(Rfc6020Mapping.ANYXML);
379 writer.writeArgument(qName);
383 public void startUnknownNode(final StatementDefinition def) {
384 writer.startStatement(def);
388 public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
389 writer.startStatement(def);
390 writer.writeArgument(nodeParameter);
394 public void startYinElementNode(final boolean yinElement) {
395 writer.startStatement(Rfc6020Mapping.YIN_ELEMENT);
396 writer.writeArgument(Boolean.toString(yinElement));
400 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
401 writer.startStatement(Rfc6020Mapping.WHEN);
402 writer.writeArgument(revisionAwareXPath);