public Page.Elements.PageComposition CreatePageComposition(CmsPage cmsPage)
        {
            var pageBuilder = new PageComposerTools(_cmsPageContentActivator);

            var page = new Page.Elements.PageComposition();

            page.RootElement = new UndefinedLayoutPageCompositionElement();
            if (cmsPage.LayoutId != Guid.Empty)
            {
                var layoutRepository = new LayoutRepository();
                var layoutToApply    = layoutRepository.GetById(cmsPage.LayoutId);

                pageBuilder.AddLayoutContent(page, GetLayoutStructure(layoutToApply));
            }

            var pageSpecificContent = cmsPage.PageContent;

            var d = page.GetPartialPageRenderingByLayoutBuilderId();

            foreach (var contentItem in pageSpecificContent)
            {
                var placementLayoutBuilderId = contentItem.PlacementLayoutBuilderId ?? SpecialRenderingFragmentContentIds.PageRoot;
                var root = d[placementLayoutBuilderId];

                var presentationElement = contentItem.ToPresentationElement();
                pageBuilder.AddAdHocContent(presentationElement, root);
            }

            return(page);
        }
        public static PageLayout GetLayoutStructure(Layout layout)
        {
            var layoutRepo = new LayoutRepository();

            PageLayout ln = null;

            if (layout.ParentLayoutId != null)
            {
                var parentLayout = layoutRepo.GetById(layout.ParentLayoutId.Value);
                ln = GetLayoutStructure(parentLayout);
            }

            return(new PageLayout
            {
                AllContent = layout.PageContent.Select(x => PresentationElementHelpers.ToPresentationElement(x)).ToList(),
                MasterPagePath = layout.MasterPagePath,
                Name = layout.Name,
                ParentLayout = ln
            });
        }