summaryrefslogtreecommitdiffstats
path: root/common/src/main/java/org/openecomp/mso/yangDecoder/transform/impl/NormalizedNodeNavigator.java
blob: c585529cf278d1a84ca7a71af2fbb818756eec1c (plain)
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);
        }

    }
}