private bool IsSelected([NotNull] IExternalInteractor item, string filter, ExternalInteractorListFilter filterSpecial) { bool result; if (string.IsNullOrWhiteSpace(filter)) { result = true; } else { result = (!string.IsNullOrWhiteSpace(item.Name) && item.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0) || (!string.IsNullOrWhiteSpace(item.Description) && item.Description.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0); if (!result && (item.Properties?.Any() ?? false)) { var properties = item.Properties.ToArray(); foreach (var property in properties) { var stringValue = property.StringValue; if ((!string.IsNullOrWhiteSpace(stringValue) && stringValue.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0)) { result = true; break; } } } } if (result) { switch (filterSpecial) { case ExternalInteractorListFilter.NoDiagram: result = _model.Diagrams?.All(x => x.GetEntityShape(item.Id) == null) ?? true; break; case ExternalInteractorListFilter.NoThreatEvents: result = !(item.ThreatEvents?.Any() ?? false); break; case ExternalInteractorListFilter.MissingMitigations: result = item.ThreatEvents?.Any(x => !(x.Mitigations?.Any() ?? false)) ?? false; break; } } return(result); }
private void HandleEntityShapeEvent([NotNull] IExternalInteractor externalInteractor) { var row = GetRow(externalInteractor); if (row == null) { var filter = _filter.Text; var filterSpecial = EnumExtensions.GetEnumValue <ExternalInteractorListFilter>((string)_specialFilter.SelectedItem); if (IsSelected(externalInteractor, filter, filterSpecial)) { AddGridRow(externalInteractor, _grid.PrimaryGrid); } } else { var filter = _filter.Text; var filterSpecial = EnumExtensions.GetEnumValue <ExternalInteractorListFilter>((string)_specialFilter.SelectedItem); if (!IsSelected(externalInteractor, filter, filterSpecial)) { row.GridPanel.Rows.Remove(row); } } }