示例#1
0
        public override void ExecuteCommandImpl(object sender, EventArgs args)
        {
            Document   activeDocument                 = projectManager.ActiveDocument;
            SyntaxNode activeSyntaxNode               = projectManager.ActiveSyntaxNode;
            string     activeDocumentMethodName       = projectManager.ActiveDocumentMethodName;
            string     activeDocumentMethodFullPath   = projectManager.ActiveDocumentMethodFullPath;
            string     activeDocumentMethodFolderPath = projectManager.ActiveDocumentMethodFolderPath;
            string     serverMethodFolderPath         = projectManager.ServerMethodFolderPath;

            MethodInfo methodInformation = projectConfigurationManager.CurrentProjectConfiguraiton.MethodInfos.FirstOrDefault(m => m.MethodName == activeDocumentMethodName);

            if (string.Equals(activeDocument.FilePath, activeDocumentMethodFullPath, StringComparison.InvariantCultureIgnoreCase))
            {
                // main to external
                var moveToViewAdapter = this.dialogFactory.GetMoveToView(activeDocumentMethodFolderPath, activeSyntaxNode);
                var moveToViewResult  = moveToViewAdapter.ShowDialog();
                if (moveToViewResult.DialogOperationResult == false)
                {
                    return;
                }

                ICodeProvider codeProvider           = codeProviderFactory.GetCodeProvider(activeDocument.Project.Language);
                CodeInfo      activeDocumentCodeInfo = codeProvider.RemoveActiveNodeFromActiveDocument(activeDocument, activeSyntaxNode, serverMethodFolderPath);
                CodeInfo      itemCodeInfo           = null;

                if (moveToViewResult.SelectedCodeType == CodeType.Partial)
                {
                    itemCodeInfo = codeProvider.InsertActiveNodeToPartial(moveToViewResult.SelectedFullPath, serverMethodFolderPath, activeDocumentMethodName, activeSyntaxNode, projectManager.ActiveDocumentMethodFullPath);
                }
                else
                {
                    itemCodeInfo = codeProvider.InsertActiveNodeToExternal(moveToViewResult.SelectedFullPath, serverMethodFolderPath, activeDocumentMethodName, activeSyntaxNode, projectManager.ActiveDocumentMethodFullPath);
                }

                projectManager.AddItemTemplateToProjectNew(activeDocumentCodeInfo, methodInformation.Package.MethodFolderPath, false);
                projectManager.AddItemTemplateToProjectNew(itemCodeInfo, methodInformation.Package.MethodFolderPath, false);

                projectConfigurationManager.Save(projectManager.ProjectConfigPath);
            }
            else
            {
                // external to main
                var messageBoxWindow       = dialogFactory.GetMessageBoxWindow();
                var messageBoxWindowResult = messageBoxWindow.ShowDialog(
                    this.messageManager.GetMessage("SelectedCodeWillBeMovedToMainMethodFileClickOKToContinue"),
                    this.messageManager.GetMessage("MoveToMainMethod"),
                    MessageButtons.OKCancel,
                    MessageIcon.Question);

                if (messageBoxWindowResult == MessageDialogResult.OK)
                {
                    ICodeProvider codeProvider           = codeProviderFactory.GetCodeProvider(activeDocument.Project.Language);
                    CodeInfo      activeDocumentCodeInfo = codeProvider.RemoveActiveNodeFromActiveDocument(activeDocument, activeSyntaxNode, serverMethodFolderPath);
                    CodeInfo      methodDocumentCodeInfo = codeProvider.InsertActiveNodeToMainMethod(activeDocumentMethodFullPath, serverMethodFolderPath, activeSyntaxNode, activeDocument.FilePath);
                    projectManager.AddItemTemplateToProjectNew(activeDocumentCodeInfo, methodInformation.Package.MethodFolderPath, false);
                    projectManager.AddItemTemplateToProjectNew(methodDocumentCodeInfo, methodInformation.Package.MethodFolderPath, false);
                }
            }
        }
        public void ExecuteCommandImpl_Partial_ShouldSaveConfigfile()
        {
            //Arange
            string  partialfileName = "testPartialfileName";
            string  methodName      = "methodName";
            Project selectedProject = Substitute.For <Project>();

            selectedProject.CodeModel.Language.Returns("C#");

            this.projectManager.MethodName.Returns(methodName);
            this.projectManager.ServerMethodFolderPath.Returns(@"C:\Users\Vladimir\source\repos\Aras11SP15MethodProject12\Aras11SP15MethodProject12\ServerMethods\");
            this.projectManager.SelectedFolderPath.Returns(@"C:\Users\Vladimir\source\repos\Aras11SP15MethodProject12\Aras11SP15MethodProject12\ServerMethods\MSO_Standard\Import\Method\MSO_GetAllSettings\Partials");
            this.projectManager.SelectedProject.Returns(selectedProject);
            this.projectManager.ProjectConfigPath.Returns("ProjectConfigPath");

            MethodInfo testMethodInfo = new MethodInfo()
            {
                MethodName = methodName,
                Package    = new PackageInfo("MSO_Standard")
            };

            IProjectConfiguraiton projectConfiguraiton = Substitute.For <IProjectConfiguraiton>();

            projectConfiguraiton.MethodInfos.Returns(new List <MethodInfo>()
            {
                testMethodInfo
            });

            projectConfigurationManager.CurrentProjectConfiguraiton.Returns(projectConfiguraiton);

            CreateCodeItemViewAdaper createCodeItemViewAdaper = new CreateCodeItemViewAdaper(partialfileName, Aras.Method.Libs.Code.CodeType.Partial, true);

            this.dialogFactory.GetCreateCodeItemView(Arg.Any <ICodeItemProvider>(), Arg.Any <bool>()).Returns(createCodeItemViewAdaper);

            ICodeProvider codeProvider = Substitute.For <ICodeProvider>();
            CodeInfo      codeItemInfo = new CodeInfo()
            {
                Code = "code",
                Path = @"path\testPartialfileName.cs"
            };

            codeProviderFactory.GetCodeProvider("C#").Returns(codeProvider);
            codeProvider.CreatePartialCodeItemInfo(testMethodInfo, partialfileName, Arg.Any <CodeElementType>(), Arg.Any <bool>(), projectManager.ServerMethodFolderPath,
                                                   projectManager.SelectedFolderPath,
                                                   projectManager.MethodName,
                                                   this.templateLoader,
                                                   projectManager.MethodPath)
            .Returns(codeItemInfo);

            //Act
            this.createCodeItemCmd.ExecuteCommandImpl(null, null);

            //Assert
            this.projectConfigurationManager.Received().Save("ProjectConfigPath");
        }
示例#3
0
        public void ExecuteCommandImpl_ShouldAddPartialClassesAndSaveConfigfile()
        {
            //Arange
            string  partialfileName = "testPartialfileName";
            string  methodName      = "methodName";
            Project selectedProject = Substitute.For <Project>();

            selectedProject.CodeModel.Language.Returns("C#");

            this.projectManager.MethodName.Returns(methodName);
            this.projectManager.SelectedProject.Returns(selectedProject);
            this.projectManager.ProjectConfigPath.Returns("ProjectConfigPath");
            MethodInfo testMethodInfo = new MethodInfo()
            {
                MethodName     = methodName,
                PartialClasses = new List <string>()
            };

            IProjectConfiguraiton projectConfiguraiton = Substitute.For <IProjectConfiguraiton>();

            projectConfiguraiton.MethodInfos.Returns(new List <MethodInfo>()
            {
                testMethodInfo
            });

            this.projectConfigurationManager.Load(Arg.Any <string>()).Returns(projectConfiguraiton);

            CreateCodeItemViewAdaper createCodeItemViewAdaper = new CreateCodeItemViewAdaper(partialfileName, MethodPlugin.Code.CodeType.Partial, true);

            this.dialogFactory.GetCreateCodeItemView(Arg.Any <ICodeItemProvider>(), Arg.Any <bool>()).Returns(createCodeItemViewAdaper);

            ICodeProvider codeProvider = Substitute.For <ICodeProvider>();
            CodeInfo      codeItemInfo = new CodeInfo()
            {
                Code = "code",
                Path = @"path\testPartialfileName.cs"
            };

            codeProviderFactory.GetCodeProvider("C#", projectConfiguraiton).Returns(codeProvider);
            codeProvider.CreateCodeItemInfo(testMethodInfo, partialfileName, Arg.Any <MethodPlugin.Code.CodeType>(), Arg.Any <CodeElementType>(), Arg.Any <bool>()).Returns(codeItemInfo);

            //Act
            this.createCodeItemCmd.ExecuteCommandImpl(null, null);

            //Assert
            Assert.IsTrue(testMethodInfo.PartialClasses.Contains(codeItemInfo.Path));
            this.projectConfigurationManager.Received().Save("ProjectConfigPath", projectConfiguraiton);
        }
示例#4
0
        public void Init()
        {
            projectManager = Substitute.For <IProjectManager>();
            projectConfigurationManager = new ProjectConfigurationManager();
            dialogFactory       = Substitute.For <IDialogFactory>();
            authManager         = new AuthManagerStub();
            codeProviderFactory = Substitute.For <ICodeProviderFactory>();
            globalConfiguration = Substitute.For <IGlobalConfiguration>();;
            CreateMethodCmd.Initialize(projectManager, authManager, dialogFactory, projectConfigurationManager, codeProviderFactory, globalConfiguration);
            createMethodCmd = CreateMethodCmd.Instance;
            iVsUIShell      = Substitute.For <IVsUIShell>();
            var currentPath = AppDomain.CurrentDomain.BaseDirectory;

            projectManager.ProjectConfigPath.Returns(Path.Combine(currentPath, "TestData\\projectConfig.xml"));
            projectManager.MethodConfigPath.Returns(Path.Combine(currentPath, "TestData\\method-config.xml"));
            template = new TemplateInfo {
                TemplateName = string.Empty
            };
            eventSpecificDataType = new EventSpecificDataType {
                EventSpecificData = EventSpecificData.None
            };
            templateLoader       = new TemplateLoader(dialogFactory);
            packageManager       = new PackageManager(authManager);
            codeProvider         = Substitute.For <ICodeProvider>();
            projectConfiguration = projectConfigurationManager.Load(projectManager.ProjectConfigPath);
            templateLoader.Load(projectManager.MethodConfigPath);
            codeProviderFactory.GetCodeProvider(null, null).ReturnsForAnyArgs(codeProvider);
        }
        public override void ExecuteCommandImpl(object sender, EventArgs args)
        {
            var project = projectManager.SelectedProject;

            string selectedMethodName     = projectManager.MethodName;
            string serverMethodFolderPath = projectManager.ServerMethodFolderPath;
            string selectedFolderPath     = projectManager.SelectedFolderPath;
            string projectConfigPath      = projectManager.ProjectConfigPath;

            var        projectConfiguration = projectConfigurationManager.Load(projectConfigPath);
            MethodInfo methodInformation    = projectConfiguration.MethodInfos.FirstOrDefault(m => m.MethodName == selectedMethodName);

            if (methodInformation == null)
            {
                throw new Exception($"Configurations for the {selectedMethodName} method not found.");
            }

            var view       = dialogFactory.GetCreateCodeItemView(this.codeProviderFactory.GetCodeItemProvider(project.CodeModel.Language), projectConfiguration.UseVSFormatting);
            var viewResult = view.ShowDialog();

            if (viewResult?.DialogOperationResult != true)
            {
                return;
            }

            string codeItemPath = selectedFolderPath.Substring(serverMethodFolderPath.IndexOf(serverMethodFolderPath) + serverMethodFolderPath.Length);

            codeItemPath = Path.Combine(codeItemPath, viewResult.FileName);

            if (methodInformation.PartialClasses.Contains(codeItemPath, StringComparer.InvariantCultureIgnoreCase) ||
                methodInformation.ExternalItems.Contains(codeItemPath, StringComparer.InvariantCultureIgnoreCase))
            {
                throw new Exception($"Code item already exists.");
            }

            ICodeProvider codeProvider = codeProviderFactory.GetCodeProvider(project.CodeModel.Language, projectConfiguration);
            CodeInfo      codeItemInfo = codeProvider.CreateCodeItemInfo(methodInformation, viewResult.FileName, viewResult.SelectedCodeType, viewResult.SelectedElementType, viewResult.IsUseVSFormattingCode);

            projectManager.AddItemTemplateToProjectNew(codeItemInfo, true, 0);

            if (viewResult.SelectedCodeType == CodeType.Partial)
            {
                methodInformation.PartialClasses.Add(codeItemInfo.Path);
            }
            else if (viewResult.SelectedCodeType == CodeType.External)
            {
                methodInformation.ExternalItems.Add(codeItemInfo.Path);
            }

            projectConfiguration.UseVSFormatting = viewResult.IsUseVSFormattingCode;
            projectConfigurationManager.Save(projectManager.ProjectConfigPath, projectConfiguration);
        }
        public void Init()
        {
            projectManager = Substitute.For <IProjectManager>();
            projectConfigurationManager = Substitute.For <ProjectConfigurationManager>();
            dialogFactory       = Substitute.For <IDialogFactory>();
            authManager         = new AuthManagerStub();
            codeProviderFactory = Substitute.For <ICodeProviderFactory>();
            codeProvider        = Substitute.For <ICodeProvider>();
            codeProviderFactory.GetCodeProvider(null).ReturnsForAnyArgs(codeProvider);
            iVsUIShell = Substitute.For <IVsUIShell>();
            var currentPath = AppDomain.CurrentDomain.BaseDirectory;

            projectManager.ProjectConfigPath.Returns(Path.Combine(currentPath, "TestData\\projectConfig.xml"));
            projectConfigurationManager.Load(projectManager.ProjectConfigPath);
            projectManager.MethodName.Returns("TestMethod");
            projectManager.MethodPath.Returns(Path.Combine(currentPath, "TestData\\TestMethod.txt"));
            messageManager = Substitute.For <MessageManager>();
            DebugMethodCmd.Initialize(projectManager, authManager, dialogFactory, projectConfigurationManager, codeProviderFactory, messageManager);
            debugMethodCmd = DebugMethodCmd.Instance;

            var project    = Substitute.For <Project>();
            var properties = Substitute.For <EnvDTE.Properties>();
            var property   = Substitute.For <Property>();
            var propertiesForActiveConfigurations = Substitute.For <EnvDTE.Properties>();
            var propertyForActiveConfiguration    = Substitute.For <Property>();
            var configurationManager = Substitute.For <ConfigurationManager>();
            var activeConfigurator   = Substitute.For <Configuration>();

            projectManager.SelectedProject.Returns(project);
            project.FileName.Returns(currentPath);
            project.Properties.Returns(properties);
            properties.Item(Arg.Any <string>()).Returns(property);
            property.Value = "";

            project.ConfigurationManager.Returns(configurationManager);
            configurationManager.ActiveConfiguration.Returns(activeConfigurator);
            activeConfigurator.Properties.Returns(propertiesForActiveConfigurations);
            propertiesForActiveConfigurations.Item(Arg.Any <string>()).Returns(propertyForActiveConfiguration);
            propertyForActiveConfiguration.Value = "";
            projectManager.When(x => x.AttachToProcess(Arg.Any <System.Diagnostics.Process>())).Do(x => { });
            var codeModel = Substitute.For <CodeModel>();

            project.CodeModel.Returns(codeModel);
            codeModel.Language.Returns("");
        }
示例#7
0
        public void Init()
        {
            projectManager = Substitute.For <IProjectManager>();
            projectConfigurationManager = Substitute.For <ProjectConfigurationManager>();
            dialogFactory       = Substitute.For <IDialogFactory>();
            codeProviderFactory = Substitute.For <ICodeProviderFactory>();
            CreatePartialElementCmd.Initialize(projectManager, dialogFactory, projectConfigurationManager, codeProviderFactory);
            createPartialElementCmd = CreatePartialElementCmd.Instance;
            iVsUIShell = Substitute.For <IVsUIShell>();
            var currentPath = AppDomain.CurrentDomain.BaseDirectory;

            projectManager.ProjectConfigPath.Returns(Path.Combine(currentPath, "TestData\\projectConfig.xml"));
            projectManager.MethodName.Returns("TestMethod");
            projectConfiguration = projectConfigurationManager.Load(projectManager.ProjectConfigPath);
            projectConfiguration.UseVSFormatting = false;
            codeProvider = Substitute.For <ICodeProvider>();
            codeProviderFactory.GetCodeProvider(null, null).ReturnsForAnyArgs(codeProvider);
        }
示例#8
0
        public void Init()
        {
            projectManager = Substitute.For <IProjectManager>();
            projectConfigurationManager = Substitute.For <ProjectConfigurationManager>();
            dialogFactory       = Substitute.For <IDialogFactory>();
            authManager         = Substitute.For <IAuthenticationManager>();
            codeProviderFactory = Substitute.For <ICodeProviderFactory>();
            codeProvider        = Substitute.For <ICodeProvider>();
            codeProviderFactory.GetCodeProvider(null, null).ReturnsForAnyArgs(codeProvider);
            OpenFromPackageCmd.Initialize(projectManager, authManager, dialogFactory, projectConfigurationManager, codeProviderFactory);
            openFromPackageCmd = OpenFromPackageCmd.Instance;
            iVsUIShell         = Substitute.For <IVsUIShell>();
            var currentPath = AppDomain.CurrentDomain.BaseDirectory;

            projectManager.ProjectConfigPath.Returns(Path.Combine(currentPath, "TestData\\projectConfig.xml"));
            projectConfiguration = projectConfigurationManager.Load(projectManager.ProjectConfigPath);
            templateLoader       = new TemplateLoader();
            projectManager.MethodConfigPath.Returns(Path.Combine(currentPath, "TestData\\method-config.xml"));
            templateLoader.Load(projectManager.MethodConfigPath);
        }
示例#9
0
 public void Init()
 {
     projectManager = Substitute.For <IProjectManager>();
     projectConfigurationManager = Substitute.For <ProjectConfigurationManager>();
     dialogFactory       = Substitute.For <IDialogFactory>();
     authManager         = Substitute.For <IAuthenticationManager>();
     codeProviderFactory = Substitute.For <ICodeProviderFactory>();
     codeProvider        = Substitute.For <ICodeProvider>();
     codeProviderFactory.GetCodeProvider(null).ReturnsForAnyArgs(codeProvider);
     messageManager = Substitute.For <MessageManager>();
     SaveToPackageCmd.Initialize(projectManager, authManager, dialogFactory, projectConfigurationManager, codeProviderFactory, messageManager);
     saveToPackageCmd = SaveToPackageCmd.Instance;
     iVsUIShell       = Substitute.For <IVsUIShell>();
     currentPath      = AppDomain.CurrentDomain.BaseDirectory;
     projectManager.ProjectConfigPath.Returns(Path.Combine(currentPath, "TestData\\projectConfig.xml"));
     projectConfigurationManager.Load(projectManager.ProjectConfigPath);
     projectConfigurationManager.CurrentProjectConfiguraiton.MethodConfigPath = Path.Combine(currentPath, "TestData\\method-config.xml");
     templateLoader = new TemplateLoader();
     templateLoader.Load(projectConfigurationManager.CurrentProjectConfiguraiton.MethodConfigPath);
     projectManager.MethodPath.Returns(Path.Combine(currentPath, "TestData\\TestMethod.txt"));
     packageManager = Substitute.For <PackageManager>(authManager, messageManager);
     File.Delete(Path.Combine(currentPath, "imports.mf"));
 }
        public override void ExecuteCommandImpl(object sender, EventArgs args)
        {
            string selectedMethodName     = projectManager.MethodName;
            string serverMethodFolderPath = projectManager.ServerMethodFolderPath;
            string selectedFolderPath     = projectManager.SelectedFolderPath;

            MethodInfo methodInformation = projectConfigurationManager.CurrentProjectConfiguraiton.MethodInfos.FirstOrDefault(m => m.MethodName == selectedMethodName);

            if (methodInformation == null)
            {
                throw new Exception(this.messageManager.GetMessage("ConfigurationsForTheMethodNotFound", selectedMethodName));
            }

            var view       = dialogFactory.GetCreateCodeItemView(this.codeProviderFactory.GetCodeItemProvider(projectManager.Language), projectConfigurationManager.CurrentProjectConfiguraiton.UseVSFormatting);
            var viewResult = view.ShowDialog();

            if (viewResult?.DialogOperationResult != true)
            {
                return;
            }

            string packageMethodFolderPath = this.projectConfigurationManager.CurrentProjectConfiguraiton.UseCommonProjectStructure ? methodInformation.Package.MethodFolderPath : string.Empty;
            string methodWorkingFolder     = Path.Combine(serverMethodFolderPath, packageMethodFolderPath, methodInformation.MethodName);

            string codeItemPath = selectedFolderPath.Substring(methodWorkingFolder.Length).TrimStart('\\', '/');

            codeItemPath = Path.Combine(codeItemPath, viewResult.FileName);

            string newFilePath = Path.Combine(methodWorkingFolder, codeItemPath) + GlobalConsts.CSExtension;

            if (File.Exists(newFilePath))
            {
                throw new Exception(this.messageManager.GetMessage("CodeItemAlreadyExists"));
            }

            TemplateLoader templateLoader = new TemplateLoader();

            templateLoader.Load(projectManager.MethodConfigPath);

            ICodeProvider codeProvider = codeProviderFactory.GetCodeProvider(projectManager.Language);
            CodeInfo      codeItemInfo = null;

            if (viewResult.SelectedCodeType == CodeType.Partial)
            {
                codeItemInfo = codeProvider.CreatePartialCodeItemInfo(methodInformation,
                                                                      viewResult.FileName,
                                                                      viewResult.SelectedElementType,
                                                                      viewResult.IsUseVSFormattingCode,
                                                                      methodWorkingFolder,
                                                                      projectManager.SelectedFolderPath,
                                                                      projectManager.MethodName,
                                                                      templateLoader,
                                                                      projectManager.MethodPath);
            }
            else if (viewResult.SelectedCodeType == CodeType.External)
            {
                codeItemInfo = codeProvider.CreateExternalCodeItemInfo(methodInformation,
                                                                       viewResult.FileName,
                                                                       viewResult.SelectedElementType,
                                                                       viewResult.IsUseVSFormattingCode,
                                                                       methodWorkingFolder,
                                                                       projectManager.SelectedFolderPath,
                                                                       projectManager.MethodName,
                                                                       templateLoader,
                                                                       projectManager.MethodPath);
            }

            projectManager.AddItemTemplateToProjectNew(codeItemInfo, packageMethodFolderPath, true, 0);

            projectConfigurationManager.CurrentProjectConfiguraiton.UseVSFormatting = viewResult.IsUseVSFormattingCode;
            projectConfigurationManager.Save(projectManager.ProjectConfigPath);
        }
示例#11
0
        public override void ExecuteCommandImpl(object sender, EventArgs args)
        {
            var project = projectManager.SelectedProject;

            string projectConfigPath = projectManager.ProjectConfigPath;
            string methodConfigPath  = projectManager.MethodConfigPath;

            var           projectConfiguration = projectConfigurationManager.Load(projectConfigPath);
            ICodeProvider codeProvider         = codeProviderFactory.GetCodeProvider(project.CodeModel.Language, projectConfiguration);

            var templateLoader = new TemplateLoader(this.dialogFactory);

            templateLoader.Load(methodConfigPath);

            var openView = dialogFactory.GetOpenFromPackageView(templateLoader, codeProvider.Language, projectConfiguration);

            var openViewResult = openView.ShowDialog();

            if (openViewResult?.DialogOperationResult != true)
            {
                return;
            }

            MethodInfo methodInformation = projectConfiguration.MethodInfos.FirstOrDefault(m => m.MethodName == openViewResult.MethodName);
            bool       isMethodExist     = projectManager.IsMethodExist(openViewResult.MethodName);

            if (projectManager.IsMethodExist(openViewResult.MethodName))
            {
                var messageWindow = this.dialogFactory.GetMessageBoxWindow();
                var dialogReuslt  = messageWindow.ShowDialog("Method already added to project. Do you want replace method?",
                                                             "Warning",
                                                             MessageButtons.YesNo,
                                                             MessageIcon.None);

                if (dialogReuslt == MessageDialogResult.Yes)
                {
                    projectManager.RemoveMethod(methodInformation);
                    projectConfiguration.MethodInfos.Remove(methodInformation);
                }
                else
                {
                    return;
                }
            }

            GeneratedCodeInfo codeInfo = codeProvider.GenerateCodeInfo(openViewResult.SelectedTemplate, openViewResult.SelectedEventSpecificData, openViewResult.MethodName, false, openViewResult.MethodCode, openViewResult.IsUseVSFormattingCode);

            projectManager.CreateMethodTree(codeInfo);

            var methodInfo = new PackageMethodInfo()
            {
                InnovatorMethodConfigId = openViewResult.MethodConfigId,
                InnovatorMethodId       = openViewResult.MethodId,
                MethodLanguage          = openViewResult.MethodLanguage,
                MethodName                  = openViewResult.MethodName,
                MethodType                  = openViewResult.MethodType,
                MethodComment               = openViewResult.MethodComment,
                PackageName                 = openViewResult.Package,
                TemplateName                = openViewResult.SelectedTemplate.TemplateName,
                EventData                   = openViewResult.SelectedEventSpecificData.EventSpecificData,
                ExecutionAllowedToId        = openViewResult.IdentityId,
                ExecutionAllowedToKeyedName = openViewResult.IdentityKeyedName,
                PartialClasses              = codeInfo.PartialCodeInfoList.Select(pci => pci.Path).ToList(),
                ExternalItems               = codeInfo.ExternalItemsInfoList.Select(pci => pci.Path).ToList(),
                ManifestFileName            = openViewResult.SelectedManifestFileName
            };

            projectConfiguration.LastSelectedDir    = openViewResult.SelectedFolderPath;
            projectConfiguration.LastSelectedMfFile = openViewResult.SelectedManifestFullPath;
            projectConfiguration.UseVSFormatting    = openViewResult.IsUseVSFormattingCode;
            projectConfiguration.LastSelectedSearchTypeInOpenFromPackage = openViewResult.SelectedSearchType;
            projectConfiguration.AddMethodInfo(methodInfo);
            projectConfigurationManager.Save(projectConfigPath, projectConfiguration);
        }
        public override void ExecuteCommandImpl(object sender, EventArgs args)
        {
            ICodeProvider codeProvider = codeProviderFactory.GetCodeProvider(projectManager.Language);

            TemplateLoader templateLoader = new TemplateLoader();

            templateLoader.Load(projectManager.MethodConfigPath);

            var openView       = dialogFactory.GetOpenFromPackageView(templateLoader, codeProvider.Language, projectConfigurationManager.CurrentProjectConfiguraiton);
            var openViewResult = openView.ShowDialog();

            if (openViewResult?.DialogOperationResult != true)
            {
                return;
            }

            MethodInfo methodInformation = projectConfigurationManager.CurrentProjectConfiguraiton.MethodInfos.FirstOrDefault(m => m.MethodName == openViewResult.MethodName);

            if (projectManager.IsMethodExist(openViewResult.Package.MethodFolderPath, openViewResult.MethodName))
            {
                var messageWindow = this.dialogFactory.GetMessageBoxWindow();
                var dialogReuslt  = messageWindow.ShowDialog(this.messageManager.GetMessage("MethodAlreadyAddedToProjectDoYouWantReplaceMethod"),
                                                             this.messageManager.GetMessage("Warning"),
                                                             MessageButtons.YesNo,
                                                             MessageIcon.None);

                if (dialogReuslt == MessageDialogResult.Yes)
                {
                    projectManager.RemoveMethod(methodInformation);
                    projectConfigurationManager.CurrentProjectConfiguraiton.MethodInfos.Remove(methodInformation);
                }
                else
                {
                    return;
                }
            }

            GeneratedCodeInfo codeInfo = codeProvider.GenerateCodeInfo(openViewResult.SelectedTemplate, openViewResult.SelectedEventSpecificData, openViewResult.MethodName, openViewResult.MethodCode, openViewResult.IsUseVSFormattingCode);

            projectManager.CreateMethodTree(codeInfo, openViewResult.Package);

            var methodInfo = new PackageMethodInfo()
            {
                InnovatorMethodConfigId = openViewResult.MethodConfigId,
                InnovatorMethodId       = openViewResult.MethodId,
                MethodLanguage          = openViewResult.MethodLanguage,
                MethodName                  = openViewResult.MethodName,
                MethodType                  = openViewResult.MethodType,
                MethodComment               = openViewResult.MethodComment,
                Package                     = openViewResult.Package,
                TemplateName                = openViewResult.SelectedTemplate.TemplateName,
                EventData                   = openViewResult.SelectedEventSpecificData.EventSpecificData,
                ExecutionAllowedToId        = openViewResult.IdentityId,
                ExecutionAllowedToKeyedName = openViewResult.IdentityKeyedName,
                ManifestFileName            = openViewResult.SelectedManifestFileName
            };

            projectManager.AddSuppression("assembly: System.Diagnostics.CodeAnalysis.SuppressMessage", "Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", "namespace", codeInfo.Namespace);

            projectConfigurationManager.CurrentProjectConfiguraiton.LastSelectedDir    = openViewResult.SelectedFolderPath;
            projectConfigurationManager.CurrentProjectConfiguraiton.LastSelectedMfFile = openViewResult.SelectedManifestFullPath;
            projectConfigurationManager.CurrentProjectConfiguraiton.UseVSFormatting    = openViewResult.IsUseVSFormattingCode;
            projectConfigurationManager.CurrentProjectConfiguraiton.LastSelectedSearchTypeInOpenFromPackage = openViewResult.SelectedSearchType;
            projectConfigurationManager.CurrentProjectConfiguraiton.AddMethodInfo(methodInfo);
            projectConfigurationManager.Save(projectManager.ProjectConfigPath);
        }