/*
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.model.export;
import com.google.common.annotations.Beta;
import com.google.common.base.Preconditions;
import com.google.common.primitives.UnsignedInteger;
import java.net.URI;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
@Beta
@NotThreadSafe
final class SchemaToStatementWriterAdaptor implements Rfc6020ModuleWriter {
private final StatementTextWriter writer;
private SchemaToStatementWriterAdaptor(final StatementTextWriter writer) {
this.writer = Preconditions.checkNotNull(writer);
}
public static Rfc6020ModuleWriter from(final StatementTextWriter writer) {
return new SchemaToStatementWriterAdaptor(writer);
}
@Override
public void endNode() {
writer.endStatement();
}
@Override
public void startModuleNode(final String identifier) {
writer.startStatement(YangStmtMapping.MODULE);
writer.writeArgument(identifier);
}
@Override
public void startOrganizationNode(final String input) {
writer.startStatement(YangStmtMapping.ORGANIZATION);
writer.writeArgument(input);
}
@Override
public void startContactNode(final String input) {
writer.startStatement(YangStmtMapping.CONTACT);
writer.writeArgument(input);
}
@Override
public void startDescriptionNode(final String input) {
writer.startStatement(YangStmtMapping.DESCRIPTION);
writer.writeArgument(input);
}
@Override
public void startReferenceNode(final String input) {
writer.startStatement(YangStmtMapping.REFERENCE);
writer.writeArgument(input);
}
@Override
public void startUnitsNode(final String input) {
writer.startStatement(YangStmtMapping.UNITS);
writer.writeArgument(input);
}
@Override
public void startYangVersionNode(final String input) {
writer.startStatement(YangStmtMapping.YANG_VERSION);
writer.writeArgument(input);
}
@Override
public void startNamespaceNode(final URI uri) {
writer.startStatement(YangStmtMapping.NAMESPACE);
writer.writeArgument(uri.toString());
}
@Override
public void startKeyNode(final List<QName> keyList) {
writer.startStatement(YangStmtMapping.KEY);
final StringBuilder keyStr = new StringBuilder();
final Iterator<QName> iter = keyList.iterator();
while (iter.hasNext()) {
keyStr.append(iter.next().getLocalName());
if (iter.hasNext()) {
keyStr.append(' ');
}
}
writer.writeArgument(keyStr.toString());
}
@Override
public void startPrefixNode(final String input) {
writer.startStatement(YangStmtMapping.PREFIX);
writer.writeArgument(input);
}
@Override
public void startFeatureNode(final QName qName) {
writer.startStatement(YangStmtMapping.FEATURE);
writer.writeArgument(qName);
}
@Override
public void startExtensionNode(final QName qName) {
writer.startStatement(YangStmtMapping.EXTENSION);
writer.writeArgument(qName);
}
@Override
public void startArgumentNode(final String input) {
writer.startStatement(YangStmtMapping.ARGUMENT);
writer.writeArgument(input);
}
@Override
public void startStatusNode(final Status status) {
writer.startStatement(YangStmtMapping.STATUS);
writer.writeArgument(status.toString().toLowerCase());
}
@Override
public void startTypeNode(final QName qName) {
writer.startStatement(YangStmtMapping.TYPE);
writer.writeArgument(qName);
}
@Override
public void startLeafNode(final QName qName) {
writer.startStatement(YangStmtMapping.LEAF);
writer.writeArgument(qName);
}
@Override
public void startContainerNode(final QName qName) {
writer.startStatement(YangStmtMapping.CONTAINER);
writer.writeArgument(qName);
}
@Override
public void startGroupingNode(final QName qName) {
writer.startStatement(YangStmtMapping.GROUPING);
writer.writeArgument(qName);
}
@Override
public void startRpcNode(final QName qName) {
writer.startStatement(YangStmtMapping.RPC);
writer.writeArgument(qName);
}
@Override
public void startInputNode() {
writer.startStatement(YangStmtMapping.INPUT);
}
@Override
public void startOutputNode() {
writer.startStatement(YangStmtMapping.OUTPUT);
}
@Override
public void startLeafListNode(final QName qName) {
writer.startStatement(YangStmtMapping.LEAF_LIST);
writer.writeArgument(qName);
}
@Override
public void startListNode(final QName qName) {
writer.startStatement(YangStmtMapping.LIST);
writer.writeArgument(qName);
}
@Override
public void startChoiceNode(final QName qName) {
writer.startStatement(YangStmtMapping.CHOICE);
writer.writeArgument(qName);
}
@Override
public void startCaseNode(final QName qName) {
writer.startStatement(YangStmtMapping.CASE);
writer.writeArgument(qName);
}
@Override
public void startNotificationNode(final QName qName) {
writer.startStatement(YangStmtMapping.NOTIFICATION);
writer.writeArgument(qName);
}
@Override
public void startIdentityNode(final QName qName) {
writer.startStatement(YangStmtMapping.IDENTITY);
writer.writeArgument(qName);
}
@Override
public void startBaseNode(final QName qName) {
writer.startStatement(YangStmtMapping.BASE);
writer.writeArgument(qName);
}
@Override
public void startTypedefNode(final QName qName) {
writer.startStatement(YangStmtMapping.TYPEDEF);
writer.writeArgument(qName);
}
@Override
public void startRevisionNode(final Date date) {
writer.startStatement(YangStmtMapping.REVISION);
writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
}
@Override
public void startDefaultNode(final String string) {
writer.startStatement(YangStmtMapping.DEFAULT);
writer.writeArgument(string);
}
@Override
public void startMustNode(final RevisionAwareXPath xpath) {
writer.startStatement(YangStmtMapping.MUST);
writer.writeArgument(xpath);
}
@Override
public void startErrorMessageNode(final String input) {
writer.startStatement(YangStmtMapping.ERROR_MESSAGE);
writer.writeArgument(input);
}
@Override
public void startErrorAppTagNode(final String input) {
writer.startStatement(YangStmtMapping.ERROR_APP_TAG);
writer.writeArgument(input);
}
@Override
public void startPatternNode(final String regularExpression) {
writer.startStatement(YangStmtMapping.PATTERN);
writer.writeArgument(regularExpression);
}
@Override
public void startValueNode(final Integer integer) {
writer.startStatement(YangStmtMapping.VALUE);
writer.writeArgument(integer.toString());
}
@Override
public void startEnumNode(final String name) {
writer.startStatement(YangStmtMapping.ENUM);
writer.writeArgument(name);
}
@Override
public void startRequireInstanceNode(final boolean require) {
writer.startStatement(YangStmtMapping.REQUIRE_INSTANCE);
writer.writeArgument(Boolean.toString(require));
}
@Override
public void startPathNode(final RevisionAwareXPath revisionAwareXPath) {
writer.startStatement(YangStmtMapping.PATH);
writer.writeArgument(revisionAwareXPath);
}
@Override
public void startBitNode(final String name) {
writer.startStatement(YangStmtMapping.BIT);
writer.writeArgument(name);
}
@Override
public void startPositionNode(final UnsignedInteger position) {
writer.startStatement(YangStmtMapping.POSITION);
writer.writeArgument(position.toString());
}
@Override
public void startImportNode(final String moduleName) {
writer.startStatement(YangStmtMapping.IMPORT);
writer.writeArgument(moduleName);
}
@Override
public void startRevisionDateNode(final Date date) {
writer.startStatement(YangStmtMapping.REVISION_DATE);
writer.writeArgument(SimpleDateFormatUtil.getRevisionFormat().format(date));
}
@Override
public void startUsesNode(final QName groupingName) {
writer.startStatement(YangStmtMapping.USES);
writer.writeArgument(groupingName);
}
@Override
public void startAugmentNode(final SchemaPath targetPath) {
writer.startStatement(YangStmtMapping.AUGMENT);
writer.writeArgument(targetPath);
}
@Override
public void startConfigNode(final boolean config) {
writer.startStatement(YangStmtMapping.CONFIG);
writer.writeArgument(Boolean.toString(config));
}
@Override
public void startLengthNode(final String lengthString) {
writer.startStatement(YangStmtMapping.LENGTH);
writer.writeArgument(lengthString);
}
@Override
public void startMaxElementsNode(final Integer max) {
writer.startStatement(YangStmtMapping.MAX_ELEMENTS);
writer.writeArgument(max.toString());
}
@Override
public void startMinElementsNode(final Integer min) {
writer.startStatement(YangStmtMapping.MIN_ELEMENTS);
writer.writeArgument(min.toString());
}
@Override
public void startPresenceNode(final boolean presence) {
writer.startStatement(YangStmtMapping.PRESENCE);
writer.writeArgument(Boolean.toString(presence));
}
@Override
public void startOrderedByNode(final String ordering) {
writer.startStatement(YangStmtMapping.ORDERED_BY);
writer.writeArgument(ordering);
}
@Override
public void startRangeNode(final String rangeString) {
writer.startStatement(YangStmtMapping.RANGE);
writer.writeArgument(rangeString);
}
@Override
public void startFractionDigitsNode(final Integer fractionDigits) {
writer.startStatement(YangStmtMapping.FRACTION_DIGITS);
writer.writeArgument(fractionDigits.toString());
}
@Override
public void startRefineNode(final SchemaPath path) {
writer.startStatement(YangStmtMapping.REFINE);
writer.writeArgument(path);
}
@Override
public void startMandatoryNode(final boolean mandatory) {
writer.startStatement(YangStmtMapping.MANDATORY);
writer.writeArgument(Boolean.toString(mandatory));
}
@Override
public void startAnyxmlNode(final QName qName) {
writer.startStatement(YangStmtMapping.ANYXML);
writer.writeArgument(qName);
}
@Override
public void startUnknownNode(final StatementDefinition def) {
writer.startStatement(def);
}
@Override
public void startUnknownNode(final StatementDefinition def, final String nodeParameter) {
writer.startStatement(def);
writer.writeArgument(nodeParameter);
}
@Override
public void startYinElementNode(final boolean yinElement) {
writer.startStatement(YangStmtMapping.YIN_ELEMENT);
writer.writeArgument(Boolean.toString(yinElement));
}
@Override
public void startWhenNode(final RevisionAwareXPath revisionAwareXPath) {
writer.startStatement(YangStmtMapping.WHEN);
writer.writeArgument(revisionAwareXPath);
}
}