source: azure_iot_hub_f767zi/trunk/asp_baseplatform/lwip/contrib-2.1.0/apps/LwipMibCompiler/SharpSnmpLib/Mib/MibTree.cs@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csharp;charset=UTF-8
File size: 3.5 KB
RevLine 
[457]1using System.Collections.Generic;
2using Lextm.SharpSnmpLib.Mib.Elements.Entities;
3
4namespace Lextm.SharpSnmpLib.Mib
5{
6 /// <summary>
7 /// Builds up a tree from a single MIB
8 /// </summary>
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 // find OID assignments as root, if there are any that are not below ModuleIdentity
31 foreach (IEntity element in entities)
32 {
33 OidValueAssignment oa = element as OidValueAssignment;
34
35 if (oa != null)
36 {
37 _root.Add(new MibTreeNode(null, oa));
38 }
39 }
40
41 FilterRealRoots (entities);
42
43 foreach (MibTreeNode mibTreeNode in _root)
44 {
45 entities.Remove (mibTreeNode.Entity);
46 }
47
48 if (_root.Count == 0)
49 {
50 //no module identity, assume first entity is root
51 _root.Add(new MibTreeNode(null, entities[0]));
52 }
53
54 foreach (MibTreeNode mibTreeNode in _root)
55 {
56 if (entities.Contains (mibTreeNode.Entity))
57 {
58 entities.Remove (mibTreeNode.Entity);
59 }
60 BuildTree(mibTreeNode, entities);
61 UpdateTreeNodeTypes(mibTreeNode);
62 }
63 }
64 }
65
66 public IList<MibTreeNode> Root
67 {
68 get { return _root; }
69 }
70
71 private bool EntityExists(IList<IEntity> entities, string name)
72 {
73 foreach(IEntity entity in entities)
74 {
75 if (entity.Name == name)
76 {
77 return true;
78 }
79 }
80 return false;
81 }
82
83 private void FilterRealRoots(IList<IEntity> entities)
84 {
85 int i = 0;
86 while (i < _root.Count)
87 {
88 if (EntityExists(entities, _root[i].Entity.Parent))
89 {
90 _root.RemoveAt(i);
91 }
92 else
93 {
94 i++;
95 }
96 }
97 }
98
99 private void BuildTree(MibTreeNode node, IList<IEntity> entities)
100 {
101 int i = 0;
102 while (i < entities.Count)
103 {
104 if (entities[i].Parent == node.Entity.Name)
105 {
106 node.AddChild(entities[i]);
107 entities.RemoveAt(i);
108 }
109 else
110 {
111 i++;
112 }
113 }
114
115 foreach (MibTreeNode childNode in node.ChildNodes)
116 {
117 BuildTree(childNode, entities);
118 }
119 }
120
121 private void UpdateTreeNodeTypes(MibTreeNode node)
122 {
123 node.UpdateNodeType();
124 foreach (MibTreeNode childNode in node.ChildNodes)
125 {
126 UpdateTreeNodeTypes(childNode);
127 }
128 }
129 }
130}
Note: See TracBrowser for help on using the repository browser.