private static string GenerateViewModelText(string templateType, string templateName, string ClassName, string TableName, string CategoryName, string autogenWarningText) { //Splittum template-inu í flokka eftir --PROPERTIES-- taginu var splitTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate(templateType, templateName, ClassName, TableName, CategoryName, "")); //Náum í lista af properties fyrir töflunafnið var properties = DatabaseMockup.Get_propertyType_propertyName_List(TableName); //Byrjum á að smíða texta strenginn, setjum fyrst inn viðvörun um að file-inn sé auto generated string viewModelText = "//" + autogenWarningText + Environment.NewLine; //Setjum inn efri part splittaða template-sins viewModelText += splitTemplate.ElementAt(0).ToString(); foreach (var element in properties) { //Athugum hvort að porperty type sé selectable, við viljum aðeins generate-a ef við erum að eiga við selectable týpu if (DatabaseMockup.IsSelectable(CategoryName, element.Item2)) { viewModelText += TemplateParser.ParseTemplate(templateType, templateType + "selectable", ClassName + "List", TableName, CategoryName, element.Item2.Substring(0, element.Item2.Length - 2)); viewModelText += Environment.NewLine; } } //Setjum inn lokahluta template-sins viewModelText += splitTemplate.ElementAt(1); return(viewModelText); }
//Býr til texta fyrir heilan controller private static string GenerateControllerText(string CategoryName, string autogenWarningText) { //Splittum template-inu í flokka eftir --PROPERTIES-- taginu var splitTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate("Controller", "Controller", "", "", CategoryName, "")); //Byrjum á að smíða texta strenginn, setjum fyrst inn viðvörun um að file-inn sé auto generated string controllerText = "//" + autogenWarningText + Environment.NewLine; //Setjum inn efri hluta controller skilgreiningar controllerText += splitTemplate.ElementAt(0) + Environment.NewLine + Environment.NewLine + Environment.NewLine; //Náum í lista af öllum klösum(töflum) sem eiga heima innan CategoryName flokksins var classesInCategory = DatabaseMockup.Get_className_categoryName_InCategory(CategoryName); //Setjum inn allar controller functions for (int i = 0; i < DatabaseMockup.Get_className_categoryName_InCategory(CategoryName).Count; i++) { controllerText += GenerateControllerTextForSingleClass("Controller", "Controller", classesInCategory.ElementAt(i).Item1, classesInCategory.ElementAt(i).Item2, CategoryName); //Setjum inn newlines á milli klasa ef við erum ekki á síðasta klasanum if (i != DatabaseMockup.Get_className_categoryName_InCategory(CategoryName).Count - 1) { controllerText += Environment.NewLine + Environment.NewLine; } } //Setjum inn neðri hluta controller-sins, það ættu bara að vera tveir } controllerText += splitTemplate.ElementAt(1); return(controllerText); }
public static void GenerateViewModels(string path, string autogenWarningText) { //Eyðum möppu DeleteViewModels(path); //Búum möppu til upp á nýtt System.IO.Directory.CreateDirectory(path); foreach (var element in DatabaseMockup.Get_className_tableName_categoryName_List()) { //Náum í alla flags sem eru á tölfunni(ClassName) var flags = DatabaseMockup.GetFlagsForClassName(element.Item1); //Generate-um ClassNameViewModel file-ana, ef það er eitthvað view notað(Create, Edit eða Details) þá þurfum við ViewModel fyrir það if (!(flags.Contains("NoCreate") && flags.Contains("NoEdit") && flags.Contains("NoDetails"))) { GenerateViewModelFile(GenerateViewModelText("ViewModel", "ViewModel", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1, element.Item3, path); } //Generate-um ClassNameListViewModel file-ana if (!(flags.Contains("NoList"))) { GenerateViewModelFile(GenerateViewModelText("ViewModel", "ViewModelList", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1 + "List", element.Item3, path); } } }
public static void GenerateViews(string path, string autogenWarningText) { //Eyðum möppu DeleteViews(path); //Búum möppu til upp á nýtt System.IO.Directory.CreateDirectory(path); foreach (var element in DatabaseMockup.Get_className_tableName_categoryName_List()) { //Generate-um Create view if (!(DatabaseMockup.GetFlagsForClassName(element.Item1).Contains("NoCreate"))) { GenerateViewFile(GenerateViewText("CreateEdit", "CreateView", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1, "Create" + element.Item1, element.Item3, path); } //Generate-um Edit view if (!(DatabaseMockup.GetFlagsForClassName(element.Item1).Contains("NoEdit"))) { GenerateViewFile(GenerateViewText("CreateEdit", "EditView", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1, "Edit" + element.Item1, element.Item3, path); } //Generate-um Details view if (!(DatabaseMockup.GetFlagsForClassName(element.Item1).Contains("NoDetails"))) { GenerateViewFile(GenerateViewText("Details", "DetailsView", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1, "Details" + element.Item1, element.Item3, path); } //Generate-um List view if (!(DatabaseMockup.GetFlagsForClassName(element.Item1).Contains("NoList"))) { GenerateViewFile(GenerateViewText("List", "ListView", element.Item1, element.Item2, element.Item3, autogenWarningText), element.Item1, element.Item2, element.Item3, path); } } }
//Býr til texta fyrir allar functions sem einn klasi þarf innan controllers private static string GenerateControllerTextForSingleClass(string templateType, string templateName, string ClassName, string TableName, string CategoryName) { //Náum í alla flags sem eru á tölfunni(ClassName) var flags = DatabaseMockup.GetFlagsForClassName(ClassName); //Byrjum á að smíða loka template strenginn, string controllerString = ""; //Setjum inn smá comment á milli tafla(klasa) til að það verði skýrara að skoða controller-inn. controllerString += "\t\t/*\r\n"; controllerString += "\t\t\t" + ClassName + " functions\r\n"; controllerString += "\t\t*/\r\n"; //Setjum inn List functions if (!(flags.Contains("NoList"))) { controllerString += GetPropertiesTextForControllerFunctionString(templateType, templateName + "List", ClassName, TableName, CategoryName); } //Setjum inn Create functions if (!(flags.Contains("NoCreate"))) { controllerString += GetPropertiesTextForControllerFunctionString(templateType, templateName + "Create", ClassName, TableName, CategoryName); } //Setjum inn Edit functions if (!(flags.Contains("NoEdit"))) { controllerString += GetPropertiesTextForControllerFunctionString(templateType, templateName + "Edit", ClassName, TableName, CategoryName); } //Setjum inn Details function if (!(flags.Contains("NoDetails"))) { controllerString += GetPropertiesTextForControllerFunctionString(templateType, templateName + "Details", ClassName, TableName, CategoryName); } //Setjum inn Delete function if (!(flags.Contains("NoDelete"))) { controllerString += TemplateParser.ParseTemplate(templateType, templateName + "Delete", ClassName, TableName, CategoryName, "") + Environment.NewLine + Environment.NewLine; } //Ef að engin functions fyrir þessa töflu áttu að fara í controller-inn, þá setjum við inn eitt línubil til að jafna útlitið á generated controller-num if (flags.Contains("NoList") && flags.Contains("NoCreate") && flags.Contains("NoEdit") && flags.Contains("NoDetails") && flags.Contains("NoDelete")) { controllerString += Environment.NewLine; } return(controllerString); }
public static void GenerateControllers(string path, string autogenWarningText) { //Eyðum möppu DeleteControllers(path); //Búum möppu til upp á nýtt System.IO.Directory.CreateDirectory(path); foreach (var category in DatabaseMockup.GetCategories()) { //Generate-um einn controller fyrir hvern category sem finnst GenerateControllerFile(GenerateControllerText(category, autogenWarningText), category, path); } }
//Býr til streng sem að inniheldur textann fyrir --PROPERTIES-- innan controller function template-ana private static string GetPropertiesTextForControllerFunctionString(string templateType, string templateName, string ClassName, string TableName, string CategoryName) { string propertiesControllerString = ""; //Splittum template-inu í flokka eftir --PROPERTIES-- taginu var splitTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate(templateType, templateName, ClassName, TableName, CategoryName, "")); //Náum í lista af properties fyrir töflunafnið var properties = DatabaseMockup.Get_propertyType_propertyName_List(TableName); //Setjum inn efsta part splittaða template-sins propertiesControllerString += splitTemplate.ElementAt(0).ToString(); foreach (var element in properties) { //Athugum hvort að porperty type sé selectable, við viljum aðeins generate-a ef við erum að eiga selectable týpu if (DatabaseMockup.IsSelectable(CategoryName, element.Item2)) { propertiesControllerString += TemplateParser.ParseTemplate(templateType, templateType + "Selectable", ClassName, TableName, CategoryName, element.Item2.Substring(0, element.Item2.Length - 2)); propertiesControllerString += Environment.NewLine; } } //Við athugum hvort að eitthvað hafi komið inn í --PROPERTIES--, annaðhvort í foreach lykkjunni hér að ofan eða í Template-inu, ef að síðasta táknið í propertiesControllerString er { þá kom //ekkert inn(það er -3 vegna þess að síðustu táknin eru: '{' '\r' '\n') if (!(propertiesControllerString.ElementAt(propertiesControllerString.Length - 3) == '{')) { //Ef eitthvað kom inn þá þurfum við að taka út síðustu kommuna(sem ætti að vera alveg síðasta táknið í strengnun) propertiesControllerString = propertiesControllerString.Substring(0, propertiesControllerString.Length - 3) + Environment.NewLine; } //Setjum inn lokahluta template-sins propertiesControllerString += splitTemplate.ElementAt(1) + Environment.NewLine; return(propertiesControllerString); }
private static string GenerateViewText(string templateType, string templateName, string ClassName, string TableName, string CategoryName, string autogenWarningText) { //Splittum template-inu í flokka eftir --PROPERTIES-- taginu var splitTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate("Views/" + templateType, templateName, ClassName, TableName, CategoryName, "")); //Náum í lista af properties fyrir töflunafnið var properties = DatabaseMockup.Get_propertyType_propertyName_List(TableName); //Byrjum á að smíða texta strenginn, setjum fyrst inn viðvörun um að file-inn sé auto generated string viewText = "@* " + autogenWarningText + " *@" + Environment.NewLine; //Síðan setjum við efsta part splittaða template-sins inn viewText += splitTemplate.ElementAt(0).ToString(); //Útbúum færibreytu sem segir okkur til um hvort við séum að fara í gegnum for lykkjuna tvisvar sinnum, það þarf að gera það fyrir List view-in int k = 0; for (int i = 0; i < properties.Count; i++) { if (templateType == "CreateEdit") { //Special case fyrir selectable, það á að vera represent-að á sérstakan hátt, ekki sem int if (DatabaseMockup.IsSelectable(CategoryName, properties.ElementAt(i).Item2)) { //Trimmum Id af endanum á property ef við erum að eiga við selectable, Id er sett inn í template-inu fyrir selectable string propertyTrimmed = properties.ElementAt(i).Item2.Substring(0, properties.ElementAt(i).Item2.Length - 2); viewText += TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Selectable", ClassName, TableName, CategoryName, propertyTrimmed); } //Special case fyrir boolean else if (properties.ElementAt(i).Item1 == "bool") { viewText += TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Bool", ClassName, TableName, CategoryName, properties.ElementAt(i).Item2); } //Special case fyrir primary Id, sem er ekki höndlað eins og önnur editable int og er partur af Create og Edit views(sleppt í Create og hafður hidden í Edit) else if (properties.ElementAt(i).Item2 != "Id") { //Ef við erum ekki að deal-a við special case, eins og Id, þá getum við lesið template-ið fyrir property-ið beint úr CreateEdittype template-inu viewText += TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Type", ClassName, TableName, CategoryName, properties.ElementAt(i).Item2); } //Setjum inn newline á milli properties á meðan við erum ekki á primaryKey, þetta er til þess að losna við auka línubil sem myndast annars í Create og Edit fyrir Id-ið, það er ekki höndlað sem property hér heldur tilgreint í ViewTemplate-unum sjálfum if (properties.ElementAt(i).Item2 != "Id") { viewText += Environment.NewLine; } } else if (templateType == "Details") { viewText += TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Type", ClassName, TableName, CategoryName, properties.ElementAt(i).Item2); //Setjum inn newline á milli properties viewText += Environment.NewLine; } else if (templateType == "List") { var splitListPropertyTypeTemplate = new List <string>(); //Special case fyrir selectable, það á að vera represent-að á sérstakan hátt, ekki sem int if (DatabaseMockup.IsSelectable(CategoryName, properties.ElementAt(i).Item2)) { //Trimmum Id af endanum á property ef við erum að eiga við selectable, Id er sett inn í template-inu fyrir selectable string propertyTrimmed = properties.ElementAt(i).Item2.Substring(0, properties.ElementAt(i).Item2.Length - 2); //Splittum Template file-um fyrir ListView þar sem við erum bæði með fyrir ofan og neðan töflu í þeim splitListPropertyTypeTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Selectable", ClassName, TableName, CategoryName, propertyTrimmed)); } else { //Splittum Template file-um fyrir ListView þar sem við erum bæði með fyrir ofan og neðan töflu í þeim splitListPropertyTypeTemplate = TemplateParser.SplitTemplate(TemplateParser.ParseTemplate("Views/" + templateType, templateType + "Type", ClassName, TableName, CategoryName, properties.ElementAt(i).Item2)); } if (properties.ElementAt(i).Item2 == "Id") { } //Setjum annaðhvort efri eða neðri part property-sins inn, fer eftir því hvort við erum á first eða second pass í for lykkjunni viewText += splitListPropertyTypeTemplate.ElementAt(k).ToString(); } //Ef við erum að eiga við lista og erum komin á enda properties þá þurfum við að gera k að 1 og fara aftur í gegnum properties; það þarf að setja inn neðri helming list-view-sins if (templateType == "List" && i == properties.Count - 1 && k == 0) { i = -1; // k = 1; viewText += splitTemplate.ElementAt(1); //Bætum við miðju úr töflu } } //Setjum inn lokahluta template-sins, það er á mismunandi stað eftir því hvort verið er að eiga við lista eða Edit/Create views if (templateType == "List") { viewText += splitTemplate.ElementAt(2); } else { viewText += splitTemplate.ElementAt(1); } return(viewText); }