public MsiRecord_Directories GetRecord_Directories() { ModuleProc PROC = new ModuleProc(this.DYN_MODULE_NAME, "GetRecord_Directories"); MsiRecord_Directories result = new MsiRecord_Directories(); try { MsiRecords records = this.ExecuteQuery("SELECT * FROM `Directory`"); foreach (MsiRecord record in records) { if (record.Count == 3) { MsiRecord_Directory file = new MsiRecord_Directory() { Directory = record[0], ParentDirectory = record[1], DefaultPath = new MsiFieldParts(record[2]), }; result.Add(file); } } result = new MsiRecord_Directories((from r in result orderby r.Directory select r)); } catch (Exception ex) { Log.Exception(PROC, ex); } return(result); }
public MsiRecord_Directories GetRecord_DirectoriesHierarchy() { ModuleProc PROC = new ModuleProc(this.DYN_MODULE_NAME, "GetRecord_DirectoriesHierarchy"); MsiRecord_Directories result = null; try { //IDictionary<string, MsiRecord> dict = new SortedDictionary<string, MsiRecord>(StringComparer.InvariantCultureIgnoreCase); //IDictionary<string, DirItem> dict2 = new SortedDictionary<string, DirItem>(StringComparer.InvariantCultureIgnoreCase); MsiRecordHierarchies root = new MsiRecordHierarchies(); MsiRecord_Directories directories = this.GetRecord_Directories(); foreach (var directory in directories) { string parent = directory.ParentDirectory; string child = directory.Directory; IMsiRecordHierarchy parentItem = null; IMsiRecordHierarchy childItem = null; // parent item if (!root.ContainsKey(parent)) { // push all the nodes MsiRecordHierarchies found = root; IMsiRecordHierarchy current = null; if (root.Count > 0) { Stack <IMsiRecordHierarchy> st = new Stack <IMsiRecordHierarchy>(); foreach (var node in root.Values) { st.Push(node); } while (st.Count != 0) { current = st.Pop(); if (current.Children.ContainsKey(parent)) { found = current.Children; break; } foreach (var node in current.Children.Values) { st.Push(node); } } } if (found != null) { parentItem = new MsiRecordHierarchy(parent); found.Add(parentItem.HierarchyKey, parentItem); } } else { parentItem = root[parent]; } // remove the child item from the root dictionary if (root.ContainsKey(child)) { root.Remove(child); } // child item if (!parentItem.Children.ContainsKey(child)) { childItem = new MsiRecordHierarchy(child); parentItem.Children.Add(childItem.HierarchyKey, childItem); } else { childItem = parentItem.Children[child]; } //DirItem parentItem = null; //DirItem childItem = null; //if (!dict2.ContainsKey(parent)) //{ // parentItem = new DirItem(parent); // dict2.Add(parent, parentItem); //} //else //{ // parentItem = dict2[parent]; //} //if (!dict2.ContainsKey(child)) //{ // childItem = new DirItem(child); // dict2.Add(child, childItem); //} //else //{ // childItem = dict2[child]; //} //parentItem.Children.Add(childItem); //if (!dict.ContainsKey(child)) //{ // dict.Add(child, new MsiRecord()); //} //if (!dict.ContainsKey(parent)) //{ // dict.Add(parent, new MsiRecord()); //} //dict[parent].Add(child); } int i = 6; //foreach (var directory in directories) //{ // string dir = directory.Directory; // if (!dirOrder.ContainsKey(dir)) // { // //directory.Order = 1; // dirOrder.Add(dir, -1); // } //} //foreach (var directory in directories) //{ // string child = directory.Directory; // string parent = directory.ParentDirectory; // int parentIndex = dirOrder[parent]; // if (parentIndex == -1) // { // int count = dirList.Count; // dirList.Add(parent); // dirOrder[parent] = (parentIndex = count); // } // int childIndex = (parentIndex + 1); // if (childIndex >= dirList.Count) // { // int count = dirList.Count; // dirList.Add(child); // dirOrder[child] = (childIndex = count); // } // else // { // dirList.Insert(childIndex, ); // } //} //result = new MsiRecord_Directories((from d in dirOrder.Values // select d)); } catch (Exception ex) { Log.Exception(PROC, ex); } return(result); }