diff options
author | Zhuoyao Huang <10112215@zte.com.cn> | 2017-09-23 14:43:23 +0800 |
---|---|---|
committer | Zhuoyao Huang <10112215@zte.com.cn> | 2017-09-23 14:45:49 +0800 |
commit | 8de219f6b04458d40d4229c7ec2beda7e3f262b3 (patch) | |
tree | 74f770787244837a56924e1d5307cfd9be287e85 /common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java | |
parent | 3069884affc18e293686692c291fcb21f2ddf024 (diff) |
Yang decoder
Change-Id: I4e264c33915969f883ebc3721e7020fb1256682c
Issue-ID: SO-88
Signed-off-by: Zhuoyao Huang <10112215@zte.com.cn>
description: It could help SO to use the restconf interface which is generated by yang-tools in SDN-C directly.
Diffstat (limited to 'common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java')
-rw-r--r-- | common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java b/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java new file mode 100644 index 0000000000..c585529cf2 --- /dev/null +++ b/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java @@ -0,0 +1,91 @@ +package org.openecomp.mso.yangDecoder.transform.impl; + +import com.google.common.base.Preconditions; +import org.openecomp.mso.yangDecoder.transform.api.NormalizedNodeVisitor; +import org.opendaylight.yangtools.yang.data.api.schema.*; + +import java.util.Collection; +import java.util.Iterator; + +/** + * Created by 10036837 on 16-7-22. + */ +public class NormalizedNodeNavigator { + private final NormalizedNodeVisitor visitor; + + public NormalizedNodeNavigator(NormalizedNodeVisitor visitor) { + Preconditions.checkNotNull(visitor, "visitor should not be null"); + this.visitor = visitor; + } + + public void navigate(String parentPath, NormalizedNode<?, ?> normalizedNode) { + if (parentPath == null) { + parentPath = ""; + } + + this.navigateNormalizedNode(0, parentPath, normalizedNode); + + } + + private void navigateDataContainerNode(int level, String parentPath, DataContainerNode<?> dataContainerNode) { + this.visitor.visitNode(level, parentPath, dataContainerNode, true); + String newParentPath = parentPath + "/" + dataContainerNode.getIdentifier().toString(); + Collection value = dataContainerNode.getValue(); + Iterator var6 = value.iterator(); + + while (var6.hasNext()) { + NormalizedNode node = (NormalizedNode) var6.next(); + if (node instanceof MixinNode && node instanceof NormalizedNodeContainer) { + this.navigateNormalizedNodeContainerMixin(level, newParentPath, (NormalizedNodeContainer) node); + } else { + this.navigateNormalizedNode(level, newParentPath, node); + } + } + this.visitor.visitNode(level, parentPath, dataContainerNode, false); + } + + private void navigateOrderedNodeContainer(int level, String parentPath, OrderedNodeContainer<?> node) { + String newParentPath = parentPath + "/" + node.getIdentifier().toString(); + Collection value = node.getValue(); + Iterator var6 = value.iterator(); + + while (var6.hasNext()) { + NormalizedNode normalizedNode = (NormalizedNode) var6.next(); + if (normalizedNode instanceof OrderedNodeContainer) { + this.navigateOrderedNodeContainer(level, newParentPath, (OrderedNodeContainer) normalizedNode); + } else { + this.navigateNormalizedNode(level, newParentPath, normalizedNode); + } + } + + } + + private void navigateNormalizedNodeContainerMixin(int level, String parentPath, NormalizedNodeContainer<?, ?, ?> node) { + + String newParentPath = parentPath + "/" + node.getIdentifier().toString(); + Collection value = node.getValue(); + Iterator var6 = value.iterator(); + + while (var6.hasNext()) { + NormalizedNode normalizedNode = (NormalizedNode) var6.next(); + if (normalizedNode instanceof MixinNode && normalizedNode instanceof NormalizedNodeContainer) { + this.navigateNormalizedNodeContainerMixin(level, newParentPath, (NormalizedNodeContainer) normalizedNode); + } else { + this.navigateNormalizedNode(level, newParentPath, normalizedNode); + } + } + + } + + private void navigateNormalizedNode(int level, String parentPath, NormalizedNode<?, ?> normalizedNode) { + if (normalizedNode instanceof DataContainerNode) { + DataContainerNode dataContainerNode = (DataContainerNode) normalizedNode; + this.navigateDataContainerNode(level+1, parentPath, dataContainerNode); + } else if (normalizedNode instanceof OrderedNodeContainer) { + this.navigateOrderedNodeContainer(level, parentPath, (OrderedNodeContainer) normalizedNode); + } else { + this.visitor.visitNode(level + 1, parentPath, normalizedNode, false); + } + + } +} |