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; }
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; }
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 }); }