private void LoadTableRules(XmlElement root) { var list = root.GetElementsByTagName("tableRule"); XmlNode node = null; XmlElement e = null; for (int i = 0, n = list.Count; i < n; i++) { node = list.Item(i); if (node.NodeType == XmlNodeType.Element) { e = (XmlElement)node; var name = e.GetAttribute("name"); if (tableRules.ContainsKey(name)) { throw new ConfigException("table rule " + name + " duplicated!"); } var ruleNodes = e.GetElementsByTagName("rule"); var length = ruleNodes.Count; var ruleList = new List <RuleConfig>(length); for (var j = 0; j < length; ++j) { var rule = LoadRule((XmlElement)ruleNodes.Item(j)); ruleList.Add(rule); rules.Add(rule); } tableRules[name] = new TableRuleConfig(name, ruleList); } } }
private static ICollection <string> BuildColumnIndex(TableRuleConfig rule) { if (rule == null) { return(new HashSet <string>()); } var rs = rule.Rules; if (rs == null || rs.IsEmpty()) { return(new HashSet <string>()); } var columnIndex = new HashSet <string>(); foreach (var r in rs) { var columns = r.Columns; if (columns != null) { foreach (var col in columns) { if (col != null) { columnIndex.Add(col.ToUpper()); } } } } return(columnIndex); }
public TableConfig(string name, string dataNode, TableRuleConfig rule, bool ruleRequired) { if (name == null) { throw new ArgumentException("table name is null"); } Name = name.ToUpper(); var dataNodes = SplitUtil.Split(dataNode, ',', '$', '-', '[', ']'); if (dataNodes == null || dataNodes.Length <= 0) { throw new ArgumentException("invalid table dataNodes: " + dataNode); } DataNodes = dataNodes; Rule = rule; columnIndex = BuildColumnIndex(rule); IsRuleRequired = ruleRequired; }
private IDictionary <string, TableConfig> LoadTables(XmlElement node) { var tables = new Dictionary <string, TableConfig>(); var nodeList = node.GetElementsByTagName("table"); XmlElement tableElement = null; TableRuleConfig tableRule = null; for (var i = 0; i < nodeList.Count; i++) { tableElement = (XmlElement)nodeList.Item(i); var name = tableElement.GetAttribute("name").ToUpper(); var dataNode = tableElement.GetAttribute("dataNode"); tableRule = null; if (tableElement.HasAttribute("rule")) { var ruleName = tableElement.GetAttribute("rule"); tableRule = tableRules[ruleName]; if (tableRule == null) { throw new ConfigException("rule " + ruleName + " is not found!"); } } var ruleRequired = false; if (tableElement.HasAttribute("ruleRequired")) { ruleRequired = bool.Parse(tableElement.GetAttribute("ruleRequired")); } var tableNames = SplitUtil.Split(name, ',', true); foreach (var tableName in tableNames) { var table = new TableConfig(tableName, dataNode, tableRule, ruleRequired); CheckDataNodeExists(table.DataNodes); if (tables.ContainsKey(table.Name)) { throw new ConfigException("table " + tableName + " duplicated!"); } tables[table.Name] = table; } } return(tables); }