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.YangVersion);
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.LeafList);
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.ErrorMessage);
241 writer.writeArgument(input);
245 public void startErrorAppTagNode(final String input) {
246 writer.startStatement(Rfc6020Mapping.ErrorAppTag);
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.RequireInstance);
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.RevisionDate);
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.MaxElements);
331 writer.writeArgument(max.toString());
335 public void startMinElementsNode(final Integer min) {
336 writer.startStatement(Rfc6020Mapping.MinElements);
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.OrderedBy);
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.FractionDigits);
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.YinElement);
396 writer.writeArgument(Boolean.toString(yinElement));
400 public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
401 writer.startStatement(Rfc6020Mapping.When);
402 writer.writeArgument(revisionAwareXPath);