1 using System; 2 using System.Collections.Generic; 3 using Lextm.SharpSnmpLib.Mib.Elements.Entities; 4 using Lextm.SharpSnmpLib.Mib.Elements.Types; 5 6 namespace Lextm.SharpSnmpLib.Mib 7 { 8 [Flags] 9 public enum MibTreeNodeType 10 { 11 Unknown = 0, 12 Container = (1 << 0), 13 Scalar = (1 << 1), 14 Table = (1 << 2), 15 TableRow = (1 << 3), 16 TableCell = (1 << 4), 17 NotificationRelated = (1 << 5), 18 ConformanceRelated = (1 << 6) 19 } 20 21 22 public class MibTreeNode 23 { 24 private MibTreeNode _parent = null; 25 private List<MibTreeNode> _childNodes = new List<MibTreeNode>(); 26 private IEntity _entity = null; 27 private MibTreeNodeType _nodeType = MibTreeNodeType.Unknown; 28 MibTreeNode(MibTreeNode parent, IEntity entity)29 public MibTreeNode(MibTreeNode parent, IEntity entity) 30 { 31 _parent = parent; 32 _entity = entity; 33 } 34 35 public MibTreeNode Parent 36 { 37 get { return _parent; } 38 } 39 40 public IEntity Entity 41 { 42 get { return _entity; } 43 } 44 45 public MibTreeNodeType NodeType 46 { 47 get { return _nodeType; } 48 } 49 50 public List<MibTreeNode> ChildNodes 51 { 52 get { return _childNodes; } 53 } 54 AddChild(IEntity element)55 public MibTreeNode AddChild(IEntity element) 56 { 57 MibTreeNode result = new MibTreeNode(this, element); 58 this.ChildNodes.Add(result); 59 60 return result; 61 } 62 UpdateNodeType()63 public void UpdateNodeType() 64 { 65 _nodeType = MibTreeNodeType.Unknown; 66 67 if (_entity != null) 68 { 69 if ((_entity is OidValueAssignment) || (_entity is ObjectIdentity)) 70 { 71 _nodeType |= MibTreeNodeType.Container; 72 return; 73 } 74 else if (_childNodes.Count > 0) 75 { 76 _nodeType |= MibTreeNodeType.Container; 77 } 78 79 if (_entity is ObjectType) 80 { 81 ObjectType ot = _entity as ObjectType; 82 83 if (ot.Syntax is SequenceOf) 84 { 85 _nodeType |= MibTreeNodeType.Table; 86 } 87 else if (ot.Syntax is Sequence) 88 { 89 _nodeType |= MibTreeNodeType.TableRow; 90 } 91 else if ((_parent != null) && ((_parent.NodeType & MibTreeNodeType.TableRow) != 0)) 92 { 93 _nodeType |= MibTreeNodeType.TableCell; 94 _nodeType |= MibTreeNodeType.Scalar; 95 } 96 else 97 { 98 _nodeType |= MibTreeNodeType.Scalar; 99 } 100 } 101 else if ((_entity is ModuleCompliance) || (_entity is ObjectGroup) || (_entity is NotificationGroup)) 102 { 103 _nodeType |= MibTreeNodeType.ConformanceRelated; 104 } 105 else if ((_entity is NotificationGroup) || (_entity is NotificationType)) 106 { 107 _nodeType |= MibTreeNodeType.NotificationRelated; 108 } 109 } 110 } 111 } 112 } 113