private LayoutModel GetLayoutModel(string appName)
        {
            AppConf     conf = BamConf.AppConfigs.FirstOrDefault(c => c.Name.Equals(appName));
            LayoutConf  defaultLayoutConf = new LayoutConf(conf);
            LayoutModel layoutModel       = defaultLayoutConf.CreateLayoutModel();

            return(layoutModel);
        }
        protected internal LayoutModel GetLayoutModelForPath(string path)
        {
            if (path.Equals("/"))
            {
                path = "/{0}"._Format(AppConf.DefaultPage.Or(AppConf.DefaultLayoutConst));
            }

            string absolutePath;
            string lowered = path.ToLowerInvariant();

            string[] layoutSegments = string.Format("~/pages/{0}{1}", path, LayoutFileExtension).DelimitSplit("/", "\\");
            string[] htmlSegments   = string.Format("~/pages/{0}.html", path).DelimitSplit("/", "\\");

            LayoutModel result = null;

            if (LayoutModelsByPath.ContainsKey(lowered))
            {
                result = LayoutModelsByPath[lowered];
            }
            else if (AppRoot.FileExists(out absolutePath, layoutSegments))
            {
                LayoutConf layoutConf     = new LayoutConf(AppConf);
                LayoutConf fromLayoutFile = FileCachesByExtension[LayoutFileExtension].GetText(new FileInfo(absolutePath)).FromJson <LayoutConf>();
                layoutConf.CopyProperties(fromLayoutFile);
                result = layoutConf.CreateLayoutModel(htmlSegments);
                LayoutModelsByPath[lowered] = result;
            }
            else
            {
                LayoutConf defaultLayoutConf = new LayoutConf(AppConf);
                result = defaultLayoutConf.CreateLayoutModel(htmlSegments);
                FileInfo file = new FileInfo(AppRoot.GetAbsolutePath(layoutSegments));
                if (!file.Directory.Exists)
                {
                    file.Directory.Create();
                }
                // write the file to disk
                defaultLayoutConf.ToJsonFile(file);
                LayoutModelsByPath[lowered] = result;
            }

            if (string.IsNullOrEmpty(Path.GetExtension(path)))
            {
                string page = path.TruncateFront(1);
                if (!string.IsNullOrEmpty(page))
                {
                    result.StartPage = page;
                }
            }
            return(result);
        }
        private void RenderResult(string appName, string path, ExecutionRequest execRequest)
        {
            string ext = Path.GetExtension(path).ToLowerInvariant();

            if (string.IsNullOrEmpty(ext))
            {
                AppConf appConf = this.BamConf[appName];
                if (appConf != null)
                {
                    LayoutConf pageConf = new LayoutConf(appConf);
                    string     fileName = Path.GetFileName(path);
                    string     json     = pageConf.ToJson(true);
                    appConf.AppRoot.WriteFile("~/pages/{0}.layout"._Format(fileName), json);
                }
            }

            RendererFactory.Respond(execRequest, ContentResponder);
        }