Free cookie consent management tool by TermsFeed Policy Generator

source: branches/WebApplication/MVC2/HLWebOKBQueryPlugin/ViewModels/FilterModel.cs @ 6190

Last change on this file since 6190 was 6190, checked in by dhohl, 12 years ago

#1499 refactor, first part of the comparison combobox for the different filters, Controls for the Filters

File size: 7.6 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using HLWebOKBQueryPlugin.OKBQueryService;
6using HLWebOKBQueryPlugin.Helpers;
7using HLWebOKBQueryPlugin.ViewModels;
8
9namespace HLWebOKBQueryPlugin.Models
10{
11    /// <summary>
12    /// Model for Filter Data.
13    /// Current Filters (selected),
14    /// and available Filters.
15    /// </summary>
16    public class FilterModel
17    {
18       
19
20
21        public static string ComboboxName { get { return "filtersCombobox"; } }
22        public static string ParentIdName { get { return "parentId"; } }
23        public static string ValueTextbox { get { return "valueTextbox"; } }
24        public static string ValueDropDownList { get { return "valueDropDownList"; } }
25        public static string ComparisonDropDownList { get { return "comparisonDropDownList"; } }
26
27        /// <summary>
28        /// Constructor
29        /// </summary>
30        public FilterModel()
31        {
32
33        }
34
35        public FilterModel(CombinedFilter filter)
36        {
37            Content = filter;
38        }
39
40        /// <summary>
41        /// Get Bool States.
42        /// </summary>
43        public List<Boolean> BoolStates
44        {
45            get
46            {
47                List<Boolean> boolStates = new List<Boolean>();
48
49                boolStates = new List<Boolean>();
50                boolStates.Add(true);
51                boolStates.Add(false);
52
53                return boolStates;
54            }
55        }
56
57
58        public static List<ComparisonItem> OrdinalComparisons
59        {
60            get { return ComparisonsHelper.ordinalComparisons; }
61        }
62
63        public static List<ComparisonItem> StringComparisons
64        {
65            get { return ComparisonsHelper.stringComparisons; }
66        }
67       
68
69        //"<";
70        //else if (Content.Comparison == OrdinalComparison.LessOrEqual)
71        //  comparisonComboBox.SelectedItem = "<=";
72        //else if (Content.Comparison == OrdinalComparison.Equal)
73        //  comparisonComboBox.SelectedItem = "=";
74        //else if (Content.Comparison == OrdinalComparison.GreaterOrEqual)
75        //  comparisonComboBox.SelectedItem = ">=";
76        //else if (Content.Comparison == OrdinalComparison.Greater)
77        //  comparisonComboBox.SelectedItem = ">";
78        //else if (Content.Comparison == OrdinalComparison.NotEqual)
79        //  comparisonComboBox.SelectedItem = "<>"
80
81
82
83
84
85        /// <summary>
86        /// Available Filters
87        /// </summary>
88        public List<Filter> AvailableFilters
89        {
90            get
91            {
92                QueryServiceClient client = Query.GetClientFactory("okbtester", "okbtester");
93                Filter[] filters = client.GetFilters();
94
95                if (filters == null)
96                {
97                    return new List<Filter>();
98                }
99                return filters.ToList<Filter>();
100            }
101        }
102
103
104        /// <summary>
105        /// Available Filters without AND and OR.
106        /// </summary>
107        public List<Filter> AvailableFilterForCombobox
108        {
109            get
110            {
111                List<Filter> filters = AvailableFilters;
112
113                filters.Remove(filters.OfType<CombinedFilter>().Where(x => x.Operation == BooleanOperation.Or).FirstOrDefault());
114                filters.Remove(filters.OfType<CombinedFilter>().Where(x => x.Operation == BooleanOperation.And).FirstOrDefault());
115
116                return filters;
117            }
118        }
119
120        /// <summary>
121        /// Content
122        /// </summary>
123        public CombinedFilter Content { get; set; }
124
125
126
127        /// <summary>
128        /// Delete a filter with given id.
129        /// </summary>
130        /// <param name="id">filter id</param>
131        internal bool RemoveFilter(Guid id)
132        {
133            bool removed = false;
134            List<Filter> orFilters = Content.Filters.ToList<Filter>();
135
136            foreach (CombinedFilter f in orFilters)
137            {
138                Filter deleteFilter = f.Filters.Where(x => x.Id == id).FirstOrDefault();
139                if (deleteFilter != null)
140                {
141                    List<Filter> masterFilters = f.Filters.ToList<Filter>();
142                    masterFilters.Remove(deleteFilter);
143                    f.Filters = masterFilters.ToArray<Filter>();
144                    removed = true;
145                    break;
146                }
147            }
148
149            Content.Filters = orFilters.ToArray<Filter>();
150            return removed;
151        }
152
153        /// <summary>
154        /// Add a new filters
155        /// </summary>
156        /// <param name="filterTypeName">type name</param>
157        /// <param name="parentId">parent filter id</param>
158        internal void AddFilter(string filterTypeName, Guid parentId)
159        {
160
161            // get selected filter (combobox)
162            Filter filter = AvailableFilters.Where(x => x.FilterTypeName.Equals(filterTypeName)).FirstOrDefault();
163
164
165            // find the partent filterr
166            List<Filter> orFilters = Content.Filters.ToList<Filter>(); ;
167            CombinedFilter parentFilter = (CombinedFilter)orFilters.Where(e => e.Id.Equals(parentId)).FirstOrDefault();
168
169            // remove
170            orFilters.Remove(parentFilter);
171
172            List<Filter> filterList = parentFilter.Filters.ToList<Filter>();
173
174
175            // Add the new filter
176            filterList.Add(filter);
177            //Response.Write("addx:" + filter.Id);
178
179            parentFilter.Filters = filterList.ToArray<Filter>();
180
181            // Add the current filter (AND)
182            orFilters.Add(parentFilter);
183
184            Content.Filters = orFilters.ToArray<Filter>();
185        }
186
187        /// <summary>
188        /// Update existing filters with posted value
189        /// </summary>
190        /// <param name="parentId">parent filter id</param>
191        /// <param name="postValues">dictionary with posted values</param>
192        internal void UpdateWithPostValues(Dictionary<Guid, Dictionary<string, string>> postValues)
193        {
194            // Set values for the existing Filters
195            foreach (CombinedFilter cf in Content.Filters)
196            {
197                foreach (Filter f in cf.Filters)
198                {
199
200                    Dictionary<string, string> dict = postValues.Where(x => x.Key.Equals(f.Id)).FirstOrDefault().Value;
201                    if (dict != null)
202                    {
203                        foreach (KeyValuePair<string, string> kvp in dict)
204                        {
205                            if ("StringComparisonFilter".Equals(f.GetType().Name))
206                            {
207                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
208                                {
209                                    ((StringComparisonFilter)f).Value = kvp.Value + "111";
210                                }
211                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
212                                {
213                                    ((StringComparisonFilter)f).Value = ((StringComparisonFilter)f).Value + "222";
214                                    ((StringComparisonFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value);
215                                }
216                                // To this for alle keys
217
218                            }
219                            else
220                            {
221                                // To this for all filters
222                            }
223                        }
224                    }
225                }
226            }
227        }
228    }
229}
Note: See TracBrowser for help on using the repository browser.