/// <summary> /// Creates the maping by friendly name comparison. /// </summary> /// <param name="column">The column.</param> /// <param name="dstClass">The DST class.</param> /// <param name="builder">The builder.</param> public static void CreateMapingByFriendlyNameComparison(DataColumn column, MetaClass dstClass, MappingElementBuilder builder) { if (column == null) { throw new ArgumentNullException("column"); } if (dstClass == null) { throw new ArgumentNullException("dstClass"); } if (builder == null) { throw new ArgumentNullException("builder"); } FieldMathResult matchResult = CreateMapingByFriendlyNameComparison(column, dstClass, string.Empty, null, builder); if (matchResult != null) { builder.AssignCopyValueRule(column.ColumnName, matchResult.Tag); } }
/// <summary> /// Creates the default name of the mapping by. /// </summary> private static FieldMathResult CreateMapingByFriendlyNameComparison(DataColumn column, MetaClass dstClass, string prefix, FieldMathResult prevMatchResult, MappingElementBuilder builder) { FieldMathResult retVal = prevMatchResult; foreach (MetaField metaField in dstClass.Fields) { string mappedFieldName = prefix + metaField.Name; // Skip always maped metaField if (builder.GetRuleByMetaField(mappedFieldName) != null) continue; // Skip Back Aggregation References if (metaField.Attributes.ContainsKey(McDataTypeAttribute.AggregationMark)) continue; //Skip referenses if (metaField.IsReference) continue; // Process Aggregation if (metaField.IsAggregation) { // Find Aggr meta class MetaClass aggrMetaClass = DataContext.Current.GetMetaClass((string)metaField.Attributes[McDataTypeAttribute.AggregationMetaClassName]); // Find rules retVal = CreateMapingByFriendlyNameComparison(column, aggrMetaClass, metaField.Name + ".", retVal, builder); continue; } //Получаем имя в русской локализации string enName = GetWebResourceString(metaField.FriendlyName, CultureInfo.GetCultureInfo("en-US")); //получаем имя в английской локализации string ruName = GetWebResourceString(metaField.FriendlyName, CultureInfo.GetCultureInfo("ru-RU")); //Find best match for pattern foreach(string searchPattern in new string[] { enName, ruName }) { if (column.ColumnName.Contains(searchPattern)) { FieldMathResult newResult = new FieldMathResult(column.ColumnName, searchPattern, mappedFieldName); if (retVal != null) { retVal = retVal.Weight < newResult.Weight ? retVal : newResult; } else { retVal = newResult; } break; } } } return retVal; }
/// <summary> /// Creates the default name of the mapping by. /// </summary> private static FieldMathResult CreateMapingByFriendlyNameComparison(DataColumn column, MetaClass dstClass, string prefix, FieldMathResult prevMatchResult, MappingElementBuilder builder) { FieldMathResult retVal = prevMatchResult; foreach (MetaField metaField in dstClass.Fields) { string mappedFieldName = prefix + metaField.Name; // Skip always maped metaField if (builder.GetRuleByMetaField(mappedFieldName) != null) { continue; } // Skip Back Aggregation References if (metaField.Attributes.ContainsKey(McDataTypeAttribute.AggregationMark)) { continue; } //Skip referenses if (metaField.IsReference) { continue; } // Process Aggregation if (metaField.IsAggregation) { // Find Aggr meta class MetaClass aggrMetaClass = DataContext.Current.GetMetaClass((string)metaField.Attributes[McDataTypeAttribute.AggregationMetaClassName]); // Find rules retVal = CreateMapingByFriendlyNameComparison(column, aggrMetaClass, metaField.Name + ".", retVal, builder); continue; } //Получаем имя в русской локализации string enName = GetWebResourceString(metaField.FriendlyName, CultureInfo.GetCultureInfo("en-US")); //получаем имя в английской локализации string ruName = GetWebResourceString(metaField.FriendlyName, CultureInfo.GetCultureInfo("ru-RU")); //Find best match for pattern foreach (string searchPattern in new string[] { enName, ruName }) { if (column.ColumnName.Contains(searchPattern)) { FieldMathResult newResult = new FieldMathResult(column.ColumnName, searchPattern, mappedFieldName); if (retVal != null) { retVal = retVal.Weight < newResult.Weight ? retVal : newResult; } else { retVal = newResult; } break; } } } return(retVal); }