public void CreateMetadataMappings(MetadataMapping mapping, List <ModelMetadata> sourceModels, List <ModelMetadata> targetModels) { var mappings = GetPrematchedMappings().SelectMany( p1 => p1.PropertyMappings.Select( p2 => { var xmlMap = sourceModels.SingleOrDefault(x => x.PropertyPath == p2.X); var jsonMap = targetModels.SingleOrDefault(j => j.PropertyPath == p2.J); if (xmlMap != null && jsonMap != null) { return(new PropertyMapping { SourceName = xmlMap.PropertyPath, SourceType = xmlMap.Type, TargetName = jsonMap.PropertyPath, TargetType = jsonMap.Type, IsArray = xmlMap.IsArray, MappingStrategy = p1.MappingStrategy }); } //log exception return(null); })).Where(m => m != null).ToList(); mapping.Properties.AddRange(mappings); sourceModels.RemoveAll(x => mappings.Any(m => x.PropertyPath == m.SourceName)); targetModels.RemoveAll(j => mappings.Any(m => j.PropertyPath == m.TargetName)); }
public void CreateMetadataMappings(MetadataMapping mapping, List <ModelMetadata> sourceModels, List <ModelMetadata> targetModels) { var xModels = sourceModels.Where(x => x.IsArray).ToArray(); var jModels = targetModels.Where(j => j.IsArray).ToArray(); var maps = xModels.SelectMany( x => jModels.Select( j => new { x, j, m = ExtensionMethods.PropertyPathPercentMatchTo(x.PropertyPath, j.PropertyPath) })) .Where(o => o.m > 0) .OrderByDescending(o => o.m) .ToList(); while (maps.Count > 0) { var map = maps.First(); mapping.Properties.Add( new PropertyMapping { SourceName = map.x.PropertyPath, SourceType = map.x.Type, TargetName = map.j.PropertyPath, TargetType = map.j.Type, IsArray = map.x.IsArray, MappingStrategy = new ArrayToArrayMappingStrategy() }); maps.RemoveAll(m => m.x == map.x || m.j == map.j); } }
public void CreateMetadataMappings(MetadataMapping mapping, List <ModelMetadata> sourceModels, List <ModelMetadata> targetModels) { var xModels = sourceModels .Where(x => x.TypeName != null && x.TypeName.EndsWith("DescriptorReferenceType")) .Select( x => new { model = x, properties = sourceModels.Where( y => y.Model == x.Type && y.PropertyPath.StartsWith(x.PropertyPath)) }) .ToList(); var jModels = targetModels.Where( j => j.Property.EndsWith("descriptor", StringComparison.InvariantCultureIgnoreCase) && j.Type == Constants.JsonTypes.String).ToList(); var maps = xModels.SelectMany( x => jModels.Select( j => new { x, j, m = ExtensionMethods.PropertyPathPercentMatchTo(x.model.PropertyPath, j.PropertyPath) })) .Where(o => o.m > 0) .OrderByDescending(o => o.m) .ToList(); while (maps.Count > 0) { var map = maps.First(); mapping.Properties.Add( new PropertyMapping { SourceName = map.x.model.PropertyPath, SourceType = map.x.model.Type, TargetName = map.j.PropertyPath, TargetType = map.j.Type, IsArray = map.x.model.IsArray, MappingStrategy = new DescriptorReferenceTypeToStringMappingStrategy() }); mapping.Properties.AddRange( map.x.properties.Select( p => new PropertyMapping { SourceName = p.PropertyPath, SourceType = p.Type, TargetName = "{none}", TargetType = "{none}", IsArray = p.IsArray, MappingStrategy = new NoOperationMappingStrategy() })); sourceModels.RemoveAll(x => x == map.x.model || map.x.properties.Any(p => p == x)); targetModels.RemoveAll(j => j == map.j); maps.RemoveAll(m => m.x == map.x || m.j == map.j); } }
public void CreateMetadataMappings(MetadataMapping mapping, List <ModelMetadata> sourceModels, List <ModelMetadata> targetModels) { targetModels.RemoveAll( j => JsonProperties.Any(m => j.Model == m.Model && m.PropertyPaths.Any(p => p == j.PropertyPath))); sourceModels.RemoveAll( x => XmlProperties.Any(m => x.Model == m.Model && m.PropertyPaths.Any(p => p == x.PropertyPath))); }
public void CreateMetadataMappings(MetadataMapping mapping, List <ModelMetadata> sourceModels, List <ModelMetadata> targetModels) { _logger.Debug($"mapping {mapping.RootName} from {mapping.SourceName} to {mapping.TargetName}"); var maps = sourceModels.SelectMany( x => targetModels.Select( j => new { x, j, m = x.IsSimpleType && j.IsSimpleType && (ExtensionMethods.AreMatchingSimpleTypes(j.Type, x.Type) || ExtensionMethods.AreMatchingDateTypes(j.Format, x.Type)) ? ExtensionMethods.PropertyPathPercentMatchTo(x.PropertyPath, j.PropertyPath) : 0 })).Where(o => o.m > 0.001).OrderByDescending(o => o.m).ToList(); while (maps.Count > 0) { var map = maps.First(); MappingStrategy strategy = new CopySimplePropertyMappingStrategy(); if (map.x.Type == Constants.XmlTypes.Token && map.j.Type == Constants.JsonTypes.Integer && map.x.Property.EndsWith("SchoolYear")) { strategy = new SchoolYearPropertyMappingStrategy(); } if (map.x.Type == Constants.XmlTypes.Boolean && map.j.Type == Constants.JsonTypes.Boolean) { strategy = new BooleanPropertyMappingStrategy(); } mapping.Properties.Add( new PropertyMapping { SourceName = map.x.PropertyPath, SourceType = map.x.Type, TargetName = map.j.PropertyPath, TargetType = map.j.Type, IsArray = map.x.IsArray, MappingStrategy = strategy }); maps.RemoveAll(m => m.j.PropertyPath == map.j.PropertyPath || m.x.PropertyPath == map.x.PropertyPath); } }