Exemplo n.º 1
0
 internal static string RepositoryOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel)
 {
     return(Path.Combine(
                "Project",
                "Repository",
                codeGeneratorViewModel.ModelType.ShortName + "Repos"));
 }
Exemplo n.º 2
0
 public static string EditViewModelOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel)
 {
     return(Path.Combine(
                "AppCode",
                "Project",
                "ViewModel",
                codeGeneratorViewModel.ModelType.ShortName + "EditViewModel"));
 }
Exemplo n.º 3
0
 internal static string ServiceOutPath(MvcCodeGeneratorViewModel codeGeneratorViewModel)
 {
     return(Path.Combine(
                "AppCode",
                "Project",
                "Service",
                codeGeneratorViewModel.ModelType.ShortName + "Service"));
 }
Exemplo n.º 4
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 MvcCodeGeneratorViewModel(Context);

            MvcScaffolderDialog window = new MvcScaffolderDialog(_codeGeneratorViewModel);
            bool?isOk = window.ShowModal();

            if (isOk == true)
            {
                Validate();

                if (_codeGeneratorViewModel.GenerateViews)
                {
                    isOk = ShowColumnSetting();
                }
            }
            return(isOk == true);
        }
        public MvcScaffolderDialog(MvcCodeGeneratorViewModel 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;
        }
Exemplo n.º 6
0
        //public override IEnumerable<string> TemplateFolders
        //{
        //    get
        //    {
        //        var baseTemplatePath = Path.Combine(Path.GetDirectoryName(path: GetType().Assembly.Location),
        //            "baseTemplatePath");
        //        var projectTemplatePath =
        //            Path.Combine(path1: Context.ActiveProject.GetFullPath(), "projectTemplatePath");
        //        return new[] { projectTemplatePath, baseTemplatePath };
        //    }
        //}

        // 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 MvcCodeGeneratorViewModel(context: Context);

            MvcScaffolderDialog window = new MvcScaffolderDialog(viewModel: _codeGeneratorViewModel);
            bool?isOk = window.ShowModal();

            if (isOk == true)
            {
                //Alert.Trace("Validate");
                Validate();

                if (_codeGeneratorViewModel.GenerateViews)
                {
                    isOk = ShowColumnSetting();
                }
            }

            //Alert.Trace("ShowUIAndValidate" + isOk);
            return(isOk == true);
        }
Exemplo n.º 7
0
        // Collects the common data needed by all of the scaffolded output and generates:
        // 1) Add Controller
        // 2) Add View
        private void GenerateCode(Project project, string selectionRelativePath, MvcCodeGeneratorViewModel 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);

            // Create Controller
            string controllerName     = codeGeneratorViewModel.ControllerName;
            string controllerRootName = controllerName.Replace("Controller", "");
            string outputFolderPath   = Path.Combine(selectionRelativePath, controllerName);
            string viewPrefix         = codeGeneratorViewModel.ViewPrefix;
            string programTitle       = codeGeneratorViewModel.ProgramTitle;

            AddMvcController(project: project
                             , controllerName: controllerName
                             , controllerRootName: controllerRootName
                             , outputPath: outputFolderPath
                             , ContextTypeName: dbContext.Name
                             , modelType: modelType
                             , efMetadata: efMetadata
                             , viewPrefix: viewPrefix
                             , overwrite: codeGeneratorViewModel.OverwriteViews);

            if (!codeGeneratorViewModel.GenerateViews)
            {
                return;
            }

            // add Metadata for Model
            outputFolderPath = Path.Combine(GetModelFolderPath(selectionRelativePath), modelType.Name + "Metadata");
            AddModelMetadata(project: project
                             , controllerName: controllerName
                             , controllerRootName: controllerRootName
                             , outputPath: outputFolderPath
                             , ContextTypeName: dbContext.Name
                             , modelType: modelType
                             , efMetadata: efMetadata
                             , overwrite: codeGeneratorViewModel.OverwriteViews);

            //_ViewStart & Create _Layout
            string viewRootPath = GetViewsFolderPath(selectionRelativePath);

            if (codeGeneratorViewModel.LayoutPageSelected)
            {
                string areaName = GetAreaName(selectionRelativePath);
                AddDependencyFile(project, viewRootPath, areaName);
            }
            // EditorTemplates, DisplayTemplates
            AddDataFieldTemplates(project, viewRootPath);


            // Views for  C.R.U.D
            string viewFolderPath = Path.Combine(viewRootPath, controllerRootName);

            foreach (string viewName in new string[4] {
                "Index", "Create", "Edit", "EditForm"
            })
            {
                //string viewName = string.Format(view, viewPrefix);
                //未完成

                /*
                 * Index        CustIndex
                 * Create       CustCreate
                 * Edit           CustEdit
                 * EditForm    CustEditForm
                 *
                 * _Edit      _CustEdit
                 */

                AddView(project
                        , viewFolderPath, viewPrefix, viewName, programTitle
                        , controllerRootName, modelType, efMetadata
                        , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries
                        , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected
                        , layoutPageFile: codeGeneratorViewModel.LayoutPageFile
                        , overwrite: codeGeneratorViewModel.OverwriteViews
                        );
            }
        }
Exemplo n.º 8
0
        // Collects the common data needed by all of the scaffolded output and generates:
        // 1) Add Controller
        // 2) Add View
        private void GenerateCode(Project project, string selectionRelativePath,
                                  MvcCodeGeneratorViewModel 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: project, fullName: dbContextTypeName);

            //efService.AddRequiredEntity 正式會沒回應,改GetEfMetadata反射Model設定Metadata
            // Get the Entity Framework Meta Data
            //IEntityFrameworkService efService = Context.ServiceProvider.GetService<IEntityFrameworkService>();
            //ModelMetadata efMetadata = efService.AddRequiredEntity(context: Context,
            //    contextTypeFullName: dbContextTypeName, entityTypeFullName: modelType.FullName)

            var efMetadata = GetEfMetadata(modelType.FullName);

            // Create Controller
            string controllerName     = codeGeneratorViewModel.ControllerName;
            string controllerRootName = controllerName.Replace(oldValue: "Controller", newValue: "");
            string outputFolderPath   = Path.Combine(path1: selectionRelativePath, path2: controllerName);
            string viewPrefix         = codeGeneratorViewModel.ViewPrefix;
            string programTitle       = codeGeneratorViewModel.ProgramTitle;

            //Alert.Trace("AddMvcController");

            if (codeGeneratorViewModel.GenerateApiController)
            {
                AddMvcController(project: project
                                 , controllerName: controllerName
                                 , controllerRootName: controllerRootName
                                 , outputPath: outputFolderPath
                                 , ContextTypeName: dbContext.Name
                                 , modelType: modelType
                                 , efMetadata: efMetadata
                                 , viewPrefix: viewPrefix
                                 , overwrite: codeGeneratorViewModel.OverwriteViews);
            }

            if (codeGeneratorViewModel.GenerateService)
            {
                AddService(project: project
                           , controllerName: controllerName
                           , controllerRootName: controllerRootName
                           , outputPath: PathHelper.ServiceOutPath(codeGeneratorViewModel: codeGeneratorViewModel)
                           , ContextTypeName: dbContext.Name
                           , modelType: modelType
                           , efMetadata: efMetadata
                           , viewPrefix: viewPrefix
                           , overwrite: codeGeneratorViewModel.OverwriteViews);
            }

            if (codeGeneratorViewModel.GenerateRepository)
            {
                project = (Project)_visualStudioUtils.FindProjectByName("DAL").Object;
                AddRepository(project: project
                              , controllerName: controllerName
                              , controllerRootName: controllerRootName
                              , outputPath: PathHelper.RepositoryOutPath(codeGeneratorViewModel: codeGeneratorViewModel)
                              , ContextTypeName: dbContext.Name
                              , modelType: modelType
                              , efMetadata: efMetadata
                              , viewPrefix: viewPrefix
                              , overwrite: codeGeneratorViewModel.OverwriteViews);
            }

            // add Metadata for Model
            if (codeGeneratorViewModel.GenerateViews)
            {
                AddListViewModel(project: Context.ActiveProject
                                 , controllerName: controllerName
                                 , controllerRootName: controllerRootName
                                 , outputPath: PathHelper.ListViewModelOutPath(codeGeneratorViewModel: codeGeneratorViewModel)
                                 , ContextTypeName: dbContext.Name
                                 , modelType: modelType
                                 , efMetadata: efMetadata
                                 , overwrite: codeGeneratorViewModel.OverwriteViews);

                AddEditViewModel(project: Context.ActiveProject
                                 , controllerName: controllerName
                                 , controllerRootName: controllerRootName
                                 , outputPath: PathHelper.EditViewModelOutPath(codeGeneratorViewModel: codeGeneratorViewModel)
                                 , ContextTypeName: dbContext.Name
                                 , modelType: modelType
                                 , efMetadata: efMetadata
                                 , overwrite: codeGeneratorViewModel.OverwriteViews);
            }



            ////_ViewStart & Create _Layout
            //string viewRootPath = GetViewsFolderPath(selectionRelativePath);
            //if (codeGeneratorViewModel.LayoutPageSelected)
            //{
            //    string areaName = GetAreaName(selectionRelativePath);
            //    AddDependencyFile(project, viewRootPath, areaName);
            //}
            //// EditorTemplates, DisplayTemplates
            //AddDataFieldTemplates(project, viewRootPath);

            //// Views for  C.R.U.D
            //string viewFolderPath = Path.Combine(viewRootPath, controllerRootName);
            //foreach (string viewName in new string[4] { "Index", "Create", "Edit", "EditForm" })
            //{
            //    //string viewName = string.Format(view, viewPrefix);
            //    //未完成
            //    /*
            //     Index        CustIndex
            //     Create       CustCreate
            //     Edit           CustEdit
            //     EditForm    CustEditForm
            //     *
            //     _Edit      _CustEdit
            //     */

            //    AddView(project
            //        , viewFolderPath, viewPrefix, viewName, programTitle
            //        , controllerRootName, modelType, efMetadata
            //        , referenceScriptLibraries: codeGeneratorViewModel.ReferenceScriptLibraries
            //        , isLayoutPageSelected: codeGeneratorViewModel.LayoutPageSelected
            //        , layoutPageFile: codeGeneratorViewModel.LayoutPageFile
            //        , overwrite: codeGeneratorViewModel.OverwriteViews
            //        );
            //}
        }