public static Node LoadFromXML(Node parent, XmlElement root) { Node node = new Node(parent); if (parent != null) { node.name = root.GetAttribute("name"); } else { DebugUtility.TryGetMandatoryXmlAttribute(root, "name", out node.name); } using (ScopeDebugContext.Func(() => { return("Node '" + node.name + "'"); })) { foreach (XmlNode xNode in root.ChildNodes) { if (xNode.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)xNode; switch (e.Name) { case "Column": var c = ViewColumn.Builder.LoadFromXML(e); if (c != null) { node.column.Add(c); } break; case "Data": node.data = Data.LoadFromXML(node, e); break; case "Filter": LoadFilterFromXML(node, e); break; case "SelectSet": node.localSelectSet = SelectSet.Builder.LoadFromXML(e); break; case "Condition": node.condition = Operation.MetaExpComparison.LoadFromXML(e); break; default: DebugUtility.LogInvalidXmlChild(root, e); break; } } } return(node); } }
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 Builder LoadFromXML(XmlElement root) { Builder b = new Builder(); b.name = root.GetAttribute("name"); b.sourceTableName = root.GetAttribute("table"); string strMaxRow = root.GetAttribute("maxRow"); if (string.IsNullOrEmpty(strMaxRow) || !int.TryParse(strMaxRow, out b.MaxRow)) { b.MaxRow = -1; } using (ScopeDebugContext.Func(() => { return("Select:'" + b.name + "'"); })) { foreach (XmlNode node in root.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)node; switch (e.Name) { case "Where": { var w = Where.Builder.LoadFromXML(e); if (w != null) { b.where.Add(w); } break; } default: DebugUtility.LogInvalidXmlChild(root, e); break; } } } return(b); } }
public static Builder LoadFromXML(XmlElement root) { using (ScopeDebugContext.Func(() => { return("Loading SelectSet"); })) { Builder b = new Builder(); foreach (XmlNode xNode in root.ChildNodes) { if (xNode.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)xNode; switch (e.Name) { case "Select": { var s = Select.Builder.LoadFromXML(e); if (s != null) { b.select.Add(s); } break; } case "Condition": { b.Condition = Operation.MetaExpComparison.LoadFromXML(e); break; } default: DebugUtility.LogInvalidXmlChild(root, e); break; } } } return(b); } }
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); } }
public static Data LoadFromXML(Node node, XmlElement root) { Data data = new Data(); string strType = root.GetAttribute("type"); if (string.IsNullOrEmpty(strType)) { data.type = DataType.Select; } else { switch (strType.ToLower()) { case "node": data.type = DataType.Node; break; case "select": data.type = DataType.Select; break; } } foreach (XmlNode xNode in root.ChildNodes) { if (xNode.NodeType == XmlNodeType.Element) { XmlElement e = (XmlElement)xNode; switch (e.Name) { case "Column": { var c = ViewColumn.Builder.LoadFromXML(e); if (c != null) { data.column.Add(c); } break; } case "Node": { var childNode = Node.LoadFromXML(node, e); if (childNode != null) { data.child.Add(childNode); } break; } case "SelectSet": { data.dataSelectSet = SelectSet.Builder.LoadFromXML(e); break; } default: DebugUtility.LogInvalidXmlChild(root, e); break; } } } return(data); }