using System; using System.Collections.Generic; using System.Linq; using System.Web; using HLWebOKBQueryPlugin.OKBQueryService; using HLWebOKBQueryPlugin.Helpers; using HLWebOKBQueryPlugin.ViewModels; namespace HLWebOKBQueryPlugin.Models { /// /// Model for Filter Data. /// Current Filters (selected), /// and available Filters. /// public class FilterModel { public static string ComboboxName { get { return "filtersCombobox"; } } public static string ParentIdName { get { return "parentId"; } } public static string ValueTextbox { get { return "valueTextbox"; } } public static string ValueDropDownList { get { return "valueDropDownList"; } } public static string ComparisonDropDownList { get { return "comparisonDropDownList"; } } /// /// Constructor /// public FilterModel() { } public FilterModel(CombinedFilter filter) { Content = filter; } /// /// Get Bool States. /// public List BoolStates { get { List boolStates = new List(); boolStates = new List(); boolStates.Add(true); boolStates.Add(false); return boolStates; } } public static List OrdinalComparisons { get { return ComparisonsHelper.ordinalComparisons; } } public static List StringComparisons { get { return ComparisonsHelper.stringComparisons; } } //"<"; //else if (Content.Comparison == OrdinalComparison.LessOrEqual) // comparisonComboBox.SelectedItem = "<="; //else if (Content.Comparison == OrdinalComparison.Equal) // comparisonComboBox.SelectedItem = "="; //else if (Content.Comparison == OrdinalComparison.GreaterOrEqual) // comparisonComboBox.SelectedItem = ">="; //else if (Content.Comparison == OrdinalComparison.Greater) // comparisonComboBox.SelectedItem = ">"; //else if (Content.Comparison == OrdinalComparison.NotEqual) // comparisonComboBox.SelectedItem = "<>" /// /// Available Filters /// public List AvailableFilters { get { QueryServiceClient client = Query.GetClientFactory("okbtester", "okbtester"); Filter[] filters = client.GetFilters(); if (filters == null) { return new List(); } return filters.ToList(); } } /// /// Available Filters without AND and OR. /// public List AvailableFilterForCombobox { get { List filters = AvailableFilters; filters.Remove(filters.OfType().Where(x => x.Operation == BooleanOperation.Or).FirstOrDefault()); filters.Remove(filters.OfType().Where(x => x.Operation == BooleanOperation.And).FirstOrDefault()); return filters; } } /// /// Content /// public CombinedFilter Content { get; set; } /// /// Delete a filter with given id. /// /// filter id internal bool RemoveFilter(Guid id) { bool removed = false; List orFilters = Content.Filters.ToList(); foreach (CombinedFilter f in orFilters) { Filter deleteFilter = f.Filters.Where(x => x.Id == id).FirstOrDefault(); if (deleteFilter != null) { List masterFilters = f.Filters.ToList(); masterFilters.Remove(deleteFilter); f.Filters = masterFilters.ToArray(); removed = true; break; } } Content.Filters = orFilters.ToArray(); return removed; } /// /// Add a new filters /// /// type name /// parent filter id internal void AddFilter(string filterTypeName, Guid parentId) { // get selected filter (combobox) Filter filter = AvailableFilters.Where(x => x.FilterTypeName.Equals(filterTypeName)).FirstOrDefault(); // find the partent filterr List orFilters = Content.Filters.ToList(); ; CombinedFilter parentFilter = (CombinedFilter)orFilters.Where(e => e.Id.Equals(parentId)).FirstOrDefault(); // remove orFilters.Remove(parentFilter); List filterList = parentFilter.Filters.ToList(); // Add the new filter filterList.Add(filter); //Response.Write("addx:" + filter.Id); parentFilter.Filters = filterList.ToArray(); // Add the current filter (AND) orFilters.Add(parentFilter); Content.Filters = orFilters.ToArray(); } /// /// Update existing filters with posted value /// /// parent filter id /// dictionary with posted values internal void UpdateWithPostValues(Dictionary> postValues) { // Set values for the existing Filters foreach (CombinedFilter cf in Content.Filters) { foreach (Filter f in cf.Filters) { Dictionary dict = postValues.Where(x => x.Key.Equals(f.Id)).FirstOrDefault().Value; if (dict != null) { foreach (KeyValuePair kvp in dict) { if ("StringComparisonFilter".Equals(f.GetType().Name)) { if (kvp.Key.Equals(FilterModel.ValueTextbox)) { ((StringComparisonFilter)f).Value = kvp.Value + "111"; } else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList)) { ((StringComparisonFilter)f).Value = ((StringComparisonFilter)f).Value + "222"; ((StringComparisonFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value); } // To this for alle keys } else { // To this for all filters } } } } } } } }