STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
MibTree.cs
Go to the documentation of this file.
1 using System.Collections.Generic;
3 
4 namespace Lextm.SharpSnmpLib.Mib
5 {
9  public class MibTree
10  {
11  private readonly List<MibTreeNode> _root = new List<MibTreeNode>();
12 
13  public MibTree(MibModule module)
14  {
15  IList<IEntity> entities = module.Entities;
16 
17  if (entities.Count > 0)
18  {
19  // try to find module identity as root
20  foreach (IEntity element in entities)
21  {
22  ModuleIdentity mi = element as ModuleIdentity;
23 
24  if (mi != null)
25  {
26  _root.Add(new MibTreeNode(null, mi));
27  }
28  }
29 
30  // gather all items below ModuleIdentity
31  foreach (MibTreeNode mibTreeNode in _root)
32  {
33  entities.Remove (mibTreeNode.Entity);
34  BuildTree(mibTreeNode, entities);
35  UpdateTreeNodeTypes(mibTreeNode);
36  }
37 
38  // find OID assignments as root, if there are any that are not below ModuleIdentity
39  // FIXME: There may be multiple OID assignments that create a tree (find the root ones!)
40  foreach (IEntity element in entities)
41  {
42  OidValueAssignment oa = element as OidValueAssignment;
43 
44  if (oa != null)
45  {
46  _root.Add(new MibTreeNode(null, oa));
47  }
48  }
49 
50  if (_root.Count == 0)
51  {
52  //no module identity, assume first entity is root
53  _root.Add(new MibTreeNode(null, entities[0]));
54  }
55 
56  foreach (MibTreeNode mibTreeNode in _root)
57  {
58  if (entities.Contains (mibTreeNode.Entity))
59  {
60  entities.Remove (mibTreeNode.Entity);
61  }
62  BuildTree(mibTreeNode, entities);
63  UpdateTreeNodeTypes(mibTreeNode);
64  }
65  }
66  }
67 
68  public IList<MibTreeNode> Root
69  {
70  get { return _root; }
71  }
72 
73 
74  private void BuildTree(MibTreeNode node, IList<IEntity> entities)
75  {
76  int i = 0;
77  while (i < entities.Count)
78  {
79  if (entities[i].Parent == node.Entity.Name)
80  {
81  node.AddChild(entities[i]);
82  entities.RemoveAt(i);
83  }
84  else
85  {
86  i++;
87  }
88  }
89 
90  foreach (MibTreeNode childNode in node.ChildNodes)
91  {
92  BuildTree(childNode, entities);
93  }
94  }
95 
96  private void UpdateTreeNodeTypes(MibTreeNode node)
97  {
98  node.UpdateNodeType();
99  foreach (MibTreeNode childNode in node.ChildNodes)
100  {
101  UpdateTreeNodeTypes(childNode);
102  }
103  }
104  }
105 }
List< MibTreeNode > ChildNodes
Definition: MibTreeNode.cs:51
MibTree(MibModule module)
Definition: MibTree.cs:13
IList< IEntity > Entities
OID nodes.
Definition: MibModule.cs:122
Builds up a tree from a single MIB
Definition: MibTree.cs:9
MibTreeNode AddChild(IEntity element)
Definition: MibTreeNode.cs:55
Basic interface for all elements building up the MIB tree, thus having an OID as value.
Definition: IEntity.cs:34