internal DataFilterConfiguration(DataFilterConfiguration filterToClone) : this(filterToClone.FilterName, filterToClone.IsEnabled) { foreach (var filterParameter in filterToClone.FilterParameters) { FilterParameters[filterParameter.Key] = filterParameter.Value; } }
/// <inheritdoc/> public IDisposable SetFilterParameter(string filterName, string parameterName, object value) { var filterIndex = GetFilterIndex(filterName); var newfilter = new DataFilterConfiguration(_filters[filterIndex]); //Store old value object oldValue = null; var hasOldValue = newfilter.FilterParameters.ContainsKey(filterName); if (hasOldValue) { oldValue = newfilter.FilterParameters[filterName]; } newfilter.FilterParameters[parameterName] = value; _filters[filterIndex] = newfilter; ApplyFilterParameterValue(filterName, parameterName, value); return new DisposeAction(() => { //Restore old value if (hasOldValue) { SetFilterParameter(filterName, parameterName, oldValue); } }); }
/// <summary> /// todo 还需近一步了解该方法的用途 /// </summary> /// <param name="filterOverrides"></param> /// <param name="filterName"></param> /// <param name="isEnabled"></param> private void ChangeFilterIsEnabledIfNotOverrided(List<DataFilterConfiguration> filterOverrides, string filterName, bool isEnabled) { if (filterOverrides.Any(f => f.FilterName == filterName)) { return; } var index = _filters.FindIndex(f => f.FilterName == filterName); if (index < 0) { return; } if (_filters[index].IsEnabled == isEnabled) { return; } _filters[index] = new DataFilterConfiguration(filterName, isEnabled); }
/// <inheritdoc/> public IDisposable EnableFilter(params string[] filterNames) { //TODO: Check if filters exists? var enabledFilters = new List<string>(); foreach (var filterName in filterNames) { var filterIndex = GetFilterIndex(filterName); if (!_filters[filterIndex].IsEnabled) { enabledFilters.Add(filterName); _filters[filterIndex] = new DataFilterConfiguration(filterName, true); } } enabledFilters.ForEach(ApplyEnableFilter); return new DisposeAction(() => DisableFilter(enabledFilters.ToArray())); }