private static bool filter(Item item, FilterDescriptor filterDescriptor) { string value = CustomServerItemsProvider.getMemberValue(item, filterDescriptor.path); if (!String.IsNullOrEmpty(value)) { if (!CustomServerItemsProvider.isFiltering(value, filterDescriptor.value, (int)filterDescriptor.condition)) { if (filterDescriptor.children.Count == 0) { return(true); } else { int result = 0; for (var i = 0; i < filterDescriptor.children.Count; i++) { string collapsedValue = CustomServerItemsProvider.getMemberValue(item, filterDescriptor.children[i].path); if (!CustomServerItemsProvider.isFiltering(collapsedValue, filterDescriptor.children[i].value, (int)filterDescriptor.children[i].condition)) { result++; } } if (result == filterDescriptor.children.Count) { return(true); } } } } return(false); }
public static int getTotalItemsCount(List <FilterDescriptor> filterDescriptors) { CustomServerItemsProvider.sendItems = new List <Item>(100000); foreach (var item in CustomServerItemsProvider.items) { CustomServerItemsProvider.sendItems.Add(item); } return(CustomServerItemsProvider.onFiltering(filterDescriptors, null).Count); }
private static int sortingRecursive(Item a, Item b) { CustomServerItemsProvider.i = 0; if (CustomServerItemsProvider.sortDescriptors.Count > 0) { if (CustomServerItemsProvider.i != CustomServerItemsProvider.sortDescriptors.Count - 1) { if (getMemberValue(a, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path).CompareTo(getMemberValue(a, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path)) > 0) { return(CustomServerItemsProvider.sortingOrder(sortDescriptors[i])); } if (getMemberValue(b, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path).CompareTo(getMemberValue(a, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path)) > 0) { return(CustomServerItemsProvider.sortingOrderDesc(sortDescriptors[i])); } CustomServerItemsProvider.i++; return(CustomServerItemsProvider.sortingRecursive(a, b)); } else { return(getMemberValue(a, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path).CompareTo(getMemberValue(b, CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i].path)) > 0 ? CustomServerItemsProvider.sortingOrder(CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i]) : CustomServerItemsProvider.sortingOrderDesc(CustomServerItemsProvider.sortDescriptors[CustomServerItemsProvider.i])); } } else { return(0); } //if (i != sortDescriptors.Count - 1) { // if (getMemberValue(a, sortDescriptors[i].Path).CompareTo(getMemberValue(b, sortDescriptors[i].Path)) > 0) // return CustomServerItemsProvider.sortingOrder(sortDescriptors[i]); // if (getMemberValue(b, sortDescriptors[i].Path).CompareTo(getMemberValue(a, sortDescriptors[i].Path)) > 0) // return CustomServerItemsProvider.sortingOrderDesc(sortDescriptors[i]); // return CustomServerItemsProvider.sortingRecursive(a, b, sortDescriptors, i + 1); // } else { // return getMemberValue(a, sortDescriptors[i].Path).CompareTo(getMemberValue(b, sortDescriptors[i].Path)) > 0 ? CustomServerItemsProvider.sortingOrder(sortDescriptors[i]) : CustomServerItemsProvider.sortingOrderDesc(sortDescriptors[i]); //} //return 1; }
public static List <Item> getItems(int?firstItem, int?itemsNumber, List <SortDescriptor> sortDescriptors, List <FilterDescriptor> filterDescriptors, List <FilterDescriptor> collapsedFilterDescriptors) { CustomServerItemsProvider.sendItems = new List <Item>(100000); foreach (var item in CustomServerItemsProvider.items) { CustomServerItemsProvider.sendItems.Add(item); } CustomServerItemsProvider.sortDescriptors = new List <SortDescriptor>(); if (sortDescriptors != null) { CustomServerItemsProvider.sortDescriptors = sortDescriptors; } if (sortDescriptors[CustomServerItemsProvider.i].asc != null) { bool isOrderAsc = sortDescriptors[CustomServerItemsProvider.i].asc ?? false; switch (sortDescriptors[CustomServerItemsProvider.i].path) { case "Number": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.Number).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.Number).ToList(); } break; case "PictureName": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.PictureName).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.PictureName).ToList(); } break; case "Brand": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.Brand).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.Brand).ToList(); } break; case "Type": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.Type).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.Type).ToList(); } break; case "Year": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.Year).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.Year).ToList(); } break; case "EnginePower": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.EnginePower).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.EnginePower).ToList(); } break; case "Cabin": if (isOrderAsc) { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderBy(x => x.Cabin).ToList(); } else { CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.OrderByDescending(x => x.Cabin).ToList(); } break; } } CustomServerItemsProvider.sendItems = CustomServerItemsProvider.onFiltering(filterDescriptors, collapsedFilterDescriptors).Skip(firstItem ?? 0).ToList().Take(itemsNumber ?? 0).ToList(); //CustomServerItemsProvider.sendItems = CustomServerItemsProvider.sendItems.Skip(firstItem ?? 0).ToList().Take(itemsNumber ?? 0).ToList(); return(CustomServerItemsProvider.sendItems); }
private static List <Item> onFiltering(List <FilterDescriptor> filterDescriptors, List <FilterDescriptor> collapsedFilterDescriptors) { if ((filterDescriptors == null || filterDescriptors.Count == 0) && (collapsedFilterDescriptors == null || collapsedFilterDescriptors.Count == 0)) { return(CustomServerItemsProvider.sendItems); } if (collapsedFilterDescriptors == null) { collapsedFilterDescriptors = new List <FilterDescriptor>(); } List <bool> isCollapsedItem = new List <bool>(); for (int c = 0; c < collapsedFilterDescriptors.Count; c++) { isCollapsedItem.Add(false); } List <Item> filteredItems = new List <Item>(); for (var j = 0; j < CustomServerItemsProvider.sendItems.Count; j++) { // filtering common filters var isFiltered = 0; if (filterDescriptors != null) { for (var i = 0; i < filterDescriptors.Count; i++) { if (CustomServerItemsProvider.filter(CustomServerItemsProvider.sendItems[j], filterDescriptors[i])) { isFiltered++; } } } // filtering collapsed filter bool isCollapsedFiltered = false; var numberfilter = -1; if (collapsedFilterDescriptors != null) { for (var i = 0; i < collapsedFilterDescriptors.Count; i++) { if (CustomServerItemsProvider.filter(CustomServerItemsProvider.sendItems[j], collapsedFilterDescriptors[i])) { isCollapsedFiltered = true; numberfilter = i; i = collapsedFilterDescriptors.Count; } } } //add fake item for creating collapsing group if (isFiltered == 0 && !isCollapsedFiltered) { filteredItems.Add(CustomServerItemsProvider.sendItems[j]); } else { if (isFiltered == 0) { if (isCollapsedFiltered && !isCollapsedItem[numberfilter]) { Item fakeItem = new Item(); CustomServerItemsProvider.setMemberValue(fakeItem, collapsedFilterDescriptors[numberfilter].path, collapsedFilterDescriptors[numberfilter].value); for (var i = 0; i < collapsedFilterDescriptors[numberfilter].children.Count; i++) { CustomServerItemsProvider.setMemberValue(fakeItem, collapsedFilterDescriptors[numberfilter].children[i].path, collapsedFilterDescriptors[numberfilter].children[i].value); } filteredItems.Add(fakeItem); isCollapsedItem[numberfilter] = true; } } } } return(filteredItems); }