Exemple #1
0
        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);
            }
        }