*/
package org.opendaylight.yangtools.sal.binding.generator.impl
-import java.text.SimpleDateFormat
import java.util.Collection
import java.util.Date
import java.util.List
import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode
-import org.opendaylight.yangtools.yang.model.api.ChoiceNode
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode
import org.opendaylight.yangtools.yang.model.api.Deviation
import org.opendaylight.yangtools.yang.model.api.UsesNode
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil
+import com.google.common.base.CharMatcher
class YangTemplate {
+ // FIXME: this is not thread-safe and seems to be unused!
private static var Module module = null
+ private static val CharMatcher NEWLINE_OR_TAB = CharMatcher.anyOf("\n\t")
+
def static String generateYangSnipet(SchemaNode schemaNode) {
if (schemaNode == null)
return ''
'''
«IF schemaNode instanceof DataSchemaNode»
- «writeDataSchemaNode(schemaNode as DataSchemaNode)»
+ «writeDataSchemaNode(schemaNode)»
«ENDIF»
«IF schemaNode instanceof EnumTypeDefinition.EnumPair»
- «writeEnumPair(schemaNode as EnumTypeDefinition.EnumPair)»
+ «writeEnumPair(schemaNode)»
«ENDIF»
«IF schemaNode instanceof ExtensionDefinition»
- «writeExtension(schemaNode as ExtensionDefinition)»
+ «writeExtension(schemaNode)»
«ENDIF»
«IF schemaNode instanceof FeatureDefinition»
- «writeFeature(schemaNode as FeatureDefinition)»
+ «writeFeature(schemaNode)»
«ENDIF»
«IF schemaNode instanceof GroupingDefinition»
- «writeGroupingDef(schemaNode as GroupingDefinition)»
+ «writeGroupingDef(schemaNode)»
«ENDIF»
«IF schemaNode instanceof IdentitySchemaNode»
- «writeIdentity(schemaNode as IdentitySchemaNode)»
+ «writeIdentity(schemaNode)»
«ENDIF»
«IF schemaNode instanceof NotificationDefinition»
- «writeNotification(schemaNode as NotificationDefinition)»
+ «writeNotification(schemaNode)»
«ENDIF»
«IF schemaNode instanceof RpcDefinition»
- «writeRPC(schemaNode as RpcDefinition)»
+ «writeRPC(schemaNode)»
«ENDIF»
«IF schemaNode instanceof TypeDefinition<?>»
- «writeTypeDefinition(schemaNode as TypeDefinition<?>)»
+ «writeTypeDefinition(schemaNode)»
«ENDIF»
«IF schemaNode instanceof UnknownSchemaNode»
- «writeUnknownSchemaNode(schemaNode as UnknownSchemaNode)»
+ «writeUnknownSchemaNode(schemaNode)»
«ENDIF»
'''
}
'''
«FOR node : nodes»
«IF node instanceof NotificationDefinition»
- «writeNotification(node as NotificationDefinition)»
+ «writeNotification(node)»
«ELSEIF node instanceof RpcDefinition»
«writeRPC(node as RpcDefinition)»
«ENDIF»
'''
}
- def static formatDate(Date moduleRevision) {
- val SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd")
- return dateFormat.format(moduleRevision)
- }
-
def static writeRevision(Date moduleRevision, String moduleDescription) {
val revisionIndent = 12
'''
- revision «formatDate(moduleRevision)» {
+ revision «SimpleDateFormatUtil.getRevisionFormat.format(moduleRevision)» {
description "«formatToParagraph(moduleDescription, revisionIndent)»";
}
'''
'''
input {
- «IF input instanceof DataSchemaNode && !input.childNodes.nullOrEmpty»
+ «IF !input.childNodes.nullOrEmpty»
«writeDataSchemaNodes(input.childNodes)»
«ENDIF»
}
'''
output {
- «IF output instanceof DataSchemaNode && !output.childNodes.nullOrEmpty»
+ «IF !output.childNodes.nullOrEmpty»
«writeDataSchemaNodes(output.childNodes)»
«ENDIF»
}
'''
refine «path.pathFromRoot.last» {
«IF schemaNode instanceof DataSchemaNode»
- «writeDataSchemaNode(schemaNode as DataSchemaNode)»
+ «writeDataSchemaNode(schemaNode)»
«ENDIF»
}
'''
'''
}
- def static writeChoiceNode(ChoiceNode choiceNode) {
+ def static writeChoiceNode(ChoiceSchemaNode choiceNode) {
'''
choice «choiceNode.getQName.localName» {
«FOR child : choiceNode.cases»
def static CharSequence writeDataSchemaNode(DataSchemaNode child) {
'''
«IF child instanceof ContainerSchemaNode»
- «writeContSchemaNode(child as ContainerSchemaNode)»
+ «writeContSchemaNode(child)»
«ENDIF»
«IF child instanceof AnyXmlSchemaNode»
- «writeAnyXmlSchemaNode(child as AnyXmlSchemaNode)»
+ «writeAnyXmlSchemaNode(child)»
«ENDIF»
«IF child instanceof LeafSchemaNode»
- «writeLeafSchemaNode(child as LeafSchemaNode)»
+ «writeLeafSchemaNode(child)»
«ENDIF»
«IF child instanceof LeafListSchemaNode»
- «writeLeafListSchemaNode(child as LeafListSchemaNode)»
+ «writeLeafListSchemaNode(child)»
«ENDIF»
«IF child instanceof ChoiceCaseNode»
- «writeChoiceCaseNode(child as ChoiceCaseNode)»
+ «writeChoiceCaseNode(child)»
«ENDIF»
- «IF child instanceof ChoiceNode»
- «writeChoiceNode(child as ChoiceNode)»
+ «IF child instanceof ChoiceSchemaNode»
+ «writeChoiceNode(child)»
«ENDIF»
«IF child instanceof ListSchemaNode»
- «writeListSchemaNode(child as ListSchemaNode)»
+ «writeListSchemaNode(child)»
«ENDIF»
'''
}
val lineIndent = computeNextLineIndent(nextLineIndent);
formattedText = formattedText.replace("*/", "*/");
- formattedText = formattedText.replace("\n", "");
- formattedText = formattedText.replace("\t", "");
+ formattedText = NEWLINE_OR_TAB.removeFrom(formattedText);
formattedText = formattedText.replaceAll(" +", " ");
val StringTokenizer tokenizer = new StringTokenizer(formattedText, " ", true);
val ns = pathElement.namespace
val localName = pathElement.localName
- sb.append("\\")
- sb.append('(')
+ sb.append("\\(")
sb.append(ns)
sb.append(')')
sb.append(localName)