private static Layout AddLayout(PagesApiContext pagesApi)
        {
            var layouts = pagesApi.GetLayouts(new GetLayoutsRequest(l => l.LayoutPath == Template.LayoutPath));
            if (layouts.Items.Count > 0)
            {
                return layouts.Items[0];
            }

            var request = new CreateLayoutRequest()
            {
                Name = Template.Name,
                LayoutPath = Template.LayoutPath,
                Regions = new[] { Template.Regions.Main, Template.Regions.Header, Template.Regions.Footer }
            };
            return pagesApi.CreateLayout(request);
        }
        /// <summary>
        /// Creates the layout.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>
        /// Created layout entity
        /// </returns>
        public Layout CreateLayout(CreateLayoutRequest request)
        {
            ValidateRequest(request);

            try
            {
                UnitOfWork.BeginTransaction();

                var layout = new Layout
                {
                    LayoutPath = request.LayoutPath,
                    Name = request.Name,
                    PreviewUrl = request.PreviewUrl
                };

                // reference or create new regions by identifiers
                if (request.Regions != null)
                {
                    layout.LayoutRegions = new List<LayoutRegion>();
                    foreach (var regionIdentifier in request.Regions)
                    {
                        if (string.IsNullOrWhiteSpace(regionIdentifier))
                        {
                            continue;
                        }

                        var region = LoadOrCreateRegion(regionIdentifier);

                        var layoutRegion = new LayoutRegion
                        {
                            Layout = layout,
                            Region = region
                        };
                        layout.LayoutRegions.Add(layoutRegion);
                    }
                }

                Repository.Save(layout);
                UnitOfWork.Commit();

                return layout;
            }
            catch (Exception inner)
            {
                var message = string.Format("Failed to create layout. Path: {0}, Name: {1}, Url: {2}", request.LayoutPath, request.Name, request.PreviewUrl);
                Logger.Error(message, inner);
                throw new CmsApiException(message, inner);
            }
        }