private string BuildLuceneQuery(JpListQueryDTO jpListQuery) { string queryStr = ""; if (jpListQuery.Filters.Any()) { foreach (FilterDTO f in jpListQuery.Filters) { if (f.pathGroup != null && f.pathGroup.Any()) //group is bv multicheckbox, vb categories where(categy="" OR category="") { string pathStr = ""; foreach (var p in f.pathGroup) { pathStr += (string.IsNullOrEmpty(pathStr) ? "" : " OR ") + f.name + ":" + p; } queryStr += "+" + "(" + pathStr + ")"; } else { string[] names = f.name.Split(','); string pathStr = ""; foreach (var n in names) { if (!string.IsNullOrEmpty(f.path)) { pathStr += (string.IsNullOrEmpty(pathStr) ? "" : " OR ") + n + ":" + f.path; //for dropdownlists; value is keyword => never partial search } else { pathStr += (string.IsNullOrEmpty(pathStr) ? "" : " OR ") + n + ":" + f.value + "*"; //textbox } } queryStr += "+" + "(" + pathStr + ")"; } } } return queryStr; }
private JpListQueryDTO BuildJpListQuery(List<StatusDTO> statuses) { var query = new JpListQueryDTO(); foreach (StatusDTO status in statuses) { switch (status.action) { case "paging": { int number = 100000; // string value (it could be number or "all") int.TryParse(status.data.number, out number); query.Pagination = new PaginationDTO() { number = number, currentPage = status.data.currentPage }; break; } case "filter": { if (status.type == "textbox" && status.data != null && !String.IsNullOrEmpty(status.name) && !String.IsNullOrEmpty(status.data.value)) { query.Filters.Add(new FilterDTO() { name = status.name, value = status.data.value, pathGroup = status.data.pathGroup }); } else if (status.type == "checkbox-group-filter" && status.data != null && !String.IsNullOrEmpty(status.name)) { if (status.data.filterType == "pathGroup" && status.data.pathGroup != null && status.data.pathGroup.Count > 0) { foreach (var path in status.data.pathGroup) { query.Filters.Add(new FilterDTO() { name = status.name, value = status.data.value, path = status.data.path, pathGroup = status.data.pathGroup }); } } } else if (status.type == "filter-select" && status.data != null && !String.IsNullOrEmpty(status.name)) { if (status.data.filterType == "path" && status.data.path != null) { query.Filters.Add(new FilterDTO() { name = status.name, path = status.data.path, }); } } break; } case "sort": { query.Sorts.Add(new SortDTO() { path = status.data.path, order = status.data.order }); break; } } } return query; }