public async Task GenerateCode(CommandLineGeneratorModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } ControllerGeneratorBase generator = null; if (string.IsNullOrEmpty(model.ModelClass)) { if (model.GenerateReadWriteActions) { generator = GetGenerator <MvcControllerWithReadWriteActionGenerator>(); } else { generator = GetGenerator <MvcControllerEmpty>(); //This need to handle the WebAPI Empty as well... } } else { generator = GetGenerator <ControllerWithContextGenerator>(); } if (generator != null) { await generator.Generate(model); } }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { if (!string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { if (!controllerGeneratorModel.ControllerName.EndsWith(Constants.ControllerSuffix, StringComparison.Ordinal)) { controllerGeneratorModel.ControllerName = controllerGeneratorModel.ControllerName + Constants.ControllerSuffix; } } else { throw new ArgumentException(GetRequiredNameError); } var layoutDependencyInstaller = ActivatorUtilities.CreateInstance<MvcLayoutDependencyInstaller>(ServiceProvider); await layoutDependencyInstaller.Execute(); var templateModel = new ClassNameModel(className: controllerGeneratorModel.ControllerName, namespaceName: GetControllerNamespace()); var outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await layoutDependencyInstaller.InstallDependencies(); }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { if (!string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { if (!controllerGeneratorModel.ControllerName.EndsWith(Constants.ControllerSuffix, StringComparison.Ordinal)) { controllerGeneratorModel.ControllerName = controllerGeneratorModel.ControllerName + Constants.ControllerSuffix; } } else { throw new ArgumentException("Controller name is required for an Empty Controller"); } var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(ServiceProvider); await layoutDependencyInstaller.Execute(); var templateModel = new ClassNameModel(className: controllerGeneratorModel.ControllerName, namespaceName: GetControllerNamespace()); var templateName = "EmptyController.cshtml"; var outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, templateName, TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await layoutDependencyInstaller.InstallDependencies(); }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass)); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(controllerGeneratorModel); if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix; } var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = GetControllerNamespace(), ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata }; await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception("Scaffolding generated all the code but the new context created could be registered using dependency injection." + "There may be additional steps required for the generated code to work. Refer to <forward-link>"); } }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass)); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(controllerGeneratorModel); if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix; } var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = GetControllerNamespace(), ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata }; await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception(string.Format("{0} {1}" ,CodeGenerators.Mvc.MessageStrings.ScaffoldingSuccessful_unregistered, CodeGenerators.Mvc.MessageStrings.Scaffolding_additionalSteps)); } }
public async Task GenerateCode([NotNull] CommandLineGeneratorModel model) { ControllerGeneratorBase generator = null; if (string.IsNullOrEmpty(model.ModelClass)) { if (model.GenerateReadWriteActions) { //Controller with Actions } else { generator = GetGenerator <MvcControllerEmpty>(); //This need to handle the WebAPI Empty as well... } } else { generator = GetGenerator <ControllerWithContextGenerator>(); } if (generator != null) { await generator.Generate(model); } else { // Just throwing as I enable this functionality, should remove it once I fill all the above... throw new Exception("Functionality not yet enabled..."); } }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass)); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(controllerGeneratorModel); if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix; } var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = GetControllerNamespace(), ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata }; await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception("Scaffolding generated all the code but the new context created could be registered using dependency injection." + "There may be additional steps required for the generated code to work. Refer to <forward-link>"); } }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass)); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); var modelTypeAndContextModel = await ValidateModelAndGetMetadata(controllerGeneratorModel); if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix; } var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = string.Empty, //ToDo UseAsync = controllerGeneratorModel.UseAsync, ControllerNamespace = GetControllerNamespace(), ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata }; await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage("Added Controller : " + outputPath.Substring(ApplicationInfo.ApplicationBasePath.Length)); await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception(string.Format("{0} {1}", CodeGenerators.Mvc.MessageStrings.ScaffoldingSuccessful_unregistered, CodeGenerators.Mvc.MessageStrings.Scaffolding_additionalSteps)); } }
private async Task GenerateViewsIfRequired(CommandLineGeneratorModel controllerGeneratorModel, ModelTypeAndContextModel modelTypeAndContextModel, string controllerRootName) { if (!controllerGeneratorModel.IsRestController && !controllerGeneratorModel.NoViews) { var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(ServiceProvider); await layoutDependencyInstaller.Execute(); foreach (var viewTemplate in _views) { var viewName = viewTemplate == "List" ? "Index" : viewTemplate; // ToDo: This is duplicated from ViewGenerator. bool isLayoutSelected = controllerGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(controllerGeneratorModel.LayoutPage); var viewTemplateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeAndContextModel.ModelType.FullName, ViewDataTypeShortName = modelTypeAndContextModel.ModelType.Name, ViewName = viewName, LayoutPageFile = controllerGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = false, ReferenceScriptLibraries = controllerGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata, JQueryVersion = "1.10.2" }; // Todo: Need logic for areas var viewOutputPath = Path.Combine( ApplicationInfo.ApplicationBasePath, Constants.ViewsFolderName, controllerRootName, viewName + Constants.ViewExtension); await CodeGeneratorActionsService.AddFileFromTemplateAsync(viewOutputPath, viewTemplate + Constants.RazorTemplateExtension, TemplateFolders, viewTemplateModel); Logger.LogMessage("Added View : " + viewOutputPath.Substring(ApplicationInfo.ApplicationBasePath.Length)); } await layoutDependencyInstaller.InstallDependencies(); } }
private async Task GenerateViewsIfRequired(CommandLineGeneratorModel controllerGeneratorModel, ModelTypeAndContextModel modelTypeAndContextModel, string controllerRootName) { if (!controllerGeneratorModel.IsRestController && !controllerGeneratorModel.NoViews) { var layoutDependencyInstaller = ActivatorUtilities.CreateInstance<MvcLayoutDependencyInstaller>(ServiceProvider); await layoutDependencyInstaller.Execute(); foreach (var viewTemplate in _views) { var viewName = viewTemplate == "List" ? "Index" : viewTemplate; // ToDo: This is duplicated from ViewGenerator. bool isLayoutSelected = controllerGeneratorModel.UseDefaultLayout || !String.IsNullOrEmpty(controllerGeneratorModel.LayoutPage); var viewTemplateModel = new ViewGeneratorTemplateModel() { ViewDataTypeName = modelTypeAndContextModel.ModelType.FullName, ViewDataTypeShortName = modelTypeAndContextModel.ModelType.Name, ViewName = viewName, LayoutPageFile = controllerGeneratorModel.LayoutPage, IsLayoutPageSelected = isLayoutSelected, IsPartialView = false, ReferenceScriptLibraries = controllerGeneratorModel.ReferenceScriptLibraries, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata, JQueryVersion = "1.10.2" }; // Todo: Need logic for areas var viewOutputPath = Path.Combine( ApplicationEnvironment.ApplicationBasePath, Constants.ViewsFolderName, controllerRootName, viewName + Constants.ViewExtension); await CodeGeneratorActionsService.AddFileFromTemplateAsync(viewOutputPath, viewTemplate + Constants.RazorTemplateExtension, TemplateFolders, viewTemplateModel); Logger.LogMessage("Added View : " + viewOutputPath.Substring(ApplicationEnvironment.ApplicationBasePath.Length)); } await layoutDependencyInstaller.InstallDependencies(); } }
public abstract Task Generate(CommandLineGeneratorModel controllerGeneratorModel);
protected abstract string GetTemplateName(CommandLineGeneratorModel controllerGeneratorModel);
protected string ValidateAndGetOutputPath(CommandLineGeneratorModel generatorModel) { return(ValidateAndGetOutputPath(generatorModel, generatorModel.ControllerName + Constants.CodeFileExtension)); }
public abstract Task Generate(CommandLineGeneratorModel controllerGeneratorModel);
protected string ValidateAndGetOutputPath(CommandLineGeneratorModel generatorModel) { return ValidateAndGetOutputPath(generatorModel, generatorModel.ControllerName + Constants.CodeFileExtension); }
private string GetTemplateName(CommandLineGeneratorModel generatorModel) { return(generatorModel.IsRestController ? "ApiControllerWithContext.cshtml" : "MvcControllerWithContext.cshtml"); }
private string GetTemplateName(CommandLineGeneratorModel generatorModel) { return generatorModel.IsRestController ? "ApiControllerWithContext.cshtml" : "MvcControllerWithContext.cshtml"; }
protected override string GetTemplateName(CommandLineGeneratorModel generatorModel) { return(generatorModel.IsRestController ? Constants.ApiControllerWithContextTemplate : Constants.MvcControllerWithContextTemplate); }
protected override string GetTemplateName(CommandLineGeneratorModel generatorModel) { return generatorModel.IsRestController ? Constants.ApiControllerWithContextTemplate : Constants.MvcControllerWithContextTemplate; }
protected abstract string GetTemplateName(CommandLineGeneratorModel controllerGeneratorModel);