public static Operation.Filter.Sort LoadSortFilterFromXML(Node node, XmlElement root) { Database.Operation.Filter.Sort f = new Operation.Filter.Sort(); // if the element has children, do not process it as a sort level. if (root.ChildNodes.Count == 0) { string colName; string strOrder; if (DebugUtility.TryGetMandatoryXmlAttribute(root, "column", out colName) && DebugUtility.TryGetMandatoryXmlAttribute(root, "order", out strOrder)) { SortOrder order = SortOrderString.StringToSortOrder(strOrder, SortOrder.Ascending); f.SortLevel.Add(new Operation.Filter.Sort.LevelByName(colName, order)); } } //Process children as sort level foreach (XmlNode xNode in root.ChildNodes) { if (xNode.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)xNode; if (e.Name == "Level") { string colNameL; string strOrderL; if (DebugUtility.TryGetMandatoryXmlAttribute(e, "column", out colNameL) && DebugUtility.TryGetMandatoryXmlAttribute(e, "order", out strOrderL)) { var orderL = SortOrderString.StringToSortOrder(strOrderL, SortOrder.Ascending); f.SortLevel.Add(new Operation.Filter.Sort.LevelByName(colNameL, orderL)); } } else { //DebugUtility.LogInvalidXmlChild(root, e); } } } if (f.SortLevel.Count == 0) { return(null); } return(f); }
public static Operation.Filter.Filter LoadSubFilterFromXML(Node node, XmlElement root) { Operation.Filter.Multi multi = null; Operation.Filter.Filter lastFilter = null; Operation.Filter.Sort sortFilter = null; foreach (XmlNode xNode in root.ChildNodes) { if (xNode.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)xNode; Operation.Filter.Filter filter = null; if (e.Name == "Group") { filter = LoadGroupFilterFromXML(node, e); } else if (e.Name == "Sort") { sortFilter = LoadSortFilterFromXML(node, e); if (node.defaultAllLevelSortFilter != null) { Operation.Filter.DefaultSort ds = new Operation.Filter.DefaultSort(node.defaultAllLevelSortFilter, sortFilter); filter = ds; } else { filter = sortFilter; } } else if (e.Name == "DefaultSort") { //skip this element as it is processed by LoadFilterFromXML } else { //DebugUtility.LogInvalidXmlChild(root, e); } if (lastFilter != null) { if (multi == null) { multi = new Operation.Filter.Multi(); } multi.filters.Add(lastFilter); } lastFilter = filter; } } //add all level sort filter if we haven't already if (sortFilter == null && node.defaultAllLevelSortFilter != null) { Operation.Filter.DefaultSort ds = new Operation.Filter.DefaultSort(node.defaultAllLevelSortFilter, null); //must use the multi filter if we have a lastFilter or already have a multi filter. //we could have a multi filter and still have lastFilter == null if the lastfilter creation failed. if (lastFilter != null || multi != null) { if (multi == null) { multi = new Operation.Filter.Multi(); } if (lastFilter != null) { multi.filters.Add(lastFilter); } multi.filters.Add(ds); if (multi.filters.Count > 1) { return(multi); } } return(ds); } else { //we have a sort filter already or we do not have a all-level sort filter if (multi != null) { if (lastFilter != null) { multi.filters.Add(lastFilter); } if (multi.filters.Count > 1) { return(multi); } } return(lastFilter); } }