Free cookie consent management tool by TermsFeed Policy Generator

source: branches/WebApplication/MVC2/HLWebOKBQueryPlugin/Models/FilterModel.cs @ 9931

Last change on this file since 9931 was 6328, checked in by cfleisch, 13 years ago

#1499 bugfix - filter by name

File size: 15.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using HLWebOKBQueryPlugin.OKBQueryService;
6using HLWebOKBQueryPlugin.Helpers;
7using HLWebOKBQueryPlugin.ViewModels;
8using System.ComponentModel.DataAnnotations;
9
10namespace HLWebOKBQueryPlugin.Models
11{
12    /// <summary>
13    /// Model for Filter Data.
14    /// Current Filters (selected),
15    /// and available Filters.
16    /// </summary>
17    public class FilterModel
18    {
19        public static string ComboboxName { get { return "filtersCombobox"; } }
20        public static string ParentIdName { get { return "parentId"; } }
21        public static string ValueTextbox { get { return "valueTextbox"; } }
22        public static string ValueDropDownList { get { return "valueDropDownList"; } }
23        public static string ComparisonDropDownList { get { return "comparisonDropDownList"; } }
24
25        [Required(ErrorMessage = "Field is required!")]
26        [StringLength(50, ErrorMessage = "Maximum 50 characters allowed!")]
27        public string IntValue { get; set; }
28
29        /// <summary>
30        /// Constructor
31        /// </summary>
32        public FilterModel()
33        {
34        }
35
36        public FilterModel(CombinedFilter filter)
37        {
38            Content = filter;
39        }
40
41        /// <summary>
42        /// Get Bool States.
43        /// </summary>
44        public List<Boolean> BoolStates
45        {
46            get
47            {
48                List<Boolean> boolStates = new List<Boolean>();
49                boolStates = new List<Boolean>();
50                boolStates.Add(true);
51                boolStates.Add(false);
52                return boolStates;
53            }
54        }
55       
56        public static List<ComparisonItem> BoolComparisons
57        {
58            get { return ComparisonsHelper.boolComparisons; }
59        }
60
61        public static List<ComparisonItem> OrdinalComparisons
62        {
63            get { return ComparisonsHelper.ordinalComparisons; }
64        }
65
66        public static List<ComparisonItem> StringComparisons
67        {
68            get { return ComparisonsHelper.stringComparisons; }
69        }
70       
71
72        /// <summary>
73        /// Available Filters
74        /// </summary>
75        public List<Filter> AvailableFilters
76        {
77            get
78            {
79                QueryServiceClient client = Query.GetClientFactory("okbtester", "okbtester");
80                Filter[] filters = client.GetFilters();
81
82                if (filters == null)
83                {
84                    return new List<Filter>();
85                }
86                return filters.ToList<Filter>();
87            }
88        }
89
90
91        /// <summary>
92        /// Available Filters without AND and OR.
93        /// </summary>
94        public List<Filter> AvailableFilterForCombobox
95        {
96            get
97            {
98                List<Filter> filters = AvailableFilters;
99
100                filters.Remove(filters.OfType<CombinedFilter>().Where(x => x.Operation == BooleanOperation.Or).FirstOrDefault());
101                filters.Remove(filters.OfType<CombinedFilter>().Where(x => x.Operation == BooleanOperation.And).FirstOrDefault());
102
103                return filters;
104            }
105        }
106
107        /// <summary>
108        /// Content
109        /// </summary>
110        public CombinedFilter Content { get; set; }
111       
112
113        /// <summary>
114        /// Delete a filter with given id.
115        /// </summary>
116        /// <param name="id">filter id</param>
117        internal bool RemoveFilter(Guid id)
118        {
119            bool removed = false;
120            List<Filter> orFilters = Content.Filters.ToList<Filter>();
121
122            foreach (CombinedFilter f in orFilters)
123            {
124                Filter deleteFilter = f.Filters.Where(x => x.Id == id).FirstOrDefault();
125                if (deleteFilter != null)
126                {
127                    List<Filter> masterFilters = f.Filters.ToList<Filter>();
128                    masterFilters.Remove(deleteFilter);
129                    f.Filters = masterFilters.ToArray<Filter>();
130                    removed = true;
131                    break;
132                }
133            }
134
135            Content.Filters = orFilters.ToArray<Filter>();
136            return removed;
137        }
138
139        /// <summary>
140        /// Add a new filters
141        /// </summary>
142        /// <param name="filterTypeName">type name</param>
143        /// <param name="parentId">parent filter id</param>
144        internal void AddFilter(string filterTypeName, Guid parentId)
145        {
146            // get selected filter (combobox)
147            Filter filter = AvailableFilters.Where(x  => x.Label.Equals(filterTypeName)).FirstOrDefault();
148
149            // find the partent filterr
150            List<Filter> orFilters = Content.Filters.ToList<Filter>(); ;
151            CombinedFilter parentFilter = (CombinedFilter)orFilters.Where(e => e.Id.Equals(parentId)).FirstOrDefault();
152
153           
154
155            // remove
156            orFilters.Remove(parentFilter);
157
158            List<Filter> filterList = parentFilter.Filters.ToList<Filter>();
159           
160            // Add the new filter
161            filterList.Add(filter);
162            //Response.Write("addx:" + filter.Id);
163
164            parentFilter.Filters = filterList.ToArray<Filter>();
165
166            // Add the current filter (AND)
167            orFilters.Add(parentFilter);
168
169            Content.Filters = orFilters.ToArray<Filter>();
170        }
171
172
173        /// <summary>
174        /// Update existing filters with posted value
175        /// </summary>
176        /// <param name="parentId">parent filter id</param>
177        /// <param name="postValues">dictionary with posted values</param>
178        internal void UpdateWithPostValues(Dictionary<Guid, Dictionary<string, string>> postValues)
179        {
180            // Set values for the existing Filters
181            foreach (CombinedFilter cf in Content.Filters)
182            {
183                foreach (Filter f in cf.Filters)
184                {
185                    Dictionary<string, string> dict = postValues.Where(x => x.Key.Equals(f.Id)).FirstOrDefault().Value;
186                    if (dict != null)
187                    {
188                        foreach (KeyValuePair<string, string> kvp in dict)
189                        {
190                            if ("StringComparisonFilter".Equals(f.GetType().Name))
191                            {
192                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
193                                {
194                                    ((StringComparisonFilter)f).Value = kvp.Value;
195                                    IntValue = kvp.Value;
196                                }
197                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
198                                {
199                                    ((StringComparisonFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value);
200                                }
201                            }
202                            else if ("NameStringComparisonFilter".Equals(f.GetType().Name))
203                            {
204                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
205                                {
206                                    ((NameStringComparisonFilter)f).Value = kvp.Value;
207                                }
208                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
209                                {
210                                    ((NameStringComparisonFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value);
211                                }
212                            }
213                            else if ("StringComparisonAvailableValuesFilter".Equals(f.GetType().Name))
214                            {
215                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
216                                {
217                                    ((StringComparisonAvailableValuesFilter)f).Value = kvp.Value;
218                                }
219                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
220                                {
221                                    ((StringComparisonAvailableValuesFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value);
222                                }
223                            }
224                            else if ("NameStringComparisonAvailableValuesFilter".Equals(f.GetType().Name))
225                            {
226                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
227                                {
228                                    ((NameStringComparisonAvailableValuesFilter)f).Value = kvp.Value;
229                                }
230                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
231                                {
232                                    ((NameStringComparisonAvailableValuesFilter)f).Comparison = ComparisonsHelper.GetStringComparisonForValue(kvp.Value);
233                                }
234                            }
235                            else if ("NameEqualityComparisonByteArrayFilter".Equals(f.GetType().Name))
236                            {
237                                //TODO not supported
238                            }
239                            else if ("NameEqualityComparisonBoolFilter".Equals(f.GetType().Name))
240                            {
241                                if (kvp.Key.Equals(FilterModel.ValueDropDownList))
242                                {
243                                    ((NameEqualityComparisonBoolFilter)f).Value = Boolean.Parse(kvp.Value);
244                                }
245                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
246                                {
247                                    ((NameEqualityComparisonBoolFilter)f).Comparison = ComparisonsHelper.GetEqualityComparisonForValue(kvp.Value);
248                                }
249                            }
250                            else if ("NameOrdinalComparisonIntFilter".Equals(f.GetType().Name))
251                            {
252                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
253                                {
254                                    try
255                                    {
256                                        ((NameOrdinalComparisonIntFilter)f).Value = Int32.Parse(kvp.Value);
257                                    }
258                                    catch (Exception)
259                                    {
260                                        //TOOD Fehler ausgeben
261                                    }
262                                }
263                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
264                                {
265                                    ((NameOrdinalComparisonIntFilter)f).Comparison = ComparisonsHelper.GetOrdinalComparisonForValue(kvp.Value);
266                                }
267                            }
268                            else if ("NameOrdinalComparisonLongFilter".Equals(f.GetType().Name))
269                            {
270                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
271                                {
272                                    try
273                                    {
274                                        ((NameOrdinalComparisonLongFilter)f).Value = Int64.Parse(kvp.Value);
275                                    }
276                                    catch (Exception)
277                                    {
278                                        //TOOD Fehler ausgeben
279                                    }
280                                }
281                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
282                                {
283                                    ((NameOrdinalComparisonLongFilter)f).Comparison = ComparisonsHelper.GetOrdinalComparisonForValue(kvp.Value);
284                                }
285                            }
286                            else if ("NameOrdinalComparisonFloatFilter".Equals(f.GetType().Name))
287                            {
288                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
289                                {
290                                    try
291                                    {
292                                        ((NameOrdinalComparisonFloatFilter)f).Value = float.Parse(kvp.Value);
293                                    }
294                                    catch (Exception)
295                                    {
296                                        //TOOD Fehler ausgeben
297                                    }
298                                }
299                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
300                                {
301                                    ((NameOrdinalComparisonFloatFilter)f).Comparison = ComparisonsHelper.GetOrdinalComparisonForValue(kvp.Value);
302                                }
303                            }
304                            else if ("OrdinalComparisonDateTimeFilter".Equals(f.GetType().Name))
305                            {
306                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
307                                {
308                                    try
309                                    {
310                                        ((OrdinalComparisonDateTimeFilter)f).Value = DateTime.Parse(kvp.Value);
311                                    }
312                                    catch (Exception)
313                                    {
314                                        //TOOD Fehler ausgeben
315                                    }
316                                }
317                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
318                                {
319                                    ((OrdinalComparisonDateTimeFilter)f).Comparison = ComparisonsHelper.GetOrdinalComparisonForValue(kvp.Value);
320                                }
321                            }
322                            else if ("NameOrdinalComparisonDoubleFilter".Equals(f.GetType().Name))
323                            {
324                                if (kvp.Key.Equals(FilterModel.ValueTextbox))
325                                {
326                                    try
327                                    {
328                                        ((NameOrdinalComparisonDoubleFilter)f).Value = Double.Parse(kvp.Value);
329                                    }
330                                    catch (Exception)
331                                    {
332                                        //TOOD Fehler ausgeben
333                                    }
334                                }
335                                else if (kvp.Key.Equals(FilterModel.ComparisonDropDownList))
336                                {
337                                    ((NameOrdinalComparisonDoubleFilter)f).Comparison = ComparisonsHelper.GetOrdinalComparisonForValue(kvp.Value);
338                                }
339                            }
340                            else
341                            {
342                                // To this for all filters
343                            }
344                        }
345                    }
346                }
347            }
348        }
349    }
350}
Note: See TracBrowser for help on using the repository browser.