Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
        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);
        }