public AttributeDefinitionView Create(AttributeDefinition AttributeDefinition)
        {
            var cacheKey = new KeyValuePair<long, string>(AttributeDefinition.Id, AttributeDefinition.AttributeDataType);
            AttributeDefinitionView cache = null; ;
            if (container.ContainsKey(cacheKey)) cache = container[cacheKey];
            else
            {
                if (AttributeDefinition.AttributeDataType == "String")
                {
                    StringRuleAttributeDefinitionView srcdv = new StringRuleAttributeDefinitionView(AttributeDefinition);
                    StringRuleFactory factory = new StringRuleFactory();
                    AttributeDefinition.MapRules.ForEach(k => {
                        IStringRule rule = factory.CreateRule(k.RuleType, k.RuleContent);
                        if(rule!=null) srcdv.RuleCollection.Add(rule);
                    });
                    cache = container[cacheKey] = srcdv;

                }
                else if (AttributeDefinition.AttributeDataType == "Numeric")
                {
                    NumericRuleAttributeDefinitionView srcdv = new NumericRuleAttributeDefinitionView(AttributeDefinition);
                    NumericRuleFactory factory = new NumericRuleFactory();
                    AttributeDefinition.MapRules.ForEach(k =>
                    {
                        INumericRule rule = factory.CreateRule(k.RuleType, k.RuleContent);
                        if (rule != null) srcdv.RuleCollection.Add(rule);
                    });
                    cache = container[cacheKey] = srcdv;
                }
            }
            return cache;
        }
示例#2
0
        public double? ApplyStringRule(AttributeDefinition AttributeDefinition, string sValue, StringRuleFactory stringRuleFactory)
        {
            IStringRule rule = null;
            foreach (var mapRule in AttributeDefinition.MapRules)
            {
                rule = stringRuleFactory.CreateRule(mapRule.RuleType, mapRule.RuleContent);
                var result = rule.Apply(sValue);
                if (result.HasValue)
                {
                    return result.Value;
                }
            }

            return null;
        }
示例#3
0
        public void CreateMapTable(DataFile dataFile, List<AttributeDefinition> AttributeDefinitions)
        {
            StringRuleFactory stringRuleFactory = new StringRuleFactory();
            NumericRuleFactory numericRuleFactory = new NumericRuleFactory();
            var rows = DataRepository.GetDataForTable(dataFile.RawTableName);
            var records = new List<string[]>();
            SortedDictionary<string, SortedDictionary<string,int>> sDictionary = new SortedDictionary<string, SortedDictionary<string,int>>();
            SortedDictionary<string,int> maxKeysDictionary = new SortedDictionary<string, int>();
            foreach (var row in rows)
            {
                var rowSqls = new List<string>();
                rowSqls.Add(row.Id.ToString());
                foreach (var AttributeDefinition in AttributeDefinitions)
                {
                    string sValue = ((IDictionary<string, object>)row)[AttributeDefinition.Name].ToString();
                    if (AttributeDefinition.AttributeDataType == "String")
                    {
                        if (AttributeDefinition.IsAutoEncoding)
                        {
                            if (!sDictionary.ContainsKey(AttributeDefinition.Name))
                            {
                                sDictionary[AttributeDefinition.Name] = new SortedDictionary<string,int>();
                            }
                            if (!sDictionary[AttributeDefinition.Name].ContainsKey(sValue))
                            {
                                sDictionary[AttributeDefinition.Name][sValue] = sDictionary[AttributeDefinition.Name].Count + 1;
                            }
                            var val = sDictionary[AttributeDefinition.Name][sValue];
                            rowSqls.Add(val.ToString());
                        }
                        else if (AttributeDefinition.ValidationStatus == "Valid" && AttributeDefinition.MapRules.Count !=0)
                        {
                            var iValue = ApplyStringRule(AttributeDefinition, sValue, stringRuleFactory);
                            rowSqls.Add(iValue.Value.ToString());
                        }
                        else
                        {
                            rowSqls.Add(sValue);
                        }

                    }
                    else
                    {
                        rowSqls.Add(ApplyNumericRule(AttributeDefinition, sValue, numericRuleFactory).ToString());
                    }
                }

                records.Add(rowSqls.ToArray());
            }

            DataRepository.GenerateMapTable(dataFile, AttributeDefinitions, records);
            var decisionTableId = DecisionTableRepository.Create(new DecisionTable
            {
                TableName = dataFile.MapTableName,
                Content = string.Format("Create map table {0} from file {0}", dataFile.Name),
                CreatedDate = DateTime.Now.ToNormalDateTimeString()
            });
            DecisionTableHistoryRepository.Create(new DecisionTableHistory {
                Action = EDTHistoryAction.CreateMapTable,
                DecisionTableId = decisionTableId,
                Decription = "",
                CreatedDate = DateTime.Now.ToNormalDateTimeString(),
                ParentId = 0
            });
        }