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
}
}
}
}
}
}
}
}