Exemplo n.º 1
0
        public void FormatEntity <TRecord>(IRecordCollectionGetter <TRecord> getter, Action <IPaperContext, TPaperInstance, TData, ICollection <TRecord>, TRecord, Entity> formatter)
        {
            this.statements.Add(ctx =>
            {
                if (ctx.OutgoingData.IsPayload)
                {
                    return;
                }

                var host    = (TPaperInstance)ctx.Cache[PaperInstanceKey];
                var data    = (TData)ctx.Cache[DataKey];
                var nodes   = getter.GetNodes(ctx);
                var records = getter.GetRecords(ctx);

                foreach (var node in nodes)
                {
                    if (node.Entity == null)
                    {
                        node.Entity = CreateDefaultEntity(node.Record);

                        var parent = node.Parent?.Entity ?? (Entity)ctx.Cache[EntityKey];
                        parent.Add(node.Entity);
                    }

                    formatter.Invoke(ctx, host, data, records, node.Record, node.Entity);
                }
            });
        }
Exemplo n.º 2
0
        public void CreateEntity <TRecord>(IRecordCollectionGetter <TRecord> getter, Func <IPaperContext, TPaperInstance, TData, ICollection <TRecord>, TRecord, Entity> entityFactory)
        {
            this.statements.Add(ctx =>
            {
                if (ctx.OutgoingData.IsPayload)
                {
                    return;
                }

                var host    = (TPaperInstance)ctx.Cache[PaperInstanceKey];
                var data    = (TData)ctx.Cache[DataKey];
                var nodes   = getter.GetNodes(ctx);
                var records = getter.GetRecords(ctx);

                if (!ctx.Cache.ContainsKey(EntityKey))
                {
                    ctx.Cache[EntityKey] = CreateDefaultEntity(@object: null);
                }

                foreach (var node in nodes)
                {
                    node.Entity = entityFactory.Invoke(ctx, host, data, records, node.Record);

                    var parent = node.Parent?.Entity ?? (Entity)ctx.Cache[EntityKey];
                    parent.Add(node.Entity);
                }
            });
        }