Exemplo n.º 1
0
        public virtual CompositionFetchResult GetCompositionData(ApplicationMetadata application, CompositionFetchRequest request, JObject currentData)
        {
            var applicationCompositionSchemas = CompositionBuilder.InitializeCompositionSchemas(application.Schema);
            var compostionsToUse = new Dictionary <string, ApplicationCompositionSchema>();

            if (request.CompositionList != null)
            {
                foreach (var compositionKey in request.CompositionList.Where(applicationCompositionSchemas.ContainsKey))
                {
                    //use only the passed compositions amongst the original list
                    compostionsToUse.Add(compositionKey, applicationCompositionSchemas[compositionKey]);
                }
            }
            else
            {
                //use them all
                compostionsToUse = (Dictionary <string, ApplicationCompositionSchema>)applicationCompositionSchemas;
            }

            var entityMetadata = MetadataProvider.SlicedEntityMetadata(application);

            Dictionary <string, EntityRepository.SearchEntityResult> result;

            if (request is PreFetchedCompositionFetchRequest)
            {
                //this might be a list or either a single entity, depending whether it´s coming from a list report or from the after save operation
                var listOfEntities = ((PreFetchedCompositionFetchRequest)request).PrefetchEntities;
                result = _collectionResolver.ResolveCollections(entityMetadata, compostionsToUse, listOfEntities);
                return(new CompositionFetchResult(result, listOfEntities.FirstOrDefault()));
            }
            var cruddata = EntityBuilder.BuildFromJson <Entity>(typeof(Entity), entityMetadata,
                                                                application, currentData, request.Id);

            result = _collectionResolver.ResolveCollections(entityMetadata, compostionsToUse, cruddata, request.PaginatedSearch);
            return(new CompositionFetchResult(result, cruddata));
        }