Beispiel #1
0
                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);
                }
Beispiel #2
0
                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);
                    }
                }