1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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);
}
}
}
|