static void BuildTree(IFolderContext context, Folder folder, int maxItems, ref int descIndex, ref int nodeIndex) { var nodes = context.Nodes; var descriptors = context.Folders; while (folder.Items.Count < maxItems) { var d = descIndex < descriptors.Count ? descriptors[descIndex] : null; if (nodeIndex < nodes.Count && (d == null || nodeIndex < d.Index)) { folder.Items.Add(nodes[nodeIndex++]); } else if (d != null) { descIndex++; var subFolder = new Folder { Id = d.Id, Expanded = d.Expanded }; folder.Items.Add(subFolder); BuildTree(context, subFolder, d.ItemCount, ref descIndex, ref nodeIndex); } else { break; } } }
public void SyncDescriptorsAndNodes(IFolderContext context) { context.Nodes.Clear(); context.Folders = new List <Descriptor>(); SyncDescriptorsAndNodes(context, this); if (context.Folders.Count == 0) { context.Folders = null; } }
public static Folder BuildTree(IFolderContext context) { var root = new Folder { Expanded = true }; if (context.Folders == null || context.Folders.Count == 0) { root.Items.AddRange(context.Nodes); } else { int descIndex = 0; int nodeIndex = 0; BuildTree(context, root, int.MaxValue, ref descIndex, ref nodeIndex); } return(root); }
private static void SyncDescriptorsAndNodes(IFolderContext context, Folder folder) { foreach (var i in folder.Items) { if (i is Node) { context.Nodes.Add((Node)i); } else if (i is Folder) { var subFolder = (Folder)i; context.Folders.Add(new Descriptor { Id = subFolder.Id, Expanded = subFolder.Expanded, Index = context.Nodes.Count, ItemCount = subFolder.Items.Count }); SyncDescriptorsAndNodes(context, subFolder); } } }
public FolderGetOperations() { _folderContext = DbContext.FolderContext; }
public FolderWriteOperations() { _folderContext = DbContext.FolderContext; }
public FolderController(IFolderContext folderContext) { _folderContext = folderContext; }