public async Task <AFElementTemplateSlim> GetElementTemplateSlimAsync(AFElementTemplateDTO elementTemplateDTO, AFElementDTO elementDTO)
        {
            List <AFAttributeTemplateDTO> attributeTemplates = await GetAllAttributeTemplateDTOsAsync(elementTemplateDTO);

            List <AFAttributeDTO> attributeInstances = await GetAllAttributeDTOsAsync(elementDTO);

            return(elementTemplateDTO.ToSlim(attributeTemplates, attributeInstances));
        }
        private async Task <List <AFAttributeTemplateDTO> > GetTopLevelAttributeTemplateDTOsAsync(AFElementTemplateDTO elementTemplateDTO)
        {
            List <AFAttributeTemplateDTO> allTopLevelAttributes = new List <AFAttributeTemplateDTO>();

            string requestUri = string.Format("elementtemplates/{0}/attributetemplates", elementTemplateDTO.WebId);
            List <AFAttributeTemplateDTO> topLevelAttributes = await GetObjectAsync <ItemCollectionDTO <AFAttributeTemplateDTO> >(requestUri);

            //Recurse to read attributes from the chain of base templates
            if (elementTemplateDTO.HasBaseTemplate)
            {
                AFElementTemplateDTO baseTemplateDTO = await GetObjectAsync <AFElementTemplateDTO>(elementTemplateDTO.BaseTemplateUri);

                List <AFAttributeTemplateDTO> baseAttributes = await GetTopLevelAttributeTemplateDTOsAsync(baseTemplateDTO);

                topLevelAttributes.AddRange(baseAttributes);
            }

            return(topLevelAttributes);
        }
Example #3
0
        /// <summary>
        /// Slims an AF SDK AFElementTemplate
        /// </summary>
        /// <param name="elementTemplate">The template to be slimmed</param>
        /// <param name="attributeTemplates">The template's attributes</param>
        /// <param name="attributeInstances">Optional attribute instances to provide data reference information if not set on the template</param>
        /// <returns></returns>
        public static AFElementTemplateSlim ToSlim(this AFElementTemplateDTO elementTemplate, IEnumerable <AFAttributeTemplateDTO> attributeTemplates, IEnumerable <AFAttributeDTO> attributeInstances = null)
        {
            //Populate element template
            AFElementTemplateSlim slim = new AFElementTemplateSlim()
            {
                Id               = elementTemplate.Id,
                Name             = elementTemplate.Name,
                Description      = elementTemplate.Description,
                InstanceTypeName = elementTemplate.InstanceType,
                Path             = elementTemplate.Path
            };

            //Populate attribute templates
            var attributeInstancesByFullName = attributeInstances.ToDictionary(a => a.GetPathRelativeToElement());
            var attributeTemplatesByFullName = attributeTemplates.ToDictionary(a => a.GetPathRelativeToElement());

            slim.AllAttributes = attributeTemplatesByFullName.Select(kvp => kvp.Value.ToSlim(attributeInstancesByFullName[kvp.Key])).ToList();

            return(slim);
        }
        private async Task <List <AFAttributeTemplateDTO> > GetAllAttributeTemplateDTOsAsync(AFElementTemplateDTO elementTemplateDTO)
        {
            List <AFAttributeTemplateDTO> topLevelAttributes = await GetTopLevelAttributeTemplateDTOsAsync(elementTemplateDTO).ConfigureAwait(false);

            List <Task <List <AFAttributeTemplateDTO> > > attributeQueryTasks = new List <Task <List <AFAttributeTemplateDTO> > >();

            foreach (AFAttributeTemplateDTO topLevelAttribute in topLevelAttributes)
            {
                Task <List <AFAttributeTemplateDTO> > attributeQueryTask = GetAllAttributeTemplateDTOs(topLevelAttribute);
                attributeQueryTasks.Add(attributeQueryTask);
            }
            IEnumerable <List <AFAttributeTemplateDTO> > attributeQueryTaskResults = await Task.WhenAll <List <AFAttributeTemplateDTO> >(attributeQueryTasks).ConfigureAwait(false);

            return(attributeQueryTaskResults.SelectMany(aq => aq).ToList());
        }
        public async Task <AFElementTemplateSlim> GetElementTemplateSlimAsync(string templateAbsolutePath, AFElementDTO elementDTO)
        {
            AFElementTemplateDTO elementTemplateDTO = await GetElementTemplateDTOAsync(templateAbsolutePath);

            return(await GetElementTemplateSlimAsync(elementTemplateDTO, elementDTO).ConfigureAwait(false));
        }