Пример #1
0
        // 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;
        }
Пример #3
0
        // 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);
            }
        }