2 * Copyright (c) 2016 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
9 @**********************************************************
10 * Twirl YangTemplate for generating yang snippets. *
11 * Twirl is transformed to Scala and compiled. Then, *
12 * it can be called from Java with particular input *
13 * parameters to render desired output code. *
15 * Note: we should introduce our own format instead of txt *
16 ***********************************************************@
18 @import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode
19 @import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode
20 @import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode
21 @import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
22 @import org.opendaylight.yangtools.yang.model.api.DataSchemaNode
23 @import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode
24 @import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode
25 @import org.opendaylight.yangtools.yang.model.api.ListSchemaNode
26 @import org.opendaylight.yangtools.yang.model.api.SchemaNode
27 @import org.opendaylight.yangtools.yang.model.api.Status
28 @import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode
30 @(dataSchemaNode: DataSchemaNode)
31 @if(dataSchemaNode.isInstanceOf[ContainerSchemaNode]) {
32 @writeContSchemaNode(dataSchemaNode.asInstanceOf[ContainerSchemaNode])
34 @if(dataSchemaNode.isInstanceOf[AnyXmlSchemaNode]) {
35 anyxml @{dataSchemaNode.asInstanceOf[AnyXmlSchemaNode].getQName().getLocalName()}
36 @if(dataSchemaNode.asInstanceOf[AnyXmlSchemaNode].getStatus() != Status.CURRENT) {
40 status @{dataSchemaNode.asInstanceOf[AnyXmlSchemaNode].getStatus()};
44 @if(dataSchemaNode.isInstanceOf[LeafSchemaNode]) {
45 leaf @{dataSchemaNode.asInstanceOf[LeafSchemaNode].getQName().getLocalName()} {
46 type @{dataSchemaNode.asInstanceOf[LeafSchemaNode].getType().getQName().getLocalName()};
48 @if(dataSchemaNode.asInstanceOf[LeafSchemaNode].getStatus() != Status.CURRENT) {
49 status @{dataSchemaNode.asInstanceOf[LeafSchemaNode].getStatus()};
52 @if(dataSchemaNode.isInstanceOf[LeafListSchemaNode]) {
53 leaf-list @{dataSchemaNode.asInstanceOf[LeafListSchemaNode].getQName().getLocalName()} {
54 type @{dataSchemaNode.asInstanceOf[LeafListSchemaNode].getType().getQName().getLocalName()};
56 @if(dataSchemaNode.asInstanceOf[LeafListSchemaNode].getStatus() != Status.CURRENT) {
57 status @{dataSchemaNode.asInstanceOf[LeafListSchemaNode].getStatus()};
60 @if(dataSchemaNode.isInstanceOf[ChoiceCaseNode]) {
61 case @{dataSchemaNode.asInstanceOf[ChoiceCaseNode].getQName().getLocalName()} {
62 @for(childNode <- dataSchemaNode.asInstanceOf[ChoiceCaseNode].getChildNodes()) {
63 @yangTemplateWriteDataSchemaNode(childNode)
66 @if(dataSchemaNode.asInstanceOf[ChoiceCaseNode].getStatus() != Status.CURRENT) {
67 status @{dataSchemaNode.asInstanceOf[ChoiceCaseNode].getStatus()};
70 @if(dataSchemaNode.isInstanceOf[ChoiceSchemaNode]) {
71 choice @{dataSchemaNode.asInstanceOf[ChoiceSchemaNode].getQName().getLocalName()} {
72 @for(childNode <- dataSchemaNode.asInstanceOf[ChoiceSchemaNode].getCases()) {
73 @yangTemplateWriteDataSchemaNode(childNode)
76 @if(dataSchemaNode.asInstanceOf[ChoiceSchemaNode].getStatus() != Status.CURRENT) {
77 status @{dataSchemaNode.asInstanceOf[ChoiceSchemaNode].getStatus()};
80 @if(dataSchemaNode.isInstanceOf[ListSchemaNode]) {
81 @writeListSchemaNode(dataSchemaNode.asInstanceOf[ListSchemaNode])
84 @writeContSchemaNode(container: ContainerSchemaNode) = {
85 container @{container.getQName().getLocalName()} {
86 @if(container.getChildNodes() != null && !container.getChildNodes().isEmpty()) {
87 @yangTemplateWriteDataSchemaNodes(container.getChildNodes())
89 @if(container.getAvailableAugmentations() != null && !container.getAvailableAugmentations().isEmpty()) {
90 @yangTemplateWriteAugments(container.getAvailableAugmentations())
92 @if(container.getGroupings() != null && !container.getGroupings().isEmpty()) {
93 @yangTemplateWriteGroupingDefs(container.getGroupings())
95 @if(container.getUses() != null && !container.getUses().isEmpty()) {
96 @yangTemplateWriteUsesNodes(container.getUses())
98 @if(container.getStatus() != Status.CURRENT) {
99 status @{container.getStatus()};
101 @if(container.getUnknownSchemaNodes() != null && !container.getUnknownSchemaNodes().isEmpty()) {
102 @yangTemplateWriteUnknownSchemaNodes(container.getUnknownSchemaNodes())
107 @writeListSchemaNode(list: ListSchemaNode) = {
108 list @{list.getQName().getLocalName()} {
109 key "@for(listKey <- list.getKeyDefinition()) {
110 @{listKey.getLocalName()}
112 @if(list.getChildNodes() != null && !list.getChildNodes().isEmpty()) {
113 @yangTemplateWriteDataSchemaNodes(list.getChildNodes())
115 @if(list.getAvailableAugmentations() != null && !list.getAvailableAugmentations().isEmpty()) {
116 @yangTemplateWriteAugments(list.getAvailableAugmentations())
118 @if(list.getGroupings() != null && !list.getGroupings().isEmpty()) {
119 @yangTemplateWriteGroupingDefs(list.getGroupings())
121 @if(list.getUses() != null && !list.getUses().isEmpty()) {
122 @yangTemplateWriteUsesNodes(list.getUses())
124 @if(list.getStatus() != Status.CURRENT) {
125 status @{list.getStatus()};
127 @if(list.getUnknownSchemaNodes() != null && !list.getUnknownSchemaNodes().isEmpty()) {
128 @yangTemplateWriteUnknownSchemaNodes(list.getUnknownSchemaNodes())