public static void Apply(this FilterScheme filterScheme, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filterScheme); Argument.IsNotNull(() => rawCollection); Argument.IsNotNull(() => filteredCollection); IDisposable suspendToken = null; if (filteredCollection is ISuspendChangeNotificationsCollection) { suspendToken = ((ISuspendChangeNotificationsCollection)filteredCollection).SuspendChangeNotifications(); } filteredCollection.Clear(); foreach (var item in rawCollection.Cast <object>().Where(filterScheme.CalculateResult)) { filteredCollection.Add(item); } if (suspendToken != null) { suspendToken.Dispose(); } }
private async Task OnNewSchemeExecuteAsync() { if (_targetType is null) { Log.Warning("Target type is unknown, cannot get any type information to create filters"); return; } var filterScheme = new FilterScheme(_targetType); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (!(await _uiVisualizerService.ShowDialogAsync <EditFilterViewModel>(filterSchemeEditInfo) ?? false)) { return; } if (_filterSchemes is null || _filterSchemeManager is null) { return; } _filterSchemes.Schemes.Add(filterScheme); UpdateFilterGroups(); ApplyFilterScheme(filterScheme, true); await _filterSchemeManager.UpdateFiltersAsync(); }
public static void Apply(this FilterScheme filterScheme, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filterScheme); Argument.IsNotNull(() => rawCollection); Argument.IsNotNull(() => filteredCollection); IDisposable suspendToken = null; var filteredCollectionType = filteredCollection.GetType(); if (filteredCollectionType.IsGenericTypeEx() && filteredCollectionType.GetGenericTypeDefinitionEx() == typeof(FastObservableCollection <>)) { suspendToken = (IDisposable)filteredCollectionType.GetMethodEx("SuspendChangeNotifications").Invoke(filteredCollection, null); } filteredCollection.Clear(); foreach (var item in rawCollection) { if (filterScheme.CalculateResult(item)) { filteredCollection.Add(item); } } if (suspendToken != null) { suspendToken.Dispose(); } }
private void ApplyFilterScheme(FilterScheme filterScheme, bool force = false) { if (filterScheme == null || _applyingFilter) { return; } _applyingFilter = true; var selectedFilterIsDifferent = !ReferenceEquals(SelectedFilterScheme, filterScheme); var filterServiceSelectedFilterIsDifferent = !ReferenceEquals(filterScheme, _filterService.SelectedFilter); if (selectedFilterIsDifferent) { SelectedFilterScheme = filterScheme; } if (filterServiceSelectedFilterIsDifferent) { _filterService.SelectedFilter = filterScheme; } if (force || selectedFilterIsDifferent || filterServiceSelectedFilterIsDifferent) { if (AutoApplyFilter) { ApplyFilter(); } } _applyingFilter = false; }
private async Task OnEditSchemeExecuteAsync(FilterScheme filterScheme) { try { filterScheme.EnsureIntegrity(_reflectionService); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (await _uiVisualizerService.ShowDialogAsync <EditFilterViewModel>(filterSchemeEditInfo) ?? false) { _filterSchemeManager.UpdateFilters(); if (ReferenceEquals(filterScheme, _filterService.SelectedFilter)) { Log.Debug("Current filter has been edited, re-applying filter"); _filterService.SelectedFilter = filterScheme; } } } catch (Exception ex) { Log.Error(ex, $"Failed to edit filter scheme '{filterScheme?.Title}'"); throw; } }
public static string GetFilterString(this FilterScheme scheme, Context ctx, FormMetadata metadata) { if (scheme.Scheme.IsNullOrEmptyOrWhiteSpace()) { return(string.Empty); } //字段比较条件元数据。 var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx); //过滤模型:解析过滤方案 ListFilterModel filterModel = new ListFilterModel(); filterModel.FilterObject.FilterMetaData = filterMetadata; filterModel.SetContext(ctx, metadata.BusinessInfo, metadata.BusinessInfo.GetForm().GetFormServiceProvider()); filterModel.InitFieldList(metadata, null); //把过滤方案的XML内容,反序列化为对象 DcxmlSerializer dcxmlSerializer = new DcxmlSerializer(new PreInsertDataDcxmlBinder()); SchemeEntity schemeEntity = dcxmlSerializer.DeserializeFromString(scheme.Scheme) as SchemeEntity; //利用ListFilterModel, 翻译过滤条件 filterModel.FilterObject.Setting = schemeEntity.FilterSetting; string statement = filterModel.FilterObject.GetFilterSQLString(ctx, TimeServiceHelper.GetSystemDateTime(ctx)); return(statement); } //end metthod
public Task FilterCollectionAsync(FilterScheme filter, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filter); FilterCollection(filter, rawCollection, filteredCollection); return TaskHelper.Completed; }
private void ShowQueryBuilder(FilterScheme filterScheme = null) { CurrentModel = filterScheme == null ? TypeFactory.Default.CreateInstance <BrowserQueryBuilderViewModel>() : TypeFactory.Default.CreateInstanceWithParametersAndAutoCompletion( typeof(BrowserQueryBuilderViewModel), filterScheme) as BrowserQueryBuilderViewModel; }
public Task FilterCollectionAsync(FilterScheme filter, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filter); FilterCollection(filter, rawCollection, filteredCollection); return(TaskHelper.Completed); }
public static void EnsureIntegrity(this FilterScheme filterScheme) { Argument.IsNotNull(() => filterScheme); foreach (var item in filterScheme.ConditionItems) { item.EnsureIntegrity(); } }
private bool OnDeleteSchemeCanExecute(FilterScheme filterScheme) { if (!AllowDelete) { return(false); } return(filterScheme?.CanDelete ?? false); }
private async Task OnDeleteSchemeExecuteAsync(FilterScheme filterScheme) { if (await _messageService.ShowAsync(string.Format(_languageService.GetString("FilterBuilder_ShowAsync_Message_AreYouSureYouWantToDeleteFilterQuestion_Pattern"), filterScheme.Title), _languageService.GetString("FilterBuilder_ShowAsync_DeleteFilterQuestion_Caption"), MessageButton.YesNo) == MessageResult.Yes) { _filterSchemeManager.FilterSchemes.Schemes.Remove(filterScheme); SelectedFilterScheme = AvailableSchemes[0]; _filterSchemeManager.UpdateFilters(); } }
private async void OnDeleteSchemeExecute(FilterScheme filterScheme) { if (await _messageService.ShowAsync(string.Format("Are you sure you want to delete filter '{0}'?", filterScheme.Title), "Delete filter?", MessageButton.YesNo) == MessageResult.Yes) { _filterSchemeManager.FilterSchemes.Schemes.Remove(filterScheme); SelectedFilterScheme = AvailableSchemes[0]; _filterSchemeManager.UpdateFilters(); } }
public void WorksCorrectlyOnEmptyFilterScheme() { var filterScheme = new FilterScheme { Title = "Default" }; var actual = filterScheme.ToString(); var expected = @"Default"; Assert.AreEqual(expected, actual); }
public async Task FilterCollectionAsync(FilterScheme filter, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filter); await filter.EnsureIntegrityAsync(); if (filteredCollection == null) { return; } filter.Apply(rawCollection, filteredCollection); }
public static FilterScheme GenerateFilterScheme() { var filterScheme = new FilterScheme(); filterScheme.Title = "Test filter"; var root = filterScheme.ConditionItems.First(); root.Items.Add(GenerateConditionGroup()); root.Items.Add(GenerateConditionGroup()); return(filterScheme); }
private async Task OnEditSchemeExecuteAsync(FilterScheme filterScheme) { await filterScheme.EnsureIntegrityAsync(); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (_uiVisualizerService.ShowDialog <EditFilterViewModel>(filterSchemeEditInfo) ?? false) { _filterSchemeManager.UpdateFilters(); ApplyFilter(); } }
public void FilterCollection(FilterScheme filter, IEnumerable rawCollection, IList filteredCollection) { Argument.IsNotNull(() => filter); filter.EnsureIntegrity(_reflectionService); if (filteredCollection == null) { return; } filter.Apply(rawCollection, filteredCollection); }
public FilterScheme Export(Type entityType) { var reflectionService = this.GetDependencyResolver().Resolve <IReflectionService>(); var properties = reflectionService.GetInstanceProperties(entityType); var group = new ConditionGroup() { Type = ConditionGroupType.And }; Conditions.Select(o => o.Export(group, properties)).Sink(group.Items.Add); var scheme = new FilterScheme(entityType, "Default", group); return(scheme); }
public static async Task EnsureIntegrityAsync(this FilterScheme filterScheme) { Argument.IsNotNull(() => filterScheme); var reflectionService = ServiceLocator.Default.ResolveType <IReflectionService>(filterScheme.Tag); using (await LockFilterScheme.LockAsync()) { foreach (var item in filterScheme.ConditionItems) { await item.EnsureIntegrityAsync(reflectionService); } } }
private async Task OnDeleteSchemeExecuteAsync(FilterScheme filterScheme) { if (await _messageService.ShowAsync(string.Format(_languageService.GetString("FilterBuilder_ShowAsync_Message_AreYouSureYouWantToDeleteFilterQuestion_Pattern"), filterScheme.Title), _languageService.GetString("FilterBuilder_ShowAsync_DeleteFilterQuestion_Caption"), MessageButton.YesNo) != MessageResult.Yes) { return; } _filterSchemeManager?.FilterSchemes.Schemes.Remove(filterScheme); SelectedFilterScheme = _noFilterFilter; if (_filterSchemeManager != null) { await _filterSchemeManager.UpdateFiltersAsync(); } }
private bool OnEditSchemeCanExecute(FilterScheme filterScheme) { if (filterScheme == null) { return(false); } if (AvailableSchemes.Count == 0) { return(false); } if (ReferenceEquals(AvailableSchemes[0], filterScheme)) { return(false); } return(true); }
private void UpdatePreviewItems() { if (FilterScheme is null || RawCollection is null) { return; } if (!AllowLivePreview) { return; } if (!EnableLivePreview) { PreviewItems.Clear(); return; } FilterScheme.Apply(RawCollection, PreviewItems); }
private void OnNewSchemeExecute() { if (_targetType == null) { Log.Warning("Target type is unknown, cannot get any type information to create filters"); return; } var filterScheme = new FilterScheme(_targetType); var filterSchemeEditInfo = new FilterSchemeEditInfo (filterScheme, RawItems, true, true); if (_uiVisualizerService.ShowDialog<EditFilterViewModel>(filterSchemeEditInfo) ?? false) { AvailableSchemes.Add(filterScheme); _filterSchemes.Schemes.Add(filterScheme); _filterService.SelectedFilter = filterScheme; _filterSchemeManager.UpdateFilters(); } }
private async Task OnNewSchemeExecuteAsync() { if (_targetType == null) { Log.Warning("Target type is unknown, cannot get any type information to create filters"); return; } var filterScheme = new FilterScheme(_targetType); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawItems, true, true); if (await _uiVisualizerService.ShowDialogAsync <EditFilterViewModel>(filterSchemeEditInfo) ?? false) { AvailableSchemes.Add(filterScheme); _filterSchemes.Schemes.Add(filterScheme); _filterService.SelectedFilter = filterScheme; _filterSchemeManager.UpdateFilters(); } }
private void OnNewSchemeExecute() { if (_targetType == null) { Log.Warning("Target type is unknown, cannot get any type information to create filters"); return; } var filterScheme = new FilterScheme(_targetType); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (_uiVisualizerService.ShowDialog <EditFilterViewModel>(filterSchemeEditInfo) ?? false) { AvailableSchemes.Add(filterScheme); _filterSchemes.Schemes.Add(filterScheme); ApplyFilterScheme(filterScheme, true); _filterSchemeManager.UpdateFilters(); } }
public EditFilterViewModel(FilterSchemeEditInfo filterSchemeEditInfo, IXmlSerializer xmlSerializer, IMessageService messageService, IServiceLocator serviceLocator) { Argument.IsNotNull(() => filterSchemeEditInfo); Argument.IsNotNull(() => xmlSerializer); Argument.IsNotNull(() => messageService); Argument.IsNotNull(() => serviceLocator); PreviewItems = new FastObservableCollection <object>(); RawCollection = filterSchemeEditInfo.RawCollection; EnableAutoCompletion = filterSchemeEditInfo.EnableAutoCompletion; AllowLivePreview = filterSchemeEditInfo.AllowLivePreview; EnableLivePreview = filterSchemeEditInfo.AllowLivePreview; var filterScheme = filterSchemeEditInfo.FilterScheme; _originalFilterScheme = filterScheme; _xmlSerializer = xmlSerializer; _messageService = messageService; _serviceLocator = serviceLocator; _reflectionService = _serviceLocator.ResolveType <IReflectionService>(filterScheme.Tag); DeferValidationUntilFirstSaveCall = true; using (var memoryStream = new MemoryStream()) { xmlSerializer.Serialize(_originalFilterScheme, memoryStream); memoryStream.Position = 0L; FilterScheme = (FilterScheme)xmlSerializer.Deserialize(typeof(FilterScheme), memoryStream); FilterScheme.Tag = filterScheme.Tag; } FilterSchemeTitle = FilterScheme.Title; AddGroupCommand = new Command <ConditionGroup>(OnAddGroup); AddExpressionCommand = new Command <ConditionGroup>(OnAddExpression); DeleteConditionItem = new Command <ConditionTreeItem>(OnDeleteCondition, OnDeleteConditionCanExecute); }
public EditFilterViewModel(FilterSchemeEditInfo filterSchemeEditInfo, IXmlSerializer xmlSerializer, IMessageService messageService, IServiceLocator serviceLocator) { Argument.IsNotNull(() => filterSchemeEditInfo); Argument.IsNotNull(() => xmlSerializer); Argument.IsNotNull(() => messageService); Argument.IsNotNull(() => serviceLocator); PreviewItems = new FastObservableCollection<object>(); RawCollection = filterSchemeEditInfo.RawCollection; EnableAutoCompletion = filterSchemeEditInfo.EnableAutoCompletion; AllowLivePreview = filterSchemeEditInfo.AllowLivePreview; EnableLivePreview = filterSchemeEditInfo.AllowLivePreview; var filterScheme = filterSchemeEditInfo.FilterScheme; _originalFilterScheme = filterScheme; _xmlSerializer = xmlSerializer; _messageService = messageService; _serviceLocator = serviceLocator; _reflectionService = _serviceLocator.ResolveType<IReflectionService>(filterScheme.Tag); DeferValidationUntilFirstSaveCall = true; using (var memoryStream = new MemoryStream()) { xmlSerializer.Serialize(_originalFilterScheme, memoryStream); memoryStream.Position = 0L; FilterScheme = (FilterScheme)xmlSerializer.Deserialize(typeof(FilterScheme), memoryStream); FilterScheme.Tag = filterScheme.Tag; } FilterSchemeTitle = FilterScheme.Title; AddGroupCommand = new Command<ConditionGroup>(OnAddGroup); AddExpressionCommand = new Command<ConditionGroup>(OnAddExpression); DeleteConditionItem = new Command<ConditionTreeItem>(OnDeleteCondition, OnDeleteConditionCanExecute); }
protected override async Task InitializeAsync() { await base.InitializeAsync(); InstanceProperties = _reflectionService.GetInstanceProperties(_originalFilterScheme.TargetType).Properties; using (var memoryStream = new MemoryStream()) { _xmlSerializer.Serialize(_originalFilterScheme, memoryStream, null); memoryStream.Position = 0L; _xmlSerializer.Deserialize(FilterScheme, memoryStream, null); } FilterScheme.EnsureIntegrity(_reflectionService); FilterScheme.Scope = _originalFilterScheme.Scope; FilterSchemeTitle = FilterScheme.Title; RaisePropertyChanged(() => FilterScheme); UpdatePreviewItems(); FilterScheme.Updated += OnFilterSchemeUpdated; }
public EditFilterViewModel(FilterSchemeEditInfo filterSchemeEditInfo, IXmlSerializer xmlSerializer, IMessageService messageService, IServiceLocator serviceLocator, ILanguageService languageService) { Argument.IsNotNull(() => filterSchemeEditInfo); Argument.IsNotNull(() => xmlSerializer); Argument.IsNotNull(() => messageService); Argument.IsNotNull(() => serviceLocator); Argument.IsNotNull(() => languageService); _xmlSerializer = xmlSerializer; _messageService = messageService; _serviceLocator = serviceLocator; _languageService = languageService; PreviewItems = new FastObservableCollection <object>(); RawCollection = filterSchemeEditInfo.RawCollection; EnableAutoCompletion = filterSchemeEditInfo.EnableAutoCompletion; AllowLivePreview = filterSchemeEditInfo.AllowLivePreview; EnableLivePreview = filterSchemeEditInfo.AllowLivePreview; var filterScheme = filterSchemeEditInfo.FilterScheme; _originalFilterScheme = filterScheme; _reflectionService = _serviceLocator.ResolveType <IReflectionService>(filterScheme.Scope); DeferValidationUntilFirstSaveCall = true; FilterScheme = new FilterScheme { Scope = _originalFilterScheme.Scope }; AddGroupCommand = new Command <ConditionGroup>(OnAddGroup); AddExpressionCommand = new Command <ConditionGroup>(OnAddExpression); DeleteConditionItem = new Command <ConditionTreeItem>(OnDeleteCondition, OnDeleteConditionCanExecute); }
public EditFilterViewModel(FilterSchemeEditInfo filterSchemeEditInfo, IXmlSerializer xmlSerializer, IMessageService messageService, IServiceLocator serviceLocator, ILanguageService languageService) { Argument.IsNotNull(() => filterSchemeEditInfo); Argument.IsNotNull(() => xmlSerializer); Argument.IsNotNull(() => messageService); Argument.IsNotNull(() => serviceLocator); Argument.IsNotNull(() => languageService); _xmlSerializer = xmlSerializer; _messageService = messageService; _serviceLocator = serviceLocator; _languageService = languageService; PreviewItems = new FastObservableCollection<object>(); RawCollection = filterSchemeEditInfo.RawCollection; EnableAutoCompletion = filterSchemeEditInfo.EnableAutoCompletion; AllowLivePreview = filterSchemeEditInfo.AllowLivePreview; EnableLivePreview = filterSchemeEditInfo.AllowLivePreview; var filterScheme = filterSchemeEditInfo.FilterScheme; _originalFilterScheme = filterScheme; _reflectionService = _serviceLocator.ResolveType<IReflectionService>(filterScheme.Scope); DeferValidationUntilFirstSaveCall = true; FilterScheme = new FilterScheme { Scope = _originalFilterScheme.Scope }; AddGroupCommand = new Command<ConditionGroup>(OnAddGroup); AddExpressionCommand = new Command<ConditionGroup>(OnAddExpression); DeleteConditionItem = new Command<ConditionTreeItem>(OnDeleteCondition, OnDeleteConditionCanExecute); }
private bool ReadyForResetOrDeleteScheme(FilterScheme filterScheme) { return(filterScheme != null && AvailableSchemes != null && AvailableSchemes.Any() && !ReferenceEquals(filterScheme, AvailableSchemes[0])); }
private bool OnDeleteSchemeCanExecute(FilterScheme filterScheme) { return(AllowDelete && ReadyForResetOrDeleteScheme(filterScheme)); }
private bool ReadyForResetOrDeleteScheme(FilterScheme filterScheme) { return filterScheme != null && AvailableSchemes != null && AvailableSchemes.Any() && !ReferenceEquals(filterScheme, AvailableSchemes[0]); }
private bool OnDeleteSchemeCanExecute(FilterScheme filterScheme) { return AllowDelete && ReadyForResetOrDeleteScheme(filterScheme); }
private void OnEditSchemeExecute(FilterScheme filterScheme) { try { filterScheme.EnsureIntegrity(_reflectionService); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (_uiVisualizerService.ShowDialog<EditFilterViewModel>(filterSchemeEditInfo) ?? false) { _filterSchemeManager.UpdateFilters(); if (ReferenceEquals(filterScheme, _filterService.SelectedFilter)) { Log.Debug("Current filter has been edited, re-applying filter"); _filterService.SelectedFilter = filterScheme; } } } catch (Exception ex) { Log.Error(ex, $"Failed to edit filter scheme '{filterScheme?.Title}'"); throw; } }
private bool OnEditSchemeCanExecute(FilterScheme filterScheme) { if (filterScheme == null) { return false; } if (AvailableSchemes.Count == 0) { return false; } if (ReferenceEquals(AvailableSchemes[0], filterScheme)) { return false; } return true; }
private async Task OnEditSchemeExecuteAsync(FilterScheme filterScheme) { await filterScheme.EnsureIntegrityAsync(); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (_uiVisualizerService.ShowDialog<EditFilterViewModel>(filterSchemeEditInfo) ?? false) { _filterSchemeManager.UpdateFilters(); ApplyFilter(); } }
private void OnNewSchemeExecute() { if (_targetType == null) { Log.Warning("Target type is unknown, cannot get any type information to create filters"); return; } var filterScheme = new FilterScheme(_targetType); var filterSchemeEditInfo = new FilterSchemeEditInfo(filterScheme, RawCollection, AllowLivePreview, EnableAutoCompletion); if (_uiVisualizerService.ShowDialog<EditFilterViewModel>(filterSchemeEditInfo) ?? false) { AvailableSchemes.Add(filterScheme); _filterSchemes.Schemes.Add(filterScheme); ApplyFilterScheme(filterScheme, true); _filterSchemeManager.UpdateFilters(); } }
private bool OnEditSchemeCanExecute(FilterScheme filterScheme) { return(filterScheme?.CanEdit ?? false); }