public NamespaceTreeBuilderFolder GetFolder(string namespaceName) { if (namespaceName == null) { throw new ArgumentNullException("namespaceName"); } if (namespaceName.IsCorrectNamespace(_namespaceSeparator) == false) { throw new ArgumentException(string.Format("The namespace '{0}' is not correctly formattet", namespaceName)); } NamespaceTreeBuilderFolder currentNode = _rootFolder; string[] namespaceComponents = namespaceName.Split(_namespaceSeparator); foreach (string namespaceComponent in namespaceComponents.Where(s => s != "")) { currentNode = currentNode.SubFolders.Where(n => n.Name == namespaceComponent).FirstOrDefault(); if (currentNode == null) { return(null); } } return(currentNode); }
public NamespaceTreeBuilder(IEnumerable<INamespaceTreeBuilderLeafInfo> namespaceTreeBuilderInfos, char namespaceSeparator) { if (namespaceTreeBuilderInfos == null) throw new ArgumentNullException("namespaceTreeBuilderInfos"); _namespaceSeparator = namespaceSeparator; _rootFolder = new NamespaceTreeBuilderFolder("", ""); foreach (INamespaceTreeBuilderLeafInfo namespaceTreeBuilderInfo in namespaceTreeBuilderInfos) { NamespaceTreeBuilderFolder folderNode = GetOrCreateFolder(namespaceTreeBuilderInfo.Namespace); folderNode.Leafs.Add(namespaceTreeBuilderInfo); } }
private NamespaceTreeBuilderFolder FindFolder(NamespaceTreeBuilderFolder currentFolder, Func<NamespaceTreeBuilderFolder, bool> predicate) { if (predicate(currentFolder)) return currentFolder; foreach (NamespaceTreeBuilderFolder subFolder in currentFolder.SubFolders) { NamespaceTreeBuilderFolder foundFolder = FindFolder(subFolder, predicate); if (foundFolder != null) { return foundFolder; } } return null; }
public NamespaceTreeBuilder(IEnumerable <INamespaceTreeBuilderLeafInfo> namespaceTreeBuilderInfos, char namespaceSeparator) { if (namespaceTreeBuilderInfos == null) { throw new ArgumentNullException("namespaceTreeBuilderInfos"); } _namespaceSeparator = namespaceSeparator; _rootFolder = new NamespaceTreeBuilderFolder("", ""); foreach (INamespaceTreeBuilderLeafInfo namespaceTreeBuilderInfo in namespaceTreeBuilderInfos) { NamespaceTreeBuilderFolder folderNode = GetOrCreateFolder(namespaceTreeBuilderInfo.Namespace); folderNode.Leafs.Add(namespaceTreeBuilderInfo); } }
private NamespaceTreeBuilderFolder FindFolder(NamespaceTreeBuilderFolder currentFolder, Func <NamespaceTreeBuilderFolder, bool> predicate) { if (predicate(currentFolder)) { return(currentFolder); } foreach (NamespaceTreeBuilderFolder subFolder in currentFolder.SubFolders) { NamespaceTreeBuilderFolder foundFolder = FindFolder(subFolder, predicate); if (foundFolder != null) { return(foundFolder); } } return(null); }
private NamespaceTreeBuilderFolder GetOrCreateFolder(string namespaceName) { if (namespaceName.IsCorrectNamespace(_namespaceSeparator) == false) { throw new ArgumentException(string.Format("The namespace '{0}' is not correctly formattet", namespaceName != null ? namespaceName : "(null)")); } string[] namespaceComponents = namespaceName.Split(_namespaceSeparator); if ((namespaceComponents.Length == 1) && (namespaceComponents[0] == "")) { return(_rootFolder); } NamespaceTreeBuilderFolder currentNode = _rootFolder; string currentNamespace = ""; foreach (string namespaceComponent in namespaceComponents) { NamespaceTreeBuilderFolder node = currentNode.SubFolders.Where(n => n.Name == namespaceComponent).FirstOrDefault(); if (node == null) { node = new NamespaceTreeBuilderFolder(namespaceComponent, currentNamespace); currentNode.SubFolders.Add(node); } if (currentNamespace == "") { currentNamespace = namespaceComponent; } else { currentNamespace = string.Format("{0}{1}{2}", currentNamespace, _namespaceSeparator, namespaceComponent); } currentNode = node; } return(currentNode); }
private bool SubTreeContainsToken(NamespaceTreeBuilderFolder folder, SearchToken searchToken) { if (string.IsNullOrEmpty(searchToken.Keyword)) { return true; } if (folder.Name.Contains(searchToken.Keyword)) { return true; } foreach (INamespaceTreeBuilderLeafInfo leaf in folder.Leafs) { if (leaf.Name.Contains(searchToken.Keyword)) { return true; } } foreach (NamespaceTreeBuilderFolder subFolder in folder.SubFolders) { if (SubTreeContainsToken(subFolder, searchToken)) { return true; } } return false; }
private Element CreateFolderElement(NamespaceTreeBuilderFolder node) { bool hasChildren = (node.SubFolders.Count != 0) || (node.Leafs.Count != 0); var element = new Element(_context.CreateElementHandle(new BaseFunctionFolderElementEntityToken(CreateId(node, _context.ProviderName)))) { VisualData = new ElementVisualizedData { Label = node.Name, ToolTip = node.Name, HasChildren = (node.SubFolders.Count != 0) || (node.Leafs.Count != 0), Icon = hasChildren ? this.FolderIcon : this.EmptyFolderIcon, OpenedIcon = this.OpenFolderIcon }, TreeLockBehavior = OnGetTreeLockBehavior() }; IEnumerable<ElementAction> actions = OnGetFolderActions(); if (actions != null) { foreach (ElementAction action in actions) { element.AddAction(action); } } return element; }
/// <exclude /> public static string CreateId(NamespaceTreeBuilderFolder folderNode, string providerName) { if (folderNode.Namespace == "") { return CreateId(folderNode.Name, providerName); } return CreateId(string.Format("{0}.{1}", folderNode.Namespace, folderNode.Name), providerName); }
private NamespaceTreeBuilderFolder GetOrCreateFolder(string namespaceName) { if (namespaceName.IsCorrectNamespace(_namespaceSeparator) == false) throw new ArgumentException(string.Format("The namespace '{0}' is not correctly formattet", namespaceName != null ? namespaceName : "(null)")); string[] namespaceComponents = namespaceName.Split(_namespaceSeparator); if ((namespaceComponents.Length == 1) && (namespaceComponents[0] == "")) { return _rootFolder; } NamespaceTreeBuilderFolder currentNode = _rootFolder; string currentNamespace = ""; foreach (string namespaceComponent in namespaceComponents) { NamespaceTreeBuilderFolder node = currentNode.SubFolders.Where(n => n.Name == namespaceComponent).FirstOrDefault(); if (node == null) { node = new NamespaceTreeBuilderFolder(namespaceComponent, currentNamespace); currentNode.SubFolders.Add(node); } if (currentNamespace == "") { currentNamespace = namespaceComponent; } else { currentNamespace = string.Format("{0}{1}{2}", currentNamespace, _namespaceSeparator, namespaceComponent); } currentNode = node; } return currentNode; }