MibTreeNode.cs 3.3 KB

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