private static IEnumerable <INamedTypeDescriptor> CollectTypeDescriptors(
            ClientModel model,
            IMapperContext context)
        {
            var typeDescriptors      = new Dictionary <NameString, TypeDescriptorModel>();
            var inputTypeDescriptors = new Dictionary <NameString, InputTypeDescriptorModel>();
            var leafTypeDescriptors  = new Dictionary <NameString, INamedTypeDescriptor>();

            // first we create type descriptor for the leaf types ...
            CollectLeafTypes(model, context, leafTypeDescriptors);

            // after that we collect all the output types that we have ...
            CollectTypes(model, context, typeDescriptors);

            // with these two completed we can create the properties for all output
            // types and complete them since we know now all the property types.
            AddProperties(model, context, typeDescriptors, leafTypeDescriptors);

            // last but not least we will collect all the input object types ...
            CollectInputTypes(model, context, inputTypeDescriptors);

            // and in a second step complete the input object types since we now know all
            // the possible property types.
            AddInputTypeProperties(inputTypeDescriptors, leafTypeDescriptors);

            return(typeDescriptors.Values
                   .Select(t => t.Descriptor)
                   .Concat(inputTypeDescriptors.Values
                           .Select(t => t.Descriptor)
                           .Concat(leafTypeDescriptors.Values)));
        }
        private static void RegisterType(
            ClientModel model,
            IMapperContext context,
            Dictionary <NameString, TypeDescriptorModel> typeDescriptors,
            OutputTypeModel outputType,
            List <UnionType> unionTypes,
            TypeKind?kind = null,
            OperationModel?operationModel = null)
        {
            if (typeDescriptors.TryGetValue(
                    outputType.Name,
                    out TypeDescriptorModel descriptorModel))
            {
                return;
            }

            if (operationModel is not null && outputType.IsInterface)
            {
                descriptorModel = CreateInterfaceTypeModel(
                    model,
                    context,
                    typeDescriptors,
                    outputType,
                    unionTypes,
                    descriptorModel,
                    operationModel,
                    kind);
            }
        public static void Map(ClientModel model, IMapperContext context)
        {
            foreach (OperationModel modelOperation in model.Operations)
            {
                RuntimeTypeInfo resultType = context.GetRuntimeType(
                    modelOperation.ResultType.Name,
                    Descriptors.TypeDescriptors.TypeKind.ResultType);

                context.Register(
                    modelOperation.Name,
                    new ResultBuilderDescriptor(
                        new RuntimeTypeInfo(
                            CreateResultBuilderName(modelOperation.Name),
                            CreateStateNamespace(context.Namespace)),
                        context.Types.Single(t => t.RuntimeType.Equals(resultType)),
                        modelOperation.LeafTypes.Select(
                            leafType =>
                {
                    string runtimeType =
                        leafType.RuntimeType.Contains('.')
                                        ? leafType.RuntimeType
                                        : $"{context.Namespace}.{leafType.RuntimeType}";

                    string serializationType =
                        leafType.SerializationType.Contains('.')
                                        ? leafType.SerializationType
                                        : $"{context.Namespace}.{leafType.SerializationType}";

                    return(new ValueParserDescriptor(
                               leafType.Name,
                               TypeInfos.GetOrCreate(runtimeType),
                               TypeInfos.GetOrCreate(serializationType)));
                }).ToList()));
            }
        }
Example #4
0
        public static void Map(ClientModel model, IMapperContext context)
        {
            var entities = new List <EntityIdDescriptor>();

            foreach (var entity in model.Entities)
            {
                var fields = new List <ScalarEntityIdDescriptor>();

                foreach (var field in entity.Fields)
                {
                    if (field.Type.NamedType() is ILeafType leafType)
                    {
                        fields.Add(
                            new ScalarEntityIdDescriptor(
                                field.Name,
                                leafType.Name,
                                model.Schema.GetOrCreateTypeInfo(leafType.GetSerializationType())));
                    }
                }

                entities.Add(
                    new EntityIdDescriptor(entity.Name, entity.Name, fields));
            }

            context.Register(
                new EntityIdFactoryDescriptor(
                    context.ClientName + "EntityIdFactory",
                    entities,
                    NamingConventions.CreateStateNamespace(context.Namespace)));
        }
Example #5
0
        public static void Map(ClientModel model, IMapperContext context)
        {
            foreach (OperationModel modelOperation in model.Operations)
            {
                var arguments = modelOperation.Arguments.Select(
                    arg =>
                {
                    NameString typeName = arg.Type.TypeName();

                    INamedTypeDescriptor namedTypeDescriptor =
                        context.Types.Single(type => type.Name.Equals(typeName));

                    return(new PropertyDescriptor(
                               arg.Name,
                               Rewrite(arg.Type, namedTypeDescriptor)));
                })
                                .ToList();

                var resultTypeName = CreateResultRootTypeName(modelOperation.ResultType.Name);

                switch (modelOperation.OperationType)
                {
                case OperationType.Query:
                    context.Register(
                        modelOperation.Name,
                        new QueryOperationDescriptor(
                            modelOperation.Name,
                            context.Types.Single(t => t.RuntimeType.Name.Equals(resultTypeName)),
                            context.Namespace,
                            arguments,
                            modelOperation.Document.ToString()));
                    break;

                case OperationType.Mutation:
                    context.Register(
                        modelOperation.Name,
                        new MutationOperationDescriptor(
                            modelOperation.Name,
                            context.Types.Single(t => t.RuntimeType.Name.Equals(resultTypeName)),
                            context.Namespace,
                            arguments,
                            modelOperation.Document.ToString()));
                    break;

                case OperationType.Subscription:
                    context.Register(
                        modelOperation.Name,
                        new SubscriptionOperationDescriptor(
                            modelOperation.Name,
                            context.Types.Single(t => t.RuntimeType.Name.Equals(resultTypeName)),
                            context.Namespace,
                            arguments,
                            modelOperation.Document.ToString()));
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Example #6
0
        /// <summary>
        ///   <para> Map an object </para>
        /// </summary>
        /// <typeparam name="TFrom"> Type to map from </typeparam>
        /// <typeparam name="TTo"> Type to map to </typeparam>
        /// <param name="from"> Object to map from </param>
        /// <param name="toExpression"> Expression for the target </param>
        /// <param name="context"> Context </param>
        public void Map <TFrom, TTo>(
            TFrom from,
            Expression <Func <TTo> > toExpression,
            IMapperContext context)
            where TTo : class
        {
            if (toExpression == null)
            {
                throw new ArgumentNullException("toExpression");
            }
            if (Equals(from, default(TFrom)))
            {
                return;
            }

            var toMember
                = new CollapseMembersExpressionVisitor()
                  .Modify(toExpression);
            var to = toMember.GetValue();

            if (to == null)
            {
                to = context.Create <TTo>();

                toMember.SetValue(to);
            }

            var mapper = Get <TFrom, TTo>();

            mapper(from, to, context);

            context.Update(to);
        }
Example #7
0
        private static void CollectInputTypes(
            ClientModel model,
            IMapperContext context,
            Dictionary <NameString, InputTypeDescriptorModel> typeDescriptors)
        {
            foreach (OperationModel operation in model.Operations)
            {
                foreach (var inputType in operation.InputObjectTypes)
                {
                    if (!typeDescriptors.TryGetValue(
                            inputType.Name,
                            out InputTypeDescriptorModel descriptorModel))
                    {
                        descriptorModel = new InputTypeDescriptorModel(
                            inputType,
                            new NamedTypeDescriptor(
                                inputType.Name,
                                context.Namespace,
                                false,
                                new List <NameString>(),
                                kind: TypeKind.InputType,
                                graphQLTypeName: inputType.Type.Name));

                        typeDescriptors.Add(
                            inputType.Name,
                            descriptorModel);
                    }
                }
            }
        }
Example #8
0
 public static void Map <TFrom, TTo>(
     this IMapperContext context,
     TFrom from,
     Expression <Func <TTo> > toExpression) where TTo : class
 {
     context.Container
     .Map(from, toExpression, context);
 }
        public a_multi_depth_supplied_mapping_matcher()
        {
            _updatedEntities = new List<IEntity>();
            _deletedEntities = new List<IEntity>();

            _mapperContext = new MapperContext(
                new MapperContainer()
                    .Register<Person, PersonEntity>(
                        (f, t, c) =>
                            {
                                c.Map(f.Name, () => t.Name);
                                c.MapAll(f.Addresses, () => t.Addresses, (fa, ta) => fa.Name == ta.Name);
                            }
                    )
                    .Register<Name, NameEntity>(
                        (f, t, c) =>
                            {
                                t.First = f.First;
                                t.Last = f.Last;
                            }
                    )
                    .Register<Address, AddressEntity>(
                        (f, t, c) => { t.Name = f.Name; }
                    ),
                new MapperContext.Parameters
                    {
                        Deleter = o => _deletedEntities.Add((IEntity) o),
                        Updater = o =>
                                      {
                                          var e = o as IEntity;
                                          if (e != null) _updatedEntities.Add(e);
                                      }
                    }
                );

            _from = new Person
                        {
                            Name = new Name {First = "Person"},
                            Addresses = new[]
                                            {
                                                new Address {Name = "Keep"},
                                                new Address {Name = "New"}
                                            }
                        };

            _to = new PersonEntity
                      {
                          Name = new NameEntity {First = "Overwite"},
                          Addresses = new[]
                                          {
                                              new AddressEntity {Name = "Keep"},
                                              new AddressEntity {Name = "Delete"}
                                          }
                      };

            _mapperContext.Map(_from, () => _to);
        }
Example #10
0
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     foreach (var entityTypeDescriptor in CollectEntityTypes(model, context))
     {
         context.Register(entityTypeDescriptor.GraphQLTypeName, entityTypeDescriptor);
     }
 }
 public a_single_depth_supplied_mapping()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
             .Register<Person, PersonEntity>(
                 (f, t, c) => { t.Email = f.Email; }
             )
         );
 }
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     foreach (var descriptor in CollectEnumDescriptors(model, context))
     {
         context.Register(descriptor.Name, descriptor);
     }
 }
Example #13
0
 public calling_map()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
             .Register<Person, PersonEntity>(
                 (f, t, c) => { t.Name = new NameEntity(); }
             )
         );
 }
Example #14
0
 public register_a_mapping()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
         .Register <Person, PersonEntity>(
             (f, t, c) => { }
             )
         );
 }
Example #15
0
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     context.Register(
         new StoreAccessorDescriptor(
             NamingConventions.CreateStoreAccessor(context.ClientName),
             NamingConventions.CreateStateNamespace(context.Namespace)));
 }
Example #16
0
 public calling_map_all()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
             .Register<Person, PersonEntity>(
                 (f, t, c) => { }
             )
         );
 }
Example #17
0
 public register_a_mapping()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
             .Register<Person, PersonEntity>(
                 (f, t, c) => { }
             )
         );
 }
Example #18
0
 public calling_map()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
         .Register <Person, PersonEntity>(
             (f, t, c) => { t.Name = new NameEntity(); }
             )
         );
 }
Example #19
0
        private static void CollectTypes(
            ClientModel model,
            IMapperContext context,
            Dictionary <NameString, TypeDescriptorModel> typeDescriptors)
        {
            var unionTypes = model.Schema.Types.OfType <UnionType>().ToList();

            foreach (OperationModel operation in model.Operations)
            {
                foreach (OutputTypeModel outputType in operation.GetImplementations(
                             operation.ResultType))
                {
                    RegisterType(
                        model,
                        context,
                        typeDescriptors,
                        outputType,
                        unionTypes,
                        TypeKind.ResultType);
                }

                foreach (var outputType in operation.OutputTypes.Where(t => !t.IsInterface))
                {
                    RegisterType(
                        model,
                        context,
                        typeDescriptors,
                        outputType,
                        unionTypes);
                }

                RegisterType(
                    model,
                    context,
                    typeDescriptors,
                    operation.ResultType,
                    unionTypes,
                    TypeKind.ResultType,
                    operation);

                foreach (var outputType in operation.OutputTypes.Where(t => t.IsInterface))
                {
                    if (!typeDescriptors.TryGetValue(
                            outputType.Name,
                            out TypeDescriptorModel _))
                    {
                        RegisterType(
                            model,
                            context,
                            typeDescriptors,
                            outputType,
                            unionTypes,
                            operationModel: operation);
                    }
                }
            }
        }
Example #20
0
 public calling_map_all()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
         .Register <Person, PersonEntity>(
             (f, t, c) => { }
             )
         );
 }
 public a_single_depth_supplied_mapping()
 {
     _mapperContext = new MapperContext(
         new MapperContainer()
         .Register <Person, PersonEntity>(
             (f, t, c) => { t.Email = f.Email; }
             )
         );
 }
Example #22
0
        public a_multi_depth_supplied_mapping_no_matcher()
        {
            new List <IEntity>();
            new List <IEntity>();

            _mapperContext = new MapperContext(
                new MapperContainer()
                .Register <Person, PersonEntity>(
                    (f, t, c) =>
            {
                c.Map(f.Name, () => t.Name);
                c.MapAll(f.Addresses, () => t.Addresses);
            })
                .Register <Name, NameEntity>(
                    (f, t, c) =>
            {
                t.First = f.First;
                t.Last  = f.Last;
            }
                    )
                .Register <Address, AddressEntity>(
                    (f, t, c) => { t.Name = f.Name; }
                    )
                );

            _from = new Person
            {
                Name = new Name {
                    First = "Person"
                },
                Addresses = new[]
                {
                    new Address {
                        Name = "Address"
                    }
                }
            };

            _to = new PersonEntity
            {
                Name = new NameEntity {
                    First = "Overwite"
                },
                Addresses = new[]
                {
                    new AddressEntity {
                        Name = "Overwite"
                    },
                    new AddressEntity {
                        Name = "Overwite"
                    }
                }
            };

            _mapperContext.Map(_from, () => _to);
        }
Example #23
0
 public static void Map(ClientModel model, IMapperContext context)
 {
     context.Register(
         new DependencyInjectionDescriptor(
             context.ClientName,
             context.Namespace,
             context.EntityTypes.ToList(),
             context.Operations.ToList(),
             context.Types));
 }
Example #24
0
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     context.Register(
         new ClientDescriptor(
             context.ClientName,
             context.Namespace,
             context.Operations.ToList()));
 }
        private static IEnumerable <EntityTypeDescriptor> CollectEntityTypes(
            ClientModel model,
            IMapperContext context)
        {
            var entityTypes  = new Dictionary <NameString, HashSet <NameString> >();
            var descriptions = new Dictionary <NameString, string?>();

            foreach (OperationModel operation in model.Operations)
            {
                foreach (var outputType in operation.OutputTypes.Where(t => !t.IsInterface))
                {
                    INamedType namedType = outputType.Type.NamedType();
                    descriptions[namedType.Name] = outputType.Description;
                    if (outputType.Type.NamedType().IsEntity())
                    {
                        if (!entityTypes.TryGetValue(
                                namedType.Name,
                                out HashSet <NameString>?components))
                        {
                            components = new HashSet <NameString>();
                            entityTypes.Add(namedType.Name, components);
                        }

                        components.Add(outputType.Name);
                    }
                }
            }

            foreach (KeyValuePair <NameString, HashSet <NameString> > entityType in entityTypes)
            {
                RuntimeTypeInfo runtimeType =
                    CreateEntityType(entityType.Key, context.Namespace);

                descriptions.TryGetValue(entityType.Key, out var description);

                var possibleTypes = entityType.Value
                                    .Select(name => context.Types.Single(t => t.RuntimeType.Name.Equals(name)))
                                    .OfType <ComplexTypeDescriptor>()
                                    .ToList();

                var entityTypeDescriptor = new EntityTypeDescriptor(
                    entityType.Key,
                    runtimeType,
                    possibleTypes,
                    description);

                foreach (var type in possibleTypes.OfType <ObjectTypeDescriptor>())
                {
                    type.CompleteEntityType(entityTypeDescriptor);
                }

                yield return(entityTypeDescriptor);
            }
        }
Example #26
0
 public MappingEngine(IMapperContext mapperContext,
     Internal.IDictionary<TypePair, IObjectMapper> objectMapperCache,
     Func<Type, object> serviceCtor)
 {
     /* Never, ever carry a previously configured engine forward:
     that's the whole point of facilitating micro-mapping. */
     _mapperContext = mapperContext;
     ObjectMapperCache = objectMapperCache;
     ServiceCtor = serviceCtor;
     _mapperContext.ConfigurationProvider.TypeMapCreated += ClearTypeMap;
 }
Example #27
0
 public static void MapAll <TFrom, TTo>(
     this IMapperContext context,
     IEnumerable <TFrom> from,
     Expression <Func <IEnumerable <TTo> > > toExpression)
     where TTo : class
 {
     context.Container
     .MapAll(
         from, toExpression,
         null,
         context);
 }
        public static IEnumerable <(NameString, NamedTypeDescriptor)> CollectTypeDescriptors(
            ClientModel model,
            IMapperContext context)
        {
            var typeDescriptors       = new Dictionary <NameString, TypeDescriptorModel>();
            var inputTypeDescriptors  = new Dictionary <NameString, InputTypeDescriptorModel>();
            var scalarTypeDescriptors = new Dictionary <NameString, NamedTypeDescriptor>();

            CollectTypes(
                model,
                context,
                typeDescriptors);

            AddProperties(
                model,
                context,
                typeDescriptors,
                scalarTypeDescriptors);

            CollectInputTypes(
                model,
                context,
                inputTypeDescriptors);

            AddInputTypeProperties(
                model,
                context,
                inputTypeDescriptors,
                scalarTypeDescriptors);

            foreach (TypeDescriptorModel descriptorModel in typeDescriptors.Values)
            {
                yield return(
                    descriptorModel.NamedTypeDescriptor.Name,
                    descriptorModel.NamedTypeDescriptor);
            }

            foreach (InputTypeDescriptorModel descriptorModel in inputTypeDescriptors.Values)
            {
                yield return(
                    descriptorModel.NamedTypeDescriptor.Name,
                    descriptorModel.NamedTypeDescriptor);
            }

            foreach (NamedTypeDescriptor typeDescriptor in scalarTypeDescriptors.Values)
            {
                yield return(
                    typeDescriptor.Name + "_" + typeDescriptor.GraphQLTypeName !.Value,
                    typeDescriptor);
            }
        }
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     context.Register(
         new DependencyInjectionDescriptor(
             context.Client,
             context.EntityTypes.ToList(),
             context.Operations.ToList(),
             context.Types,
             context.TransportProfiles,
             context.EntityIdFactory,
             context.StoreAccessor));
 }
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     foreach (var(nameString, namedTypeDescriptor) in
              CollectTypeDescriptors(
                  model,
                  context))
     {
         context.Register(
             nameString,
             namedTypeDescriptor);
     }
 }
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     context.Register(
         new DependencyInjectionDescriptor(
             context.ClientName,
             context.Namespace,
             EntityTypeDescriptorMapper.CollectEntityTypes(model, context).ToList(),
             context.Operations.ToList(),
             TypeDescriptorMapper
             .CollectTypeDescriptors(model, context)
             .Select(x => x.Item2)
             .ToList(),
             EnumDescriptorMapper.CollectEnumDescriptors(model, context).ToList()));
 }
 public static IEnumerable <EnumDescriptor> CollectEnumDescriptors(
     ClientModel model,
     IMapperContext context)
 {
     return(model.LeafTypes
            .OfType <EnumTypeModel>()
            .Select(
                enumType =>
                new EnumDescriptor(
                    enumType.Name,
                    context.Namespace,
                    enumType.Values
                    .Select(value =>
                            new EnumValueDescriptor(value.Name, value.Value.Name))
                    .ToList())));
 }
        public a_multi_depth_supplied_mapping_no_matcher()
        {
            new List<IEntity>();
            new List<IEntity>();

            _mapperContext = new MapperContext(
                new MapperContainer()
                    .Register<Person, PersonEntity>(
                        (f, t, c) =>
                            {
                                c.Map(f.Name, () => t.Name);
                                c.MapAll(f.Addresses, () => t.Addresses);
                            })
                    .Register<Name, NameEntity>(
                        (f, t, c) =>
                            {
                                t.First = f.First;
                                t.Last = f.Last;
                            }
                    )
                    .Register<Address, AddressEntity>(
                        (f, t, c) => { t.Name = f.Name; }
                    )
                );

            _from = new Person
                        {
                            Name = new Name {First = "Person"},
                            Addresses = new[]
                                            {
                                                new Address {Name = "Address"}
                                            }
                        };

            _to = new PersonEntity
                      {
                          Name = new NameEntity {First = "Overwite"},
                          Addresses = new[]
                                          {
                                              new AddressEntity {Name = "Overwite"},
                                              new AddressEntity {Name = "Overwite"}
                                          }
                      };

            _mapperContext.Map(_from, () => _to);
        }
Example #34
0
 public static void Map(
     ClientModel model,
     IMapperContext context)
 {
     foreach (OperationModel modelOperation in model.Operations)
     {
         var resultTypeName = ResultRootTypeNameFromTypeName(modelOperation.ResultType.Name);
         context.Register(
             modelOperation.Name,
             new ResultBuilderDescriptor(
                 modelOperation.Name,
                 context.Types.Single(t => t.Name.Equals(resultTypeName)),
                 modelOperation.LeafTypes.Select(
                     leafType => new ValueParserDescriptor(
                         leafType.SerializationType,
                         leafType.RuntimeType,
                         leafType.Name)).ToList()));
     }
 }
Example #35
0
        public SampleRepository(int numberOfObjects)
        {
            //Make the mock objects and fill them with data.
            baseModelA = new BaseModelA();

            List<BaseModelC> baseModelCList = new List<BaseModelC>();

            for (int count = 0; count < numberOfObjects; count++)
            {
                BaseModelC baseModelC = new BaseModelC();
                baseModelC.ModelCProprtyA = Guid.NewGuid().ToString();
                baseModelC.ModelA = baseModelA;

                baseModelC.ModelB = new BaseModelB();
                baseModelC.ModelB.ModelBPropertyA = "PropertyAValue";
                baseModelC.ModelB.ModelC = baseModelC;

                baseModelCList.Add(baseModelC);
            }

            var list = baseModelCList.ToList();

            //Assign the data to different types of lists for testing purposes.
            baseModelA.ModelCArray = baseModelCList.ToArray();
            baseModelA.ModelCList = list;
            baseModelA.ModelCIEnumerable = baseModelCList.AsEnumerable();
            baseModelA.ModelCCollection = list;
            baseModelA.ModelCIList = list;

            //Now define the mapping rules
            mapper = new MapperFactory().GetContext();

            mapper.AddMap<BaseModelA, RepositoryModelA>();
            mapper.AddMap<BaseModelB, RepositoryModelB>();
            mapper.AddMap<BaseModelC, RepositoryModelC>();

            //Define the conversion hierarchy
            mapper.AddHierarchy<BaseModelA>().Include<BaseModelC>();
            mapper.AddHierarchy<BaseModelC>().Include<BaseModelA>();
            mapper.AddHierarchy<BaseModelC>().Include<BaseModelB>();
            mapper.AddHierarchy<BaseModelB>().Include<BaseModelC>();
        }
        private static void CollectInputTypes(
            ClientModel model,
            IMapperContext context,
            Dictionary <NameString, InputTypeDescriptorModel> typeDescriptors)
        {
            foreach (var inputType in model.InputObjectTypes)
            {
                if (!typeDescriptors.TryGetValue(
                        inputType.Name,
                        out InputTypeDescriptorModel descriptorModel))
                {
                    descriptorModel = new InputTypeDescriptorModel(
                        inputType,
                        new InputObjectTypeDescriptor(
                            inputType.Type.Name,
                            new (inputType.Name, context.Namespace)));

                    typeDescriptors.Add(inputType.Name, descriptorModel);
                }
            }
        }
        public static void Map(ClientModel model, IMapperContext context)
        {
            var entities = new List <EntityIdDescriptor>();

            foreach (var entity in model.Entities)
            {
                var fields = new List <EntityIdDescriptor>();

                foreach (var field in entity.Fields)
                {
                    fields.Add(new EntityIdDescriptor(
                                   field.Name,
                                   ((ILeafType)field.Type.NamedType()).GetSerializationType()));
                }

                entities.Add(new EntityIdDescriptor(entity.Name, entity.Name, fields));
            }

            context.Register(
                new EntityIdFactoryDescriptor("EntityIdFactory", entities, context.Namespace));
        }
Example #38
0
        public static IEnumerable <EntityTypeDescriptor> CollectEntityTypes(
            ClientModel model,
            IMapperContext context)
        {
            {
                var entityTypes = new Dictionary <NameString, HashSet <NameString> >();

                foreach (OperationModel operation in model.Operations)
                {
                    foreach (var outputType in operation.OutputTypes.Where(t => !t.IsInterface))
                    {
                        INamedType namedType = outputType.Type.NamedType();
                        if (outputType.Type.NamedType().IsEntity())
                        {
                            if (!entityTypes.TryGetValue(
                                    namedType.Name,
                                    out HashSet <NameString>?components))
                            {
                                components = new HashSet <NameString>();
                                entityTypes.Add(namedType.Name, components);
                            }

                            components.Add(outputType.Name);
                        }
                    }
                }

                foreach (KeyValuePair <NameString, HashSet <NameString> > entityType in entityTypes)
                {
                    yield return(new EntityTypeDescriptor(
                                     entityType.Key,
                                     context.Namespace,
                                     entityType.Value
                                     .Select(name => context.Types.Single(t => t.Name.Equals(name)))
                                     .ToList()));
                }
            }
        }
Example #39
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MapperFactory"/> class.
 /// </summary>
 public MapperFactory()
 {
     _mapperContext = new MapperContext();
 }
Example #40
0
 protected override void Establish_context()
 {
     _context = new MapperContext();
     _context.Configuration.ClearPrefixes();
     _context.CreateMap<Source, Destination>();
 }
Example #41
0
 public MappingEngine(IMapperContext mapperContext)
     : this(mapperContext,
         DictionaryFactory.CreateDictionary<TypePair, IObjectMapper>(),
         mapperContext.ConfigurationProvider.ServiceCtor)
 {
 }
Example #42
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MapperFactory"/> class.
 /// </summary>
 /// <param name="context">The context.</param>
 public MapperFactory(IMapperContext context)
 {
     _mapperContext = context;
 }
 protected override void Establish_context()
 {
     _context = new MapperContext();
     var parentMapping = _context.CreateMap<Source, Target>();
     parentMapping.ForMember(dest => dest.Value, opt => opt.MapFrom(s => (TargetEnumValue) s.Value));
 }