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); } }
private async Task GenerateViewsIfRequired(CommandLineGeneratorModel controllerGeneratorModel, ModelTypeAndContextModel modelTypeAndContextModel, string controllerRootName) { if (!controllerGeneratorModel.IsRestController && !controllerGeneratorModel.NoViews) { var viewGenerator = ActivatorUtilities.CreateInstance <EFModelBasedViewScaffolder>(ServiceProvider); var areaPath = string.IsNullOrEmpty(_areaName) ? string.Empty : Path.Combine("Areas", _areaName); var viewBaseOutputPath = Path.Combine( ApplicationInfo.ApplicationBasePath, areaPath, Constants.ViewsFolderName, controllerRootName); var viewGeneratorModel = new ViewGeneratorModel() { UseDefaultLayout = controllerGeneratorModel.UseDefaultLayout, PartialView = false, LayoutPage = controllerGeneratorModel.LayoutPage, Force = controllerGeneratorModel.Force, RelativeFolderPath = viewBaseOutputPath, ReferenceScriptLibraries = controllerGeneratorModel.ReferenceScriptLibraries, BootstrapVersion = controllerGeneratorModel.BootstrapVersion }; var viewAndTemplateNames = new Dictionary <string, string>(); foreach (var viewTemplate in _views) { var viewName = viewTemplate == "List" ? "Index" : viewTemplate; viewAndTemplateNames.Add(viewName, viewTemplate); } await viewGenerator.GenerateViews(viewAndTemplateNames, viewGeneratorModel, modelTypeAndContextModel, viewBaseOutputPath); } }
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); } ValidateNameSpaceName(controllerGeneratorModel); var layoutDependencyInstaller = ActivatorUtilities.CreateInstance <MvcLayoutDependencyInstaller>(ServiceProvider); await layoutDependencyInstaller.Execute(); var namespaceName = string.IsNullOrEmpty(controllerGeneratorModel.ControllerNamespace) ? GetDefaultControllerNamespace(controllerGeneratorModel.RelativeFolderPath) : controllerGeneratorModel.ControllerNamespace; var templateModel = new ClassNameModel(className: controllerGeneratorModel.ControllerName, namespaceName: namespaceName); var outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage(string.Format(MessageStrings.AddedController, outputPath.Substring(ApplicationInfo.ApplicationBasePath.Length))); await layoutDependencyInstaller.InstallDependencies(); }
protected CommandLineGeneratorModel(CommandLineGeneratorModel copyFrom) : base(copyFrom) { UseAsync = copyFrom.UseAsync; NoViews = copyFrom.NoViews; ControllerName = copyFrom.ControllerName; IsRestController = copyFrom.IsRestController; GenerateReadWriteActions = copyFrom.GenerateReadWriteActions; }
protected void ValidateNameSpaceName(CommandLineGeneratorModel generatorModel) { if (!string.IsNullOrEmpty(generatorModel.ControllerNamespace) && !RoslynUtilities.IsValidNamespace(generatorModel.ControllerNamespace)) { throw new InvalidOperationException(string.Format( CultureInfo.CurrentCulture, MessageStrings.InvalidNamespaceName, generatorModel.ControllerNamespace)); } }
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(); } }
public override async Task Generate(CommandLineGeneratorModel controllerGeneratorModel) { Contract.Assert(!String.IsNullOrEmpty(controllerGeneratorModel.ModelClass)); ValidateNameSpaceName(controllerGeneratorModel); EFValidationUtil.ValidateEFDependencies(ProjectContext.PackageDependencies, controllerGeneratorModel.UseSqlite); string outputPath = ValidateAndGetOutputPath(controllerGeneratorModel); _areaName = GetAreaName(ApplicationInfo.ApplicationBasePath, outputPath); var modelTypeAndContextModel = await ModelMetadataUtilities.ValidateModelAndGetEFMetadata( controllerGeneratorModel, EntityFrameworkService, ModelTypesLocator, _areaName); if (string.IsNullOrEmpty(controllerGeneratorModel.ControllerName)) { //Todo: Pluralize model name controllerGeneratorModel.ControllerName = modelTypeAndContextModel.ModelType.Name + Constants.ControllerSuffix; } var namespaceName = string.IsNullOrEmpty(controllerGeneratorModel.ControllerNamespace) ? GetDefaultControllerNamespace(controllerGeneratorModel.RelativeFolderPath) : controllerGeneratorModel.ControllerNamespace; var templateModel = new ControllerWithContextTemplateModel(modelTypeAndContextModel.ModelType, modelTypeAndContextModel.DbContextFullName) { ControllerName = controllerGeneratorModel.ControllerName, AreaName = _areaName, UseAsync = controllerGeneratorModel.UseAsync, // This is no longer used for controllers with context. ControllerNamespace = namespaceName, ModelMetadata = modelTypeAndContextModel.ContextProcessingResult.ModelMetadata }; await CodeGeneratorActionsService.AddFileFromTemplateAsync(outputPath, GetTemplateName(controllerGeneratorModel), TemplateFolders, templateModel); Logger.LogMessage(string.Format(MessageStrings.AddedController, outputPath.Substring(ApplicationInfo.ApplicationBasePath.Length))); await GenerateViewsIfRequired(controllerGeneratorModel, modelTypeAndContextModel, templateModel.ControllerRootName); if (modelTypeAndContextModel.ContextProcessingResult.ContextProcessingStatus == ContextProcessingStatus.ContextAddedButRequiresConfig) { throw new Exception(string.Format("{0} {1}", MessageStrings.ScaffoldingSuccessful_unregistered, MessageStrings.Scaffolding_additionalSteps)); } }
protected override string GetTemplateName(CommandLineGeneratorModel generatorModel) { return(generatorModel.IsRestController ? Constants.ApiControllerWithContextTemplate : Constants.MvcControllerWithContextTemplate); }
protected abstract string GetTemplateName(CommandLineGeneratorModel controllerGeneratorModel);
public abstract Task Generate(CommandLineGeneratorModel controllerGeneratorModel);
protected string ValidateAndGetOutputPath(CommandLineGeneratorModel generatorModel) { return(ValidateAndGetOutputPath(generatorModel, generatorModel.ControllerName + Constants.CodeFileExtension)); }