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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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;
 }
Ejemplo n.º 5
0
 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));
     }
 }
Ejemplo n.º 6
0
        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();
            }
        }
Ejemplo n.º 7
0
        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));
            }
        }
Ejemplo n.º 8
0
 protected override string GetTemplateName(CommandLineGeneratorModel generatorModel)
 {
     return(generatorModel.IsRestController ? Constants.ApiControllerWithContextTemplate : Constants.MvcControllerWithContextTemplate);
 }
Ejemplo n.º 9
0
 protected abstract string GetTemplateName(CommandLineGeneratorModel controllerGeneratorModel);
Ejemplo n.º 10
0
 public abstract Task Generate(CommandLineGeneratorModel controllerGeneratorModel);
Ejemplo n.º 11
0
 protected string ValidateAndGetOutputPath(CommandLineGeneratorModel generatorModel)
 {
     return(ValidateAndGetOutputPath(generatorModel, generatorModel.ControllerName + Constants.CodeFileExtension));
 }