コード例 #1
0
        private void BtnGenerate_Click(object sender, EventArgs e)
        {
            var proces = new Process
            {
                StartInfo =
                {
                    FileName  = "TextTransform.exe",
                    Arguments = "TextTemplate1.tt"
                }
            };

            proces.Start();
            proces.WaitForExit();

            string      AppName = string.Empty;
            XmlDocument xml     = new XmlDocument();

            xml.Load(grammer);
            XmlNode AppNameNode = xml.SelectSingleNode(@"gramer/app_name");

            AppName = AppNameNode.InnerText; //Naziv aplikacije

            #region Update csproj fajla
            string csprojPath   = filename + @"\" + AppName + ".csproj";
            string csprojEdited = File.ReadAllText(csprojPath);

            //Dodavanje MasterPage.Master strane u .csproj
            int positionToIncludeMasterPage = csprojEdited.IndexOf(@"<None Include=""Web.Debug.config""");
            if (csprojEdited.Contains(@"<Content Include=""" + "MasterPage.Master" + "\"") == false) //Proveri da li vec postoji MasterPage.Master u .csproj
            {
                csprojEdited = csprojEdited.Insert(positionToIncludeMasterPage, @"<Content Include=""" + "MasterPage.Master" + "\"" + " />" + Environment.NewLine + "\t");
                File.WriteAllText(csprojPath, csprojEdited);
            }

            //Dodavanje MasterPage.Master.designer.cs klase u .csproj
            int positionToIncludeMasterPageDesigner = csprojEdited.IndexOf(@"<Compile Include=""Properties\AssemblyInfo.cs""");
            if (csprojEdited.Contains(@"<Compile Include=""" + "MasterPage.Master.designer.cs" + "\"") == false) //Proveri da li vec postoji MasterPage.Master.designer.cs u .csproj
            {
                csprojEdited = csprojEdited.Insert(positionToIncludeMasterPageDesigner, @"<Compile Include=""" + "MasterPage.Master.designer.cs" + "\"" + @">
      <DependentUpon>MasterPage.Master</DependentUpon>
    </Compile> " + Environment.NewLine + "\t");
                File.WriteAllText(csprojPath, csprojEdited);
            }

            //Dodavanje MasterPage.Master.cs klase u .csproj
            int positionToIncludeMasterPageCs = csprojEdited.IndexOf(@"<Compile Include=""Properties\AssemblyInfo.cs""");
            if (csprojEdited.Contains(@"<Compile Include=""" + "MasterPage.Master.cs" + "\"") == false) //Proveri da li vec postoji MasterPage.Master.cs u .csproj
            {
                csprojEdited = csprojEdited.Insert(positionToIncludeMasterPageCs, @"<Compile Include=""" + "MasterPage.Master.cs" + "\"" + @">
      <DependentUpon>MasterPage.Master</DependentUpon>
      <SubType>ASPXCodeBehind</SubType>
    </Compile> " + Environment.NewLine + "\t");
                File.WriteAllText(csprojPath, csprojEdited);
            }
            #endregion

            List <string> pageList = new List <string>();

            foreach (XmlNode node in xml.GetElementsByTagName("pageName"))
            {
                pageList.Add(node.InnerText); //Nazivi stranica pokupljen iz gramatike
            }
            string  myAppName       = string.Empty;
            string  bannerImagePath = string.Empty;
            string  indexPage       = string.Empty;
            XmlNode myAppNameNode   = xml.SelectSingleNode(@"gramer/app_name");
            myAppName = myAppNameNode.InnerText; //Naziv aplikacije
            XmlNode bannerImagePathNode = xml.SelectSingleNode(@"gramer/banner_image");
            bannerImagePath = bannerImagePathNode.InnerText;

            foreach (XmlNode xmlNodeIndexPage in xml.GetElementsByTagName("pageName"))
            {
                if (xmlNodeIndexPage.Attributes["index"] != null && xmlNodeIndexPage.Attributes["index"].Value == "true")
                {
                    indexPage = xmlNodeIndexPage.InnerText;
                }
            }

            #region Generisanje MasterPage.Master strane
            string pathMaster = filename + @"\MasterPage.Master";

            StringBuilder sb           = new StringBuilder($@"<%@ Master Language=""C#"" AutoEventWireup=""true"" CodeBehind=""MasterPage.master.cs"" Inherits=""{myAppName}.Site1"" %>
<!DOCTYPE html>" + Environment.NewLine);
            StringWriter  stringWriter = new StringWriter(sb);

            using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
            {
                writer.RenderBeginTag(HtmlTextWriterTag.Html);

                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag(HtmlTextWriterTag.Head);

                writer.RenderBeginTag(HtmlTextWriterTag.Title);
                writer.Write(myAppName);
                writer.RenderEndTag(); //End title tag
                writer.WriteLine();

                writer.WriteBeginTag("link");
                writer.WriteAttribute("rel", "stylesheet");
                writer.WriteAttribute("href", "Styles/StyleSheet.css");
                writer.WriteAttribute("type", "text/css");
                writer.Write(HtmlTextWriter.SelfClosingTagEnd); //End link tag
                writer.WriteLine();

                writer.AddAttribute("ID", "head");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:ContentPlaceHolder");
                writer.RenderEndTag(); //End asp:ContentPlaceHolder tag
                writer.WriteLine();

                writer.RenderEndTag(); //End head tag
                writer.WriteLine();

                writer.RenderBeginTag(HtmlTextWriterTag.Body);

                writer.AddAttribute("id", "form1");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag(HtmlTextWriterTag.Form);

                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                writer.AddAttribute(HtmlTextWriterAttribute.Id, "wrapper");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                writer.AddAttribute(HtmlTextWriterAttribute.Id, "banner");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                writer.AddAttribute("ID", "Image1");
                writer.AddAttribute("runat", "server");
                writer.AddAttribute("ImageUrl", bannerImagePath);
                writer.AddAttribute("Width", "100%");
                writer.RenderBeginTag("asp:Image");
                writer.RenderEndTag(); //End asp:Image tag
                writer.WriteLine();

                writer.RenderEndTag(); //End banner div tag
                writer.WriteLine();

                writer.AddAttribute("id", "navigation");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);

                writer.AddAttribute("id", "nav");
                writer.RenderBeginTag(HtmlTextWriterTag.Ul);

                for (int i = 0; i < pageList.Count; i++)
                {
                    if (pageList[i] == indexPage)
                    {
                        writer.RenderBeginTag(HtmlTextWriterTag.Li);
                        writer.AddAttribute("ID", "HyperLink" + i.ToString());
                        writer.AddAttribute("NavigateUrl", "~/Index.aspx");
                        writer.AddAttribute("runat", "server");
                        writer.RenderBeginTag("asp:HyperLink");
                        writer.Write(pageList[i]);
                        writer.RenderEndTag(); //End asp:HyperLink tag
                        writer.WriteLine();
                        writer.RenderEndTag(); //End li tag
                        writer.WriteLine();
                    }
                    else
                    {
                        writer.RenderBeginTag(HtmlTextWriterTag.Li);
                        writer.AddAttribute("ID", "HyperLink" + i.ToString());
                        writer.AddAttribute("NavigateUrl", $"~/Pages/{pageList[i].Replace(" ", string.Empty)}.aspx");
                        writer.AddAttribute("runat", "server");
                        writer.RenderBeginTag("asp:HyperLink");
                        writer.Write(pageList[i]);
                        writer.RenderEndTag(); //End asp:HyperLink tag
                        writer.WriteLine();
                        writer.RenderEndTag(); //End li tag
                        writer.WriteLine();
                    }
                }
                writer.WriteLine("<% if (litStatus.Text == \"admin\") %>");
                writer.WriteLine("<% { %>");
                writer.RenderBeginTag(HtmlTextWriterTag.Li);
                writer.AddAttribute("ID", "lnkAdmin");
                writer.AddAttribute("NavigateUrl", $"~/Pages/Admin.aspx");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:HyperLink");
                writer.Write("Admin");
                writer.RenderEndTag(); //End asp:HyperLink tag
                writer.WriteLine();
                writer.RenderEndTag(); //End li tag
                writer.WriteLine();
                writer.WriteLine("<% } %>");

                writer.AddAttribute(HtmlTextWriterAttribute.Style, "float:right");
                writer.RenderBeginTag(HtmlTextWriterTag.Li);

                writer.AddAttribute("ID", "lnkRegister");
                writer.AddAttribute("NavigateUrl", "~/Pages/Account/Register.aspx");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:HyperLink");
                writer.Write("Register");
                writer.RenderEndTag(); //End asp:HyperLink tag
                writer.WriteLine();

                writer.AddAttribute("ID", "litStatus");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:HyperLink");
                writer.Write("LogIn");
                writer.RenderEndTag(); //End asp:HyperLink tag
                writer.WriteLine();

                writer.RenderEndTag(); //End li tag
                writer.WriteLine();

                writer.AddAttribute(HtmlTextWriterAttribute.Style, "float:right");
                writer.RenderBeginTag(HtmlTextWriterTag.Li);

                writer.AddAttribute("ID", "lnkLogin");
                writer.AddAttribute("NavigateUrl", "~/Pages/Account/Login.aspx");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:HyperLink");
                writer.Write("LogIn");
                writer.RenderEndTag(); //End asp:HyperLink tag
                writer.WriteLine();

                writer.AddAttribute("ID", "lnkLogout");
                writer.AddAttribute("runat", "server");
                writer.AddAttribute("OnClick", "lnkLogout_Click");
                writer.RenderBeginTag("asp:LinkButton");
                writer.Write("LogOut");
                writer.RenderEndTag(); //End asp:LinkButton tag
                writer.WriteLine();

                writer.RenderEndTag(); //End li tag
                writer.WriteLine();

                writer.RenderEndTag(); //End Ul tag
                writer.WriteLine();

                writer.RenderEndTag(); //End navigation div tag
                writer.WriteLine();

                writer.AddAttribute(HtmlTextWriterAttribute.Id, "content");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                writer.AddAttribute("ID", "ContentPlaceHolder1");
                writer.AddAttribute("runat", "server");
                writer.RenderBeginTag("asp:ContentPlaceHolder");
                writer.RenderEndTag(); //End asp:ContentPlaceHolder tag
                writer.WriteLine();
                writer.RenderEndTag(); //End content div tag
                writer.WriteLine();

                writer.RenderEndTag(); //End wrapper div tag
                writer.WriteLine();

                writer.RenderEndTag(); //End div tag
                writer.WriteLine();

                writer.RenderEndTag(); //End form tag
                writer.WriteLine();

                writer.RenderEndTag(); //End body tag
                writer.WriteLine();

                writer.RenderEndTag(); // End html tag
            }

            string generatedMasterPageString = stringWriter.ToString();

//            string generatedMasterPageString = $@"<%@ Master Language=""C#"" AutoEventWireup=""true"" CodeBehind=""MasterPage.master.cs"" Inherits=""{myAppName}.Site1"" %>
//<!DOCTYPE html>

//<html>
//  <head runat=""server"">
//    <title>" + myAppName + @"</title>
//    <link rel=""stylesheet"" href=""Styles/StyleSheet.css"" type=""text/css""/>
//    <asp:ContentPlaceHolder ID = ""head"" runat = ""server"">
//    </asp:ContentPlaceHolder>
//  </head>
//    <body>
//        <form id = ""form1"" runat = ""server"">
//           <div>
//               <div id=""wrapper"">
//                   <div id = ""banner"">
//                       <asp:Image ID = ""Image1"" runat = ""server"" ImageUrl = """ + bannerImagePath + @""" Width = ""100%"" />
//                           </div>
//                               <div id = ""navigation"">
//                                   <ul id = ""nav"">" + Environment.NewLine + "\t\t\t\t\t\t\t\t\t\t";

//            for (int i = 0; i < pageList.Count; i++)
//            {
//                if (pageList[i] == indexPage)
//                    generatedMasterPageString = generatedMasterPageString + @"<li><asp:HyperLink ID=""HyperLink" + i.ToString() + "\"" + $@" NavigateUrl=""~ /Index.aspx"" runat=""server"">" + pageList[i] + "</asp:HyperLink></li>" + Environment.NewLine + "\t\t\t\t\t\t\t\t\t\t";
//                else
//                    generatedMasterPageString = generatedMasterPageString + @"<li><asp:HyperLink ID=""HyperLink" + i.ToString() + "\"" + $@" NavigateUrl=""~/Pages/{pageList[i].Replace(" ", string.Empty)}.aspx"" runat=""server"">" + pageList[i] + "</asp:HyperLink></li>" + Environment.NewLine + "\t\t\t\t\t\t\t\t\t\t";
//            }
//            generatedMasterPageString = generatedMasterPageString +
//                                      @"<li style=""float:right"">
//                                            <asp:HyperLink ID=""lnkRegister"" NavigateUrl=""~/Pages/Account/Register.aspx"" runat=""server"">Register</asp:HyperLink>
//                                            <asp:HyperLink ID=""litStatus"" runat=""server"">Login</asp:HyperLink>
//                                        </li>
//                                        <li style=""float:right"">
//                                            <asp:HyperLink ID=""lnkLogin"" NavigateUrl=""~/Pages/Account/Login.aspx"" runat=""server"">LogIn</asp:HyperLink>
//                                            <asp:LinkButton ID=""lnkLogout"" runat=""server"" OnClick=""lnkLogout_Click"">LogOut</asp:LinkButton>
//                                        </li>
//                                    </ul>
//                               </div>
//                           <div id = ""content"">
//                       <asp:ContentPlaceHolder ID = ""ContentPlaceHolder1"" runat = ""server"">
//                       </asp:ContentPlaceHolder>
//                    </div>
//                </div>
//             </div>
//        </form>
//    </body>
// </html>";

            if (File.Exists(pathMaster))
            {
                File.Delete(pathMaster);
                using (StreamWriter sw = File.CreateText(pathMaster))
                {
                    sw.Write(generatedMasterPageString);
                }
            }
            else
            {
                using (StreamWriter sw = File.CreateText(pathMaster))
                {
                    sw.Write(generatedMasterPageString);
                }
            }
            #endregion

            #region Generisanje MasterPage.Master.designer.cs klase
            string pathMasterDesinger = filename + @"\MasterPage.Master.designer.cs";

            string generatedMasterDesignerString = $@"namespace {myAppName} {{
    
    public partial class Site1 {{
        
        protected global::System.Web.UI.WebControls.ContentPlaceHolder head;
        protected global::System.Web.UI.HtmlControls.HtmlForm form1;
        protected global::System.Web.UI.WebControls.ContentPlaceHolder ContentPlaceHolder1;
        protected global::System.Web.UI.WebControls.HyperLink lnkRegister;
        protected global::System.Web.UI.WebControls.HyperLink litStatus;
        protected global::System.Web.UI.WebControls.HyperLink lnkLogin;
        protected global::System.Web.UI.WebControls.LinkButton lnkLogout;
    }}
}}
";

            if (File.Exists(pathMasterDesinger))
            {
                File.Delete(pathMasterDesinger);
                using (StreamWriter sw = File.CreateText(pathMasterDesinger))
                {
                    sw.Write(generatedMasterDesignerString);
                }
            }
            else
            {
                using (StreamWriter sw = File.CreateText(pathMasterDesinger))
                {
                    sw.Write(generatedMasterDesignerString);
                }
            }
            #endregion

            #region Generisanje MasterPage.Master.cs klase
            string pathMasterCs = filename + @"\MasterPage.Master.cs";

            string generatedMasterCsString = $@"using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace {myAppName}
{{
    public partial class Site1 : System.Web.UI.MasterPage
    {{
        protected void Page_Load(object sender, EventArgs e)
        {{
            var user = Context.User.Identity;
            if (user.IsAuthenticated)
            {{
                litStatus.Text = Context.User.Identity.Name;

                lnkLogin.Visible = false;
                lnkRegister.Visible = false;

                lnkLogout.Visible = true;
                litStatus.Visible = true;
            }}
            else
            {{
                lnkLogin.Visible = true;
                lnkRegister.Visible = true;

                lnkLogout.Visible = false;
                litStatus.Visible = false;
            }}
        }}
        protected void lnkLogout_Click(object sender, EventArgs e)
        {{
            var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
            authenticationManager.SignOut();

            Response.Redirect(""~/Index.aspx"");
        }}
    }}
}}";

            if (File.Exists(pathMasterCs))
            {
                File.Delete(pathMasterCs);
                using (StreamWriter sw = File.CreateText(pathMasterCs))
                {
                    sw.Write(generatedMasterCsString);
                }
            }
            else
            {
                using (StreamWriter sw = File.CreateText(pathMasterCs))
                {
                    sw.Write(generatedMasterCsString);
                }
            }
            #endregion

            #region Generisanje CSS-a
            string cssString = @"
body {
    color: #574c3f;
    font-family: Corbel, Arial, Helvetica, Verdana, sans-serif;
    font-size: 16px;
    background-color: lavender;
}

#wrapper {
    width: 1100px;
    margin: auto;
    padding-bottom: 20px;
    background-color: white;
}

#navigation {
    height: 45px;
    background: linear-gradient(to top, #c2bcb5, #ffffff);
}

#nav {
    display: block;
    list-style: none;
    text-align: center;
}

    #nav ul {
        display: none;
        list-style: none;
    }

    #nav li {
        float: left;
        display: block;
        margin-top: 15px;
        text-transform: uppercase;
        padding: 0px 20px 0px 20px;
        border-left: 1px solid #FFFFFF;
    }

    #nav a:link, #nav a :visited, #nav a:active {
        display: block;
        color: #574c3f;
        text-decoration: none;
    }

    #nav a:hover {
        background-color: white;
    }

a:visited {
    display: block;
    color: #574c3f;
    text-decoration: none;
}

#content {
    padding: 20px;
    min-height: 400px;
}

/*Generic Controls*/
.button {
    background: linear-gradient(to bottom, darkgreen, green);
    padding: 10px;
    margin: 10px;
    color: white;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    border: 0;
    clear: both;
    width: 150px;
}

/*Webshop */
#ContentPlaceHolder1_pnlProduct div {
    float: left;
    width: 250px;
    height: 250px;
    text-align: center;
}

.productName {
    font-weight: bold;
    font-size: 18px;
}

.productPrice {
    font-family: arial,helvetica,sans-serif;
    color: #FFB600;
}

.productImage {
    width: 150px;
    height: 150px;
    vertical-align: central;
    padding: 10px;
    -moz-border-radius: 50px;
    -webkit-border-radius: 50px;
    border-radius: 50px;
}

/*Detail page*/
.detailsImage {
    height: 465px;
    width: 400px;
    margin-right: 30px;
}

.detailsDescription {
    font-style: italic;
    width: 300px;
}

.detailsPrice {
    font-weight: bold;
    font-size: 24px;
    width: 200px;
}

.inputs {
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    background-color: #EAEAEA;
    background: -moz-linear-gradient(top, #FFF, #EAEAEA);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0.0, #FFF), color-stop(1.0, #EAEAEA));
    border: 1px solid #CACACA;
    color: #444;
    margin: 0 0 25px;
    padding: 5px 9px;
    width: 260px;
}

    .inputs:focus {
        background: #FFF;
        -webkit-box-shadow: 0 0 25px #CCC;
        -moz-box-shadow: 0 0 25px #ccc;
        box-shadow: 0 0 25px #CCC;
    }

/*Shopping Cart Page */
.CartTable {
    text-align: center;
    border: 15px solid #f5f4f2;
    margin-bottom: 10px;
    width: 100%;
    padding: 10px;
}

    .CartTable input {
        width: 65px;
        height: 65px;
    }

    .CartTable h4 {
        padding: 0;
        margin: 0;
    }

    .CartTable tr td select {
        width: 100px;
    }

";

            string styleDirPath = filename + @"\Styles";
            string cssPath      = filename + @"\Styles\StyleSheet.css";

            //Kreiranje foldera Styles za smestanje css fajla
            if (!Directory.Exists(styleDirPath))
            {
                Directory.CreateDirectory(styleDirPath);
            }

            if (File.Exists(cssPath))
            {
                File.Delete(cssPath);
                using (StreamWriter sw = File.CreateText(cssPath))
                {
                    sw.Write(cssString);
                }
            }
            else
            {
                using (StreamWriter sw = File.CreateText(cssPath))
                {
                    sw.Write(cssString);
                }
            }
            //Dodavanje css fajla u .csproj
            int positionToIncludeCSS = csprojEdited.IndexOf(@"<Content Include=""Web.config""");
            if (csprojEdited.Contains(@"<Content Include=""Styles\StyleSheet.css"" />") == false)                                                             //Proveri da li css postoji u .csproj
            {
                csprojEdited = csprojEdited.Insert(positionToIncludeCSS, @"<Content Include=""Styles\StyleSheet.css""" + " />" + Environment.NewLine + "\t"); //zakucan HelpCSS.css
                File.WriteAllText(csprojPath, csprojEdited);
            }
            #endregion


            string imagesDirPath = filename + @"\Images";
            if (!Directory.Exists(imagesDirPath))
            {
                Directory.CreateDirectory(imagesDirPath);
            }

            int positionToIncludeImages = csprojEdited.IndexOf(@"<Content Include=""Web.config""");
            if (csprojEdited.Contains(@"<Content Include=""Styles\StyleSheet.css"" />") == false)                                                                //Proveri da li css postoji u .csproj
            {
                csprojEdited = csprojEdited.Insert(positionToIncludeImages, @"<Content Include=""Styles\StyleSheet.css""" + " />" + Environment.NewLine + "\t"); //zakucan HelpCSS.css
                File.WriteAllText(csprojPath, csprojEdited);
            }

            string modelsDirPath = filename + @"\Models";
            if (!Directory.Exists(modelsDirPath))
            {
                Directory.CreateDirectory(modelsDirPath);
            }

            CRUDOperations.DbOperations(myAppName, xml, modelsDirPath, csprojPath);

            PageGenerator.GeneratePagesByModel(myAppName, xml, csprojPath, filename);

            PageGenerator.GenrateClassByModel(myAppName, xml, csprojPath, filename);

            PageGenerator.GenerateAdminPage(myAppName, xml, csprojPath, filename);

            PageGenerator.GenerateIndexPage(myAppName, xml, csprojPath, filename);

            PageGenerator.GeneratePageItem(myAppName, xml, csprojPath, filename);

            string acountDirPath = filename + @"\Pages\Account";
            if (!Directory.Exists(acountDirPath))
            {
                Directory.CreateDirectory(acountDirPath);
            }

            PageGenerator.GenerateRegisterPage(myAppName, xml, csprojPath, filename);

            PageGenerator.GenerateLogInPage(myAppName, xml, csprojPath, filename);

            PageGenerator.GenerateNavigationPages(myAppName, xml, csprojPath, filename);
        }