private static void PersistModuleToFile(string folder, MibModule module, IObjectTree tree) { string fileName = Path.Combine(folder, module.Name + ".module"); using (StreamWriter writer = new StreamWriter(fileName)) { writer.Write("#"); foreach (string dependent in module.Dependents) { writer.Write(dependent); writer.Write(','); } writer.WriteLine(); foreach (IEntity entity in module.Entities) { IDefinition node = tree.Find(module.Name, entity.Name); if (node == null) { continue; } uint[] id = node.GetNumericalForm(); /* 0: id * 1: type * 2: name * 3: parent name */ writer.WriteLine(ObjectIdentifier.Convert(id) + "," + entity.GetType() + "," + entity.Name + "," + entity.Parent); } writer.Close(); } }
public void Add(MibModule module) { if (!string.IsNullOrEmpty(FileName)) { module.FileName = FileName; } _modules.Add(module); }
public MibTree(MibModule module) { IList<IEntity> entities = module.Entities; if (entities.Count > 0) { // try to find module identity as root foreach (IEntity element in entities) { ModuleIdentity mi = element as ModuleIdentity; if (mi != null) { _root.Add(new MibTreeNode(null, mi)); } } // gather all items below ModuleIdentity foreach (MibTreeNode mibTreeNode in _root) { entities.Remove (mibTreeNode.Entity); BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } // find OID assignments as root, if there are any that are not below ModuleIdentity // FIXME: There may be multiple OID assignments that create a tree (find the root ones!) foreach (IEntity element in entities) { OidValueAssignment oa = element as OidValueAssignment; if (oa != null) { _root.Add(new MibTreeNode(null, oa)); } } if (_root.Count == 0) { //no module identity, assume first entity is root _root.Add(new MibTreeNode(null, entities[0])); } foreach (MibTreeNode mibTreeNode in _root) { if (entities.Contains (mibTreeNode.Entity)) { entities.Remove (mibTreeNode.Entity); } BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } } }
private void Parse(MibModule module) { var watch = new Stopwatch(); watch.Start(); AddNodes(module); #if !MA && !MT Logger.InfoFormat(CultureInfo.InvariantCulture, "{0}-ms used to assemble {1}", watch.ElapsedMilliseconds, module.Name); #endif watch.Stop(); }
public MibTree(MibModule module) { IList <IEntity> entities = module.Entities; if (entities.Count > 0) { // try to find module identity as root foreach (IEntity element in entities) { ModuleIdentity mi = element as ModuleIdentity; if (mi != null) { _root.Add(new MibTreeNode(null, mi)); } } // gather all items below ModuleIdentity foreach (MibTreeNode mibTreeNode in _root) { entities.Remove(mibTreeNode.Entity); BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } // find OID assignments as root, if there are any that are not below ModuleIdentity // FIXME: There may be multiple OID assignments that create a tree (find the root ones!) foreach (IEntity element in entities) { OidValueAssignment oa = element as OidValueAssignment; if (oa != null) { _root.Add(new MibTreeNode(null, oa)); } } if (_root.Count == 0) { //no module identity, assume first entity is root _root.Add(new MibTreeNode(null, entities[0])); } foreach (MibTreeNode mibTreeNode in _root) { if (entities.Contains(mibTreeNode.Entity)) { entities.Remove(mibTreeNode.Entity); } BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } } }
internal static bool AllDependentsAvailable(MibModule module, IDictionary <string, MibModule> modules) { foreach (string dependent in module.Dependents) { if (!DependentFound(dependent, modules)) { return(false); } } return(true); }
public MibTree(MibModule module) { IList<IEntity> entities = module.Entities; if (entities.Count > 0) { // try to find module identity as root foreach (IEntity element in entities) { ModuleIdentity mi = element as ModuleIdentity; if (mi != null) { _root.Add(new MibTreeNode(null, mi)); } } // find OID assignments as root, if there are any that are not below ModuleIdentity foreach (IEntity element in entities) { OidValueAssignment oa = element as OidValueAssignment; if (oa != null) { _root.Add(new MibTreeNode(null, oa)); } } FilterRealRoots (entities); foreach (MibTreeNode mibTreeNode in _root) { entities.Remove (mibTreeNode.Entity); } if (_root.Count == 0) { //no module identity, assume first entity is root _root.Add(new MibTreeNode(null, entities[0])); } foreach (MibTreeNode mibTreeNode in _root) { if (entities.Contains (mibTreeNode.Entity)) { entities.Remove (mibTreeNode.Entity); } BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } } }
public MibTree(MibModule module) { IList <IEntity> entities = module.Entities; if (entities.Count > 0) { // try to find module identity as root foreach (IEntity element in entities) { ModuleIdentity mi = element as ModuleIdentity; if (mi != null) { _root.Add(new MibTreeNode(null, mi)); } } // find OID assignments as root, if there are any that are not below ModuleIdentity foreach (IEntity element in entities) { OidValueAssignment oa = element as OidValueAssignment; if (oa != null) { _root.Add(new MibTreeNode(null, oa)); } } FilterRealRoots(entities); foreach (MibTreeNode mibTreeNode in _root) { entities.Remove(mibTreeNode.Entity); } if (_root.Count == 0) { //no module identity, assume first entity is root _root.Add(new MibTreeNode(null, entities[0])); } foreach (MibTreeNode mibTreeNode in _root) { if (entities.Contains(mibTreeNode.Entity)) { entities.Remove(mibTreeNode.Entity); } BuildTree(mibTreeNode, entities); UpdateTreeNodeTypes(mibTreeNode); } } }
private bool CanParse(MibModule module) { if (!MibModule.AllDependentsAvailable(module, _loaded)) { return(false); } bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now. if (!exists) { _loaded.Add(module.Name, module); } return(true); }
private void Import(MibModule module) { if (module == null) { throw new ArgumentNullException("module"); } if (LoadedModules.Contains(module.Name) || PendingModules.Contains(module.Name)) { //Logger.InfoFormat(CultureInfo.InvariantCulture, "{0} ignored", module.Name); } else { _pendings.Add(module.Name, module); } }
private bool CanParse(MibModule module) { if (!module.Validate(_loaded)) { return(false); } bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now. if (!exists) { _loaded.Add(module.Name, module); } return(true); }
public ModuleLoader(TextReader reader, string moduleName) { _nodes = new List<Definition>(); _dependents = new List<string>(); string line; while ((line = reader.ReadLine()) != null) { if (line.StartsWith("#", StringComparison.Ordinal)) { _dependents.AddRange(ParseDependents(line)); continue; } _nodes.Add(ParseLine(line, moduleName)); } _module = new MibModule(moduleName, _dependents); }
public ModuleLoader(TextReader reader, string moduleName) { _nodes = new List <Definition>(); _dependents = new List <string>(); string line; while ((line = reader.ReadLine()) != null) { if (line.StartsWith("#", StringComparison.Ordinal)) { _dependents.AddRange(ParseDependents(line)); continue; } _nodes.Add(ParseLine(line, moduleName)); } _module = new MibModule(moduleName, _dependents); }
private void Import(MibModule module) { if (module == null) { throw new ArgumentNullException("module"); } if (_loaded.ContainsKey(module.Name)) { #if !MA && !MT Logger.Info(module.ReportDuplicate(_loaded[module.Name])); #endif } else if (_pendings.ContainsKey(module.Name)) { #if !MA && !MT Logger.Info(module.ReportDuplicate(_pendings[module.Name])); #endif } else { _pendings.Add(module.Name, module); } }
internal static bool AllDependentsAvailable(MibModule module, IDictionary <string, MibModule> modules) { return(module.Dependents.All(dependent => DependentFound(dependent, modules))); }
private void Import(MibModule module) { if (module == null) { throw new ArgumentNullException("module"); } if (_loaded.ContainsKey(module.Name)) { #if !MA Logger.Info(module.ReportDuplicate(_loaded[module.Name])); #endif } else if (_pendings.ContainsKey(module.Name)) { #if !MA Logger.Info(module.ReportDuplicate(_pendings[module.Name])); #endif } else { _pendings.Add(module.Name, module); } }
private void AddNodes(MibModule module) { var pendingNodes = new List <IEntity>(); // parse all direct nodes. foreach (IEntity node in module.Entities) { if (node.Parent.Contains(".")) { pendingNodes.Add(node); continue; } Definition result = CreateSelf(node); if (result == null) { pendingNodes.Add(node); continue; } AddToTable(result); } // parse indirect nodes. int current = pendingNodes.Count; while (current != 0) { var parsed = new List <IEntity>(); int previous = current; foreach (IEntity node in pendingNodes) { if (node.Parent.Contains(".")) { if (!FirstNodeExists(node)) { // wait till first node available. continue; } // create all place holders. IDefinition unknown = CreateExtraNodes(module, node.Parent); if (unknown != null) { node.Parent = unknown.Name; AddToTable(CreateSelf(node)); } } else { Definition result = CreateSelf(node); if (result == null) { // wait for parent continue; } AddToTable(result); } parsed.Add(node); } foreach (IEntity en in parsed) { pendingNodes.Remove(en); } current = pendingNodes.Count; if (previous == current) { break; } } }
private void Parse(MibModule module) { var watch = new Stopwatch(); watch.Start(); AddNodes(module); #if !MA Logger.InfoFormat(CultureInfo.InvariantCulture, "{0}-ms used to assemble {1}", watch.ElapsedMilliseconds, module.Name); #endif watch.Stop(); }
private void Import(MibModule module) { if (module == null) { throw new ArgumentNullException("module"); } if (LoadedModules.Contains(module.Name) || PendingModules.Contains(module.Name)) { Logger.InfoFormat(CultureInfo.InvariantCulture, "{0} ignored", module.Name); } else { _pendings.Add(module.Name, module); } }
internal static bool AllDependentsAvailable(MibModule module, IDictionary<string, MibModule> modules) { foreach (string dependent in module.Dependents) { if (!DependentFound(dependent, modules)) { return false; } } return true; }
public string ReportDuplicate(MibModule existing) { return string.IsNullOrEmpty(FileName) ? string.Format("warning N0002 : {0} is duplicate of {1}", Name, existing.FileName) : string.Format("{0} : warning N0002 : {1} is duplicate of {2}", FileName, Name, existing.FileName); }
public string ReportDuplicate(MibModule existing) { return(string.IsNullOrEmpty(FileName) ? string.Format("warning N0002 : {0} is duplicate of {1}", Name, existing.FileName) : string.Format("{0} : warning N0002 : {1} is duplicate of {2}", FileName, Name, existing.FileName)); }
private void AddNodes(MibModule module) { var pendingNodes = new List<IEntity>(); // parse all direct nodes. foreach (IEntity node in module.Entities) { if (node.Parent.Contains(".")) { pendingNodes.Add(node); continue; } Definition result = CreateSelf(node); if (result == null) { pendingNodes.Add(node); continue; } AddToTable(result); } // parse indirect nodes. int current = pendingNodes.Count; while (current != 0) { var parsed = new List<IEntity>(); int previous = current; foreach (IEntity node in pendingNodes) { if (node.Parent.Contains(".")) { if (!FirstNodeExists(node)) { // wait till first node available. continue; } // create all place holders. IDefinition unknown = CreateExtraNodes(module, node.Parent); if (unknown != null) { node.Parent = unknown.Name; AddToTable(CreateSelf(node)); } } else { Definition result = CreateSelf(node); if (result == null) { // wait for parent continue; } AddToTable(result); } parsed.Add(node); } foreach (IEntity en in parsed) { pendingNodes.Remove(en); } current = pendingNodes.Count; if (previous == current) { break; } } }
private Definition CreateExtraNodes(MibModule module, string longParent) { string[] content = longParent.Split('.'); Definition node = Find(ExtractName(content[0])); uint[] rootId = node.GetNumericalForm(); var all = new uint[content.Length + rootId.Length - 1]; for (int j = rootId.Length - 1; j >= 0; j--) { all[j] = rootId[j]; } // change all to numerical for (int i = 1; i < content.Length; i++) { uint value; bool numberFound = UInt32.TryParse(content[i], out value); int currentCursor = rootId.Length + i - 1; if (numberFound) { all[currentCursor] = value; node = Find(ExtractParent(all, currentCursor + 1)); if (node != null) { continue; } IDefinition subroot = Find(ExtractParent(all, currentCursor)); // if not, create Prefix node. var prefix = new ObjectIdentifierType(module.Name, subroot.Name + "_" + value.ToString(CultureInfo.InvariantCulture), subroot.Name, value); #if !MA Logger.Info(module.ReportImplicitObjectIdentifier(prefix)); #endif node = CreateSelf(prefix); AddToTable(node); } else { string self = content[i]; string parent = content[i - 1]; var extra = new ObjectIdentifierType(module.Name, ExtractName(self), ExtractName(parent), ExtractValue(self)); node = CreateSelf(extra); if (node != null) { #if !MA Logger.Info(module.ReportImplicitObjectIdentifier(extra)); #endif AddToTable(node); all[currentCursor] = node.Value; } else { #if !MA Logger.Info(module.ReportIgnoredImplicitEntity(longParent)); #endif } } } return node; }
private Definition CreateExtraNodes(MibModule module, string longParent) { string[] content = longParent.Split('.'); Definition node = Find(ExtractName(content[0])); uint[] rootId = node.GetNumericalForm(); var all = new uint[content.Length + rootId.Length - 1]; for (int j = rootId.Length - 1; j >= 0; j--) { all[j] = rootId[j]; } // change all to numerical for (int i = 1; i < content.Length; i++) { uint value; bool numberFound = uint.TryParse(content[i], out value); int currentCursor = rootId.Length + i - 1; if (numberFound) { all[currentCursor] = value; node = Find(ExtractParent(all, currentCursor + 1)); if (node != null) { continue; } IDefinition subroot = Find(ExtractParent(all, currentCursor)); // if not, create Prefix node. var prefix = new ObjectIdentifierType(module.Name, subroot.Name + "_" + value.ToString(CultureInfo.InvariantCulture), subroot.Name, value); #if !MA && !MT Logger.Info(module.ReportImplicitObjectIdentifier(prefix)); #endif node = CreateSelf(prefix); AddToTable(node); } else { string self = content[i]; string parent = content[i - 1]; var extra = new ObjectIdentifierType(module.Name, ExtractName(self), ExtractName(parent), ExtractValue(self)); node = CreateSelf(extra); if (node != null) { #if !MA && !MT Logger.Info(module.ReportImplicitObjectIdentifier(extra)); #endif AddToTable(node); all[currentCursor] = node.Value; } else { #if !MA && !MT Logger.Info(module.ReportIgnoredImplicitEntity(longParent)); #endif } } } return(node); }
internal static bool AllDependentsAvailable(MibModule module, IDictionary<string, MibModule> modules) { return module.Dependents.All(dependent => DependentFound(dependent, modules)); }
private bool CanParse(MibModule module) { if (!module.Validate(_loaded)) { return false; } bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now. if (!exists) { _loaded.Add(module.Name, module); } return true; }
private bool CanParse(MibModule module) { if (!MibModule.AllDependentsAvailable(module, _loaded)) { return false; } bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now. if (!exists) { _loaded.Add(module.Name, module); } return true; }