// Shows the Visual Studio dialog that collects scaffolding options // from the user. // Passing the dialog to this method so that all scaffolder UIs // are modal is still an open question and tracked by bug 578173. public override bool ShowUIAndValidate() { _codeGeneratorViewModel = new SPCodeGeneratorViewModel(Context); SPScaffolderDialog window = new SPScaffolderDialog(_codeGeneratorViewModel); bool?isOk = window.ShowModal(); if (isOk == true) { Validate(); } return(isOk == true); }
public SPScaffolderDialog(SPCodeGeneratorViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException("viewModel"); } InitializeComponent(); //viewModel.PromptForNewDataContextTypeName += model => //{ // var dialog = new NewDataContextDialog(model); // var result = dialog.ShowModal(); // model.Canceled = !result.HasValue || !result.Value; //}; viewModel.Close += result => DialogResult = result; DataContext = viewModel; }
// Collects the common data needed by all of the scaffolded output and generates: // 1) Add ViewModel // 2) Add Controller // 3) Add View private void GenerateCode(Project project, string selectionRelativePath, SPCodeGeneratorViewModel codeGeneratorViewModel) { // Get Model Type var modelType = codeGeneratorViewModel.ModelType.CodeType; // Get the dbContext string dbContextTypeName = codeGeneratorViewModel.DbContextModelType.TypeName; ICodeTypeService codeTypeService = GetService <ICodeTypeService>(); CodeType dbContext = codeTypeService.GetCodeType(project, dbContextTypeName); // Get the Entity Framework Meta Data //IEntityFrameworkService efService = Context.ServiceProvider.GetService<IEntityFrameworkService>(); //ModelMetadata efMetadata = efService.AddRequiredEntity(Context, dbContextTypeName, modelType.FullName); string methodName = _codeGeneratorViewModel.MethodTypeName; string controllerName = codeGeneratorViewModel.ControllerName; string controllerRootName = controllerName.Replace("Controller", ""); // add Metadata for Model string defaultNamespace = modelType.Namespace.FullName; MetaTableInfo queryMetaTable = _codeGeneratorViewModel.QueryFormViewModel.DataModel; MetaTableInfo resultMetaTable = _codeGeneratorViewModel.ResultListViewModel.DataModel; string outputFolderPath = Path.Combine(GetModelFolderPath(selectionRelativePath), modelType.Name + "ViewModels"); AddModelMetadata(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , defaultNamespace: defaultNamespace , modelTypeName: modelType.Name , methodName: methodName , queryMetaTable: queryMetaTable , resultMetaTable: resultMetaTable , overwrite: codeGeneratorViewModel.OverwriteViews); // Create Controller outputFolderPath = Path.Combine(selectionRelativePath, controllerName); AddMvcController(project: project , controllerName: controllerName , controllerRootName: controllerRootName , outputPath: outputFolderPath , ContextTypeName: dbContext.Name , modelType: modelType , efMetadata: null/*efMetadata*/ , overwrite: codeGeneratorViewModel.OverwriteViews); if (!codeGeneratorViewModel.GenerateViews) { return; } // Create Views string viewRootPath = GetViewsFolderPath(selectionRelativePath); string viewFolderPath = Path.Combine(viewRootPath, controllerRootName); foreach (string viewName in new string[2] { "Index", "_Index" }) { AddView(project, viewFolderPath, viewName, controllerRootName, modelType , null /*efMetadata*/ , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected , layoutPageFile: codeGeneratorViewModel.LayoutPageFile , overwrite: codeGeneratorViewModel.OverwriteViews ); } //_ViewStart & Create _Layout if (codeGeneratorViewModel.LayoutPageSelected) { string areaName = GetAreaName(selectionRelativePath); AddDependencyFile(project, viewRootPath, areaName); } }