private IEnumerable <Element> GetChildren(EntityToken entityToken, SearchToken seachToken, bool useForeign) { IEnumerable <VirtualElementConfigurationElement> elementNodes; if (entityToken.Id == RootElementId) { elementNodes = _configuration.Perspectives; } else { SimpleVirtualElement node = FindElementNode(entityToken.Id, _configuration.Perspectives); Verify.IsNotNull(node, "No corresponding node was found with the id '{0}'", entityToken.Id); elementNodes = node.Elements; } var result = new List <Element>(); foreach (var elementNode in elementNodes) { if (elementNode is SimpleVirtualElement) { Element createdElement; if (TryBuildElement(elementNode as SimpleVirtualElement, out createdElement)) { result.Add(createdElement); } continue; } if (elementNode is AttachProviderVirtualElement) { string providerName = (elementNode as AttachProviderVirtualElement).ProviderName; var providerHandle = new ElementProviderHandle(providerName); List <Element> elementsFromProvider; if (useForeign && ElementFacade.IsLocaleAwareElementProvider(providerHandle)) { elementsFromProvider = ElementFacade.GetForeignRoots(providerHandle, seachToken).ToList(); } else { elementsFromProvider = ElementFacade.GetRoots(providerHandle, seachToken).ToList(); } foreach (Element element in elementsFromProvider) { element.ElementExternalActionAdding = element.ElementExternalActionAdding.Remove(ElementExternalActionAdding.AllowGlobal); } result.AddRange(elementsFromProvider); continue; } throw new NotSupportedException(); } return(result); }