예제 #1
0
        private void CreateClassesMetadata(List <EntityType> EntityTypes, string ModelsNamespace, string ModelsDirectory)
        {
            //Generate Classes Metadata
            ClassesMetadata classesMetadata = new ClassesMetadata();

            classesMetadata.Namespace = ModelsNamespace;
            classesMetadata.Tables    = EntityTypes.ToList();
            var metadataFilePath = Path.Combine(ModelsDirectory, "ModelsMetadata.cs");

            File.AppendAllText(metadataFilePath, classesMetadata.TransformText());
        }
        /// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            try
            {
                var controllersClasses = ClassesMetadata.GetClasses().ToList();

                List <ControllerType> controllers = new List <ControllerType>();

                foreach (var cnrtclass in controllersClasses)
                {
                    try
                    {
                        var newCnt = new ControllerType();


                        newCnt.Name      = cnrtclass.Name;
                        newCnt.Functions = new List <ControllerAction>();
                        #region Functions
                        var funcClass = cnrtclass.Children.OfType <CodeFunction2>().Where(func => func.Access == vsCMAccess.vsCMAccessPublic && func.FunctionKind == vsCMFunction.vsCMFunctionFunction).ToList();
                        foreach (var fun in funcClass)
                        {
                            try
                            {
                                var newCntaction = new ControllerAction();
                                newCntaction.Name           = fun.Name;
                                newCntaction.ControllerName = newCnt.Name;
                                newCntaction.Name           = fun.Name;
                                newCntaction.returnType     = (fun.Type?.CodeType as CodeClass2)?.Name ?? "void";
                                newCntaction.ActionVerb     = GetVerb(fun);
                                newCntaction.Parameters     = new List <ControllerActionParameter>();
                                var funParams = fun.Parameters.OfType <CodeParameter2>()?.ToList();
                                foreach (var prm in funParams)
                                {
                                    try
                                    {
                                        ControllerActionParameter p = new ControllerActionParameter()
                                        {
                                            Name     = prm.Name,
                                            TypeName = prm?.Type?.CodeType?.Name
                                        };
                                        newCntaction.Parameters.Add(p);
                                    }
                                    catch (Exception e1)
                                    {
                                    };
                                }

                                newCnt.Functions.Add(newCntaction);
                            }
                            catch (Exception e2)
                            {
                            }
                        }
                        #endregion

                        controllers.Add(newCnt);
                    }
                    catch (Exception e3)
                    {
                    }
                }



                IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell));
                uiShell.EnableModeless(0);
                var xamlDialog = new ActionSelectorDialogWindow(controllers, InsertText)
                {
                    Owner = Application.Current.MainWindow
                };


                xamlDialog.HasMinimizeButton = false;
                xamlDialog.HasMaximizeButton = true;
                xamlDialog.MaxHeight         = 440;
                xamlDialog.MinHeight         = 340;
                xamlDialog.MaxWidth          = 800;
                xamlDialog.MinWidth          = 300;
                xamlDialog.Title             = "Generate From Action";

                xamlDialog.ActionToClose = xamlDialog.Close;

                xamlDialog.ShowDialog();
                uiShell.EnableModeless(1);
            }
            catch (Exception ex)
            {
            }
        }