protected ComponentsTreeItemModel GetTreeItemModel( SimplifiedComponent component, string[] expandedItems, DateTime from, DateTime to) { var eventRepository = CurrentAccountDbContext.GetEventRepository(); var states = eventRepository.GetTimelineStates(component.Id, EventCategory.ComponentExternalStatus, from, to); var okTime = eventRepository.GetTimelineOkTime(states, from, to); var items = this.GetTimelineItemsByStates(states, from, to); var result = new ComponentsTreeItemModel() { Id = component.Id, ParentId = component.ParentId, ComponentTypeId = component.ComponentTypeId, DisplayName = component.DisplayName, SystemName = component.SystemName, Path = component.Path, From = from, To = to, OkTime = okTime, Timeline = new TimelineModel() { Category = EventCategory.ComponentExternalStatus, OwnerId = component.Id, DateFrom = from, DateTo = to, Items = items, OkTime = okTime } }; // Изначально развёрнут только корень дерева var expanded = result.IsRoot; if (expandedItems.Contains(result.Id.ToString())) { expanded = true; } result.Expanded = expanded; // Если узел раскрыт, то загрузим содержимое if (result.Expanded) { if (result.Content == null) { result.Content = GetTreeItemContentModel(component, expandedItems, from, to); } if (result.Content.Details == null) { result.Content.Details = GetTreeItemDetailsModel(component, expandedItems, from, to); } } return(result); }
protected ComponentsTreeItemModel GetTreeItemModel( List <MonitoringStatus> statuses, Guid?componentTypeId, string search, SimplifiedComponent component, DateTime now, string[] expandedItems) { var result = new ComponentsTreeItemModel() { Id = component.Id, DisplayName = component.DisplayName, SystemName = component.SystemName, Status = component.ExternalStatus.Status, StatusDuration = component.ExternalStatus.GetDuration(now), IsRoot = component.ComponentTypeId == SystemComponentTypes.Root.Id, IsFolder = component.ComponentTypeId == SystemComponentTypes.Folder.Id, ParentId = component.ParentId, ComponentTypeId = component.ComponentTypeId }; // Изначально развёрнут только корень дерева var expanded = result.IsRoot; // Если заполнен хотя бы один фильтр, то нужно проверять всех детей var isFilterActive = (statuses != null && statuses.Count > 0) || componentTypeId.HasValue || !string.IsNullOrEmpty(search); if (isFilterActive) { var filtered = true; if (statuses != null && statuses.Count > 0) { if (!statuses.Contains(result.Status)) { filtered = false; } } if (componentTypeId.HasValue) { if (result.ComponentTypeId != componentTypeId.Value) { filtered = false; } } if (!string.IsNullOrEmpty(search)) { if (!( result.Id.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || result.SystemName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || result.DisplayName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 )) { filtered = false; } } result.Content = GetTreeItemContentModel(statuses, componentTypeId, search, component, now, expandedItems); filtered = filtered || (result.Content.Childs.Length > 0); // Критерии поиска не выполняются ни у себя, ни у детей -> этот элемент не нужен if (!filtered) { return(null); } // Раскрываем, если есть дети, подходящие под условия if (result.Content.Childs.Length > 0) { expanded = true; } } if (expandedItems.Contains(result.Id.ToString())) { expanded = true; } result.Expanded = expanded; // Если узел раскрыт, то загрузим содержимое if (result.Expanded) { if (result.Content == null) { result.Content = GetTreeItemContentModel(statuses, componentTypeId, search, component, now, expandedItems); } if (result.Content.Details == null) { result.Content.Details = GetTreeItemDetailsModel(component, now, expandedItems); } } return(result); }