File: MibTreeNode.cs

package info (click to toggle)
lwip 2.2.1%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 10,008 kB
  • sloc: ansic: 109,524; cs: 6,714; sh: 115; makefile: 112; perl: 81
file content (112 lines) | stat: -rw-r--r-- 3,373 bytes parent folder | download | duplicates (2)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using System;
using System.Collections.Generic;
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
using Lextm.SharpSnmpLib.Mib.Elements.Types;

namespace Lextm.SharpSnmpLib.Mib
{
    [Flags]
    public enum MibTreeNodeType
    {
        Unknown             = 0,
        Container           = (1 << 0),
        Scalar              = (1 << 1),
        Table               = (1 << 2),
        TableRow            = (1 << 3),
        TableCell           = (1 << 4),
        NotificationRelated = (1 << 5),
        ConformanceRelated  = (1 << 6)
    }


    public class MibTreeNode
    {
        private MibTreeNode       _parent     = null;
        private List<MibTreeNode> _childNodes = new List<MibTreeNode>();
        private IEntity           _entity     = null;
        private MibTreeNodeType   _nodeType   = MibTreeNodeType.Unknown;

        public MibTreeNode(MibTreeNode parent, IEntity entity)
        {
            _parent = parent;
            _entity = entity;
        }

        public MibTreeNode Parent
        {
            get { return _parent; }
        }

        public IEntity Entity
        {
            get { return _entity; }
        }

        public MibTreeNodeType NodeType
        {
            get { return _nodeType; }
        }

        public List<MibTreeNode> ChildNodes
        {
            get { return _childNodes; }
        }

        public MibTreeNode AddChild(IEntity element)
        {
            MibTreeNode result = new MibTreeNode(this, element);
            this.ChildNodes.Add(result);

            return result;
        }

        public void UpdateNodeType()
        {
            _nodeType = MibTreeNodeType.Unknown;

            if (_entity != null)
            {
                if ((_entity is OidValueAssignment) || (_entity is ObjectIdentity))
                {
                    _nodeType |= MibTreeNodeType.Container;
                    return;
                }
                else if (_childNodes.Count > 0)
                {
                    _nodeType |= MibTreeNodeType.Container;
                }

                if (_entity is ObjectType)
                {
                    ObjectType ot = _entity as ObjectType;

                    if (ot.Syntax is SequenceOf)
                    {
                        _nodeType |= MibTreeNodeType.Table;
                    }
                    else if (ot.Syntax is Sequence)
                    {
                        _nodeType |= MibTreeNodeType.TableRow;
                    }
                    else if ((_parent != null) && ((_parent.NodeType & MibTreeNodeType.TableRow) != 0))
                    {
                        _nodeType |= MibTreeNodeType.TableCell;
                        _nodeType |= MibTreeNodeType.Scalar;
                    }
                    else
                    {
                        _nodeType |= MibTreeNodeType.Scalar;
                    }
                }
                else if ((_entity is ModuleCompliance) || (_entity is ObjectGroup) || (_entity is NotificationGroup))
                {
                    _nodeType |= MibTreeNodeType.ConformanceRelated;
                }
                else if ((_entity is NotificationGroup) || (_entity is NotificationType))
                {
                    _nodeType |= MibTreeNodeType.NotificationRelated;
                }
            }
        }
    }
}