public void UpdateRaml(string ramlFilePath)
        {
            var dte  = ServiceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            var contractsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + ContractsFolderName + Path.DirectorySeparatorChar;

            var refFilePath        = InstallerServices.GetRefFilePath(ramlFilePath);
            var includesFolderPath = contractsFolderPath + Path.DirectorySeparatorChar + InstallerServices.IncludesFolderName;
            var ramlSource         = RamlReferenceReader.GetRamlSource(refFilePath);

            if (string.IsNullOrWhiteSpace(ramlSource))
            {
                ramlSource = ramlFilePath;
            }

            var includesManager = new RamlIncludesManager();
            var result          = includesManager.Manage(ramlSource, includesFolderPath, contractsFolderPath + Path.DirectorySeparatorChar);

            if (result.IsSuccess)
            {
                File.WriteAllText(ramlFilePath, result.ModifiedContents);
                var parameters = new RamlChooserActionParams(ramlFilePath, ramlFilePath, null, null,
                                                             Path.GetFileName(ramlFilePath).ToLowerInvariant(),
                                                             RamlReferenceReader.GetRamlNamespace(refFilePath), null)
                {
                    UseAsyncMethods = RamlReferenceReader.GetRamlUseAsyncMethods(refFilePath),
                    IncludeApiVersionInRoutePrefix = RamlReferenceReader.GetRamlIncludeApiVersionInRoutePrefix(refFilePath),
                    ModelsFolder = RamlReferenceReader.GetModelsFolder(refFilePath),
                    ImplementationControllersFolder = RamlReferenceReader.GetImplementationControllersFolder(refFilePath),
                    AddGeneratedSuffixToFiles       = RamlReferenceReader.GetAddGeneratedSuffix(refFilePath)
                };
                Scaffold(ramlFilePath, parameters);
            }
        }
Ejemplo n.º 2
0
        public override void AddRamlReference(RamlChooserActionParams parameters)
        {
            try
            {
                Logger.LogInformation("Add RAML Reference process started");
                var dte  = ServiceProvider.GetService(typeof(SDTE)) as DTE;
                var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

                AddPortableImports(proj);

                InstallNugetDependencies(proj);
                Logger.LogInformation("Nuget Dependencies installed");

                AddFilesToProject(parameters.RamlFilePath, proj, parameters.TargetNamespace, parameters.RamlSource, parameters.TargetFileName, parameters.ClientRootClassName);
                Logger.LogInformation("Files added to project");
            }
            catch (Exception ex)
            {
                Logger.LogError(ex);
                var errorMessage = "Error when trying to add the RAML reference. " + ex.Message;
                if (ex.InnerException != null)
                {
                    errorMessage += " - " + ex.InnerException;
                }

                MessageBox.Show(errorMessage);
                throw;
            }
        }
Ejemplo n.º 3
0
        public override void AddContract(RamlChooserActionParams parameters)
        {
            Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
            Tracking.Track("Asp.Net WebApi Scaffold");

            var dte  = ServiceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            InstallDependencies(proj, newtonsoftJsonPackageVersion);

            AddXmlFormatterInWebApiConfig(proj);

            var folderItem          = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, ContractsFolderName);
            var contractsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + ContractsFolderName + Path.DirectorySeparatorChar;

            var targetFolderPath = GetTargetFolderPath(contractsFolderPath, parameters.TargetFileName);

            if (!Directory.Exists(targetFolderPath))
            {
                Directory.CreateDirectory(targetFolderPath);
            }

            if (string.IsNullOrWhiteSpace(parameters.RamlSource) && !string.IsNullOrWhiteSpace(parameters.RamlTitle))
            {
                AddEmptyContract(folderItem, contractsFolderPath, parameters);
            }
            else
            {
                AddContractFromFile(folderItem, contractsFolderPath, parameters);
            }
        }
        public override void AddContract(RamlChooserActionParams parameters)
        {
            var dte  = ServiceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            InstallNugetDependencies(proj, newtonsoftJsonForCorePackageVersion);

            var folderItem          = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, ContractsFolderName);
            var contractsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + ContractsFolderName + Path.DirectorySeparatorChar;

            var targetFolderPath = GetTargetFolderPath(contractsFolderPath, parameters.TargetFileName);

            if (!Directory.Exists(targetFolderPath))
            {
                Directory.CreateDirectory(targetFolderPath);
            }

            if (string.IsNullOrWhiteSpace(parameters.RamlSource) && !string.IsNullOrWhiteSpace(parameters.RamlTitle))
            {
                AddEmptyContract(folderItem, contractsFolderPath, parameters);
            }
            else
            {
                AddContractFromFile(folderItem, contractsFolderPath, parameters);
            }
        }
        private static void ShowOrHideForFolderIfNotVs2015(object sender, string folderName)
        {
            var menuCommand = sender as OleMenuCommand;

            if (menuCommand == null)
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, false);

            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                return;
            }

            if (IsInFolder(folderName))
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, true);
        }
        private void RemoveReverseEngineeringCommandOnBeforeQueryStatus(object sender, EventArgs e)
        {
            var menuCommand = sender as OleMenuCommand;

            if (menuCommand == null)
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, false);

            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                return;
            }

            if (!IsWebApiExplorerInstalled())
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, true);
        }
Ejemplo n.º 7
0
        public void AddContract(RamlChooserActionParams parameters)
        {
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            InstallNugetDependencies(proj);
            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                AddXmlFormatterInWebApiConfig(proj);
            }

            var folderItem          = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, contractsFolderName);
            var contractsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + contractsFolderName + Path.DirectorySeparatorChar;

            var targetFolderPath = GetTargetFolderPath(contractsFolderPath, parameters.TargetFileName, proj);

            if (!Directory.Exists(targetFolderPath))
            {
                Directory.CreateDirectory(targetFolderPath);
            }

            if (string.IsNullOrWhiteSpace(parameters.RamlSource) && !string.IsNullOrWhiteSpace(parameters.RamlTitle))
            {
                AddEmptyContract(folderItem, contractsFolderPath, parameters);
            }
            else
            {
                AddContractFromFile(folderItem, contractsFolderPath, parameters);
            }
        }
        private static bool IsAVisualStudio2015Project()
        {
            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            return(VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj));
        }
        private void ExtractRAMLCommandOnBeforeQueryStatus(object sender, EventArgs e)
        {
            var menuCommand = sender as OleMenuCommand;

            if (menuCommand == null)
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, false);

            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (!VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj) && !IsWebApiCoreInstalled(proj))
            {
                return;
            }

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj) && !IsAspNet5MvcInstalled(proj))
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, true);
        }
        private static void ShowOrHideCommandForFolder(object sender, string folderName)
        {
            // get the menu that fired the event
            var menuCommand = sender as OleMenuCommand;

            if (menuCommand == null)
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, false);

            if (IsInFolder(folderName))
            {
                return;
            }

            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj) && !IsAspNet5MvcInstalled(proj))
            {
                return;
            }

            ShowAndEnableCommand(menuCommand, true);
        }
Ejemplo n.º 11
0
        private void BeforeQueryStatus(object sender, EventArgs e)
        {
            var menuCommand = sender as OleMenuCommand;

            if (menuCommand == null)
            {
                return;
            }

            CommandsUtil.ShowAndEnableCommand(menuCommand, false);

            var dte  = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (!VisualStudioAutomationHelper.IsANetCoreProject(proj) && (!CommandsUtil.IsWebApiCoreInstalled(proj) || IsWebApiExplorerInstalled()))
            {
                return;
            }

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj) && (!CommandsUtil.IsAspNet5MvcInstalled(proj) || IsNetCoreApiExplorerInstalled()))
            {
                return;
            }

            CommandsUtil.ShowAndEnableCommand(menuCommand, true);
        }
        private static bool IsMsTestsInstalled()
        {
            var dte  = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            return(CommandsUtil.IsPackageInstalled(proj, "MSTest.TestFramework"));
        }
        public void Scaffold(string ramlSource, RamlChooserActionParams parameters)
        {
            Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
            var dte  = ServiceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            ScaffoldToProject(parameters, proj);
        }
Ejemplo n.º 14
0
        public void Scaffold(string ramlSource, RamlChooserActionParams parameters)
        {
            var data = RamlScaffolderHelper.GetRamlData(ramlSource, parameters.TargetNamespace);

            if (data == null || data.Model == null)
            {
                return;
            }

            var model = data.Model;

            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            var contractsFolderItem = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, contractsFolderName);
            var ramlItem            =
                contractsFolderItem.ProjectItems.Cast <ProjectItem>()
                .First(i => i.Name.ToLowerInvariant() == parameters.TargetFileName.ToLowerInvariant());
            var contractsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar +
                                      contractsFolderName + Path.DirectorySeparatorChar;

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                templateSubFolder = "AspNet5";
            }
            else
            {
                templateSubFolder = "RAMLWebApi2Scaffolder";
            }

            var templates = new[]
            {
                ControllerBaseTemplateName,
                ControllerInterfaceTemplateName,
                ControllerImplementationTemplateName,
                ModelTemplateName,
                EnumTemplateName
            };

            if (!templatesManager.ConfirmWhenIncompatibleServerTemplate(contractsFolderPath, templates))
            {
                return;
            }

            var extensionPath = Path.GetDirectoryName(GetType().Assembly.Location) + Path.DirectorySeparatorChar;

            AddOrUpdateModels(parameters, contractsFolderPath, ramlItem, model, contractsFolderItem, extensionPath);

            AddOrUpdateEnums(parameters, contractsFolderPath, ramlItem, model, contractsFolderItem, extensionPath);

            AddOrUpdateControllerBase(parameters, contractsFolderPath, ramlItem, model, contractsFolderItem, extensionPath);

            AddOrUpdateControllerInterfaces(parameters, contractsFolderPath, ramlItem, model, contractsFolderItem, extensionPath);

            AddOrUpdateControllerImplementations(parameters, contractsFolderPath, proj, model, contractsFolderItem, extensionPath);
        }
        private bool IsNetCoreApiExplorerInstalled()
        {
            var dte                   = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj                  = VisualStudioAutomationHelper.GetActiveProject(dte);
            var componentModel        = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
            var installerServices     = componentModel.GetService <IVsPackageInstallerServices>();
            var isWebApiCoreInstalled = installerServices.IsPackageInstalled(proj, "RAML.NetCoreApiExplorer");

            return(isWebApiCoreInstalled);
        }
        private static bool IsWebApiCoreInstalled()
        {
            var dte                   = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj                  = VisualStudioAutomationHelper.GetActiveProject(dte);
            var componentModel        = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
            var installerServices     = componentModel.GetService <IVsPackageInstallerServices>();
            var isWebApiCoreInstalled = installerServices.IsPackageInstalled(proj, "Microsoft.AspNet.WebApi.Core");

            return(isWebApiCoreInstalled);
        }
Ejemplo n.º 17
0
        private static bool IsAspNet5OrWebApiCoreInstalled()
        {
            var proj = VisualStudioAutomationHelper.GetActiveProject(_dte);

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj))
            {
                return(CommandsUtil.IsAspNet5MvcInstalled(proj));
            }

            return(CommandsUtil.IsWebApiCoreInstalled(proj));
        }
Ejemplo n.º 18
0
        private static ProjectItem GetDestinationFolderItem(string wszInputFilePath, System.IServiceProvider globalProvider)
        {
            var destFolderName    = Path.GetFileNameWithoutExtension(wszInputFilePath);
            var dte               = globalProvider.GetService(typeof(SDTE)) as DTE;
            var proj              = VisualStudioAutomationHelper.GetActiveProject(dte);
            var apiRefsFolderItem =
                proj.ProjectItems.Cast <ProjectItem>().First(i => i.Name == RamlReferenceService.ApiReferencesFolderName);
            var destFolderItem = apiRefsFolderItem.ProjectItems.Cast <ProjectItem>().First(i => i.Name == destFolderName);

            return(destFolderItem);
        }
Ejemplo n.º 19
0
        private bool IsWebApiExplorerInstalled()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            var proj                  = VisualStudioAutomationHelper.GetActiveProject(_dte);
            var componentModel        = (IComponentModel)Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel));
            var installerServices     = componentModel.GetService <IVsPackageInstallerServices>();
            var isWebApiCoreInstalled = installerServices.IsPackageInstalled(proj, "RAML.WebApiExplorer");

            return(isWebApiCoreInstalled);
        }
Ejemplo n.º 20
0
        private RamlPreviewViewModel(IServiceProvider serviceProvider, string ramlTitle, bool useBasicAuth, string username, string password)
        {
            ServiceProvider = serviceProvider;
            RamlTitle       = ramlTitle;
            var dte = serviceProvider.GetService(typeof(SDTE)) as DTE;

            Projects          = VisualStudioAutomationHelper.GetProjects(dte);
            activeProjectName = VisualStudioAutomationHelper.GetActiveProject(dte).Name;
            this.useBasicAuth = useBasicAuth;
            this.username     = username;
            this.password     = password;
        }
        private static bool IsAspNet5OrWebApiCoreInstalled()
        {
            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                return(IsAspNet5MvcInstalled(proj));
            }

            return(IsWebApiCoreInstalled(proj));
        }
Ejemplo n.º 22
0
        private static bool IsAspNet5OrWebApiCoreInstalled()
        {
            var dte  = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj))
            {
                return(CommandsUtil.IsAspNet5MvcInstalled(proj));
            }

            return(CommandsUtil.IsWebApiCoreInstalled(proj));
        }
        public static CodeRegenerationResult RegenerateCode(string ramlFilePath, string extensionPath)
        {
            var containingFolder = Path.GetDirectoryName(ramlFilePath);
            var refFilePath      = InstallerServices.GetRefFilePath(ramlFilePath);

            var ramlSource = RamlReferenceReader.GetRamlSource(refFilePath);

            if (string.IsNullOrWhiteSpace(ramlSource))
            {
                ramlSource = ramlFilePath;
            }

            var clientRootClassName = RamlReferenceReader.GetClientRootClassName(refFilePath);

            var globalProvider = ServiceProvider.GlobalProvider;
            var destFolderItem = GetDestinationFolderItem(ramlFilePath, globalProvider);
            var result         = UpdateRamlAndIncludedFiles(ramlFilePath, destFolderItem, ramlSource, containingFolder);

            if (!result.IsSuccess)
            {
                return(CodeRegenerationResult.Error("Error when tryng to download " + ramlSource + " - Status Code: " + Enum.GetName(typeof(HttpStatusCode), result.StatusCode)));
            }


            var dte  = ServiceProvider.GlobalProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            var apiRefsFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar +
                                    RamlReferenceServiceBase.ApiReferencesFolderName + Path.DirectorySeparatorChar;

            TemplatesManager.CopyClientTemplateToProjectFolder(apiRefsFolderPath);

            var ramlInfo = RamlInfoService.GetRamlInfo(ramlFilePath);

            if (ramlInfo.HasErrors)
            {
                return(CodeRegenerationResult.Error(ramlInfo.ErrorMessage));
            }

            var res = GenerateCodeUsingTemplate(ramlFilePath, ramlInfo, globalProvider, refFilePath, clientRootClassName, extensionPath);

            if (res.HasErrors)
            {
                return(CodeRegenerationResult.Error(res.Errors));
            }


            var content = TemplatesManager.AddClientMetadataHeader(res.Content);

            return(CodeRegenerationResult.Success(content));
        }
        public static ReverseEngineeringServiceBase GetReverseEngineeringService(ServiceProvider serviceProvider)
        {
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            ReverseEngineeringServiceBase service;

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj))
            {
                service = new ReverseEngineeringAspNetCore(serviceProvider);
            }
            else
            {
                service = new ReverseEngineeringServiceWebApi(serviceProvider);
            }
            return(service);
        }
        public static RamlReferenceServiceBase GetRamlReferenceService(ServiceProvider serviceProvider, ILogger logger)
        {
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            RamlReferenceServiceBase service;

            if (VisualStudioAutomationHelper.IsAVisualStudio2015Project(proj))
            {
                service = new RamlReferenceServiceNetCore(serviceProvider, logger);
            }
            else
            {
                service = new RamlReferenceServiceNetFramework(serviceProvider, logger);
            }
            return(service);
        }
        public static RamlScaffoldServiceBase GetRamlScaffoldService(ServiceProvider serviceProvider)
        {
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            RamlScaffoldServiceBase service;

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj))
            {
                service = new RamlScaffoldServiceAspNetCore(new T4Service(serviceProvider), serviceProvider);
            }
            else
            {
                service = new RamlScaffoldServiceWebApi(new T4Service(serviceProvider), serviceProvider);
            }
            return(service);
        }
Ejemplo n.º 27
0
        public void AddContract(RamlChooserActionParams parameters)
        {
            var dte                 = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj                = VisualStudioAutomationHelper.GetActiveProject(dte);
            var folderItem          = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, folderName);
            var generatedFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + folderName + Path.DirectorySeparatorChar;

            if (string.IsNullOrWhiteSpace(parameters.RamlSource) && !string.IsNullOrWhiteSpace(parameters.RamlTitle))
            {
                AddEmptyContract(parameters.TargetFileName, parameters.RamlTitle, folderItem, generatedFolderPath, parameters.TargetNamespace, parameters.TargetFileName);
            }
            else
            {
                AddContractFromFile(parameters.RamlFilePath, parameters.TargetNamespace, parameters.RamlSource,
                                    parameters.DoNotScaffold, folderItem, generatedFolderPath, parameters.TargetFileName);
            }
        }
        public static UnitTestsScaffoldServiceBase GetScaffoldService(Microsoft.VisualStudio.Shell.ServiceProvider serviceProvider)
        {
            Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            UnitTestsScaffoldServiceBase service;

            if (VisualStudioAutomationHelper.IsANetCoreProject(proj))
            {
                service = new UnitTestsScaffoldServiceAspNetCore(new T4Service(serviceProvider), serviceProvider);
            }
            else
            {
                service = new UnitTestsScaffoldServiceAspNetWebApi(new T4Service(serviceProvider), serviceProvider);
            }
            return(service);
        }
Ejemplo n.º 29
0
        public void Scaffold(string ramlSource, string targetNamespace, string ramlFileName)
        {
            var data = RamlScaffolderHelper.GetRamlData(ramlSource, targetNamespace);

            if (data == null || data.Model == null)
            {
                return;
            }

            var model = data.Model;

            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);

            var folderItem          = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, folderName);
            var ramlItem            = folderItem.ProjectItems.Cast <ProjectItem>().First(i => i.Name == ramlFileName);
            var generatedFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + folderName + Path.DirectorySeparatorChar;

            var vsixPath      = Path.GetDirectoryName(GetType().Assembly.Location) + Path.DirectorySeparatorChar;
            var templatesPath = vsixPath + "Templates" + Path.DirectorySeparatorChar + "RAMLWebApi2Scaffolder" + Path.DirectorySeparatorChar;

            // Add / Update model objects
            ReplaceTemplateValues(templatesPath, vsixPath, ObjectTemplateName + ".t4", targetNamespace);
            GenerateCodeFromTemplate(Path.Combine(templatesPath, ObjectTemplateName + ".cs.t4"), ramlItem,
                                     "apiObject", model.Objects.Values, generatedFolderPath, folderItem);

            // Add / Update controllers definition
            ReplaceTemplateValues(templatesPath, vsixPath, ControllerDeclarationTemplateName + ".t4", targetNamespace);
            GenerateCodeFromTemplate(Path.Combine(templatesPath, ControllerDeclarationTemplateName + ".cs.t4"), ramlItem,
                                     "controllerObject", model.Controllers, generatedFolderPath, folderItem, "Controller");

            // Add / Update controllers interface
            ReplaceTemplateValues(templatesPath, vsixPath, ControllerInterfaceTemplateName + ".t4", targetNamespace);
            GenerateCodeFromTemplate(Path.Combine(templatesPath, ControllerInterfaceTemplateName + ".cs.t4"), ramlItem,
                                     "controllerObject", model.Controllers, generatedFolderPath, folderItem, "Controller", true, "I");

            // Add controllers implementation
            var controllersFolderItem = VisualStudioAutomationHelper.AddFolderIfNotExists(proj, "Controllers");
            var controllersFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + "Controllers" + Path.DirectorySeparatorChar;

            ReplaceTemplateValues(templatesPath, vsixPath, ControllerImplementationTemplateName + ".t4", targetNamespace);
            GenerateCodeFromTemplate(Path.Combine(templatesPath, ControllerImplementationTemplateName + ".cs.t4"), controllersFolderItem,
                                     "controllerObject", model.Controllers, controllersFolderPath, folderItem, "Controller", false);
        }
Ejemplo n.º 30
0
        public void UpdateRaml(string ramlFilePath)
        {
            var dte  = serviceProvider.GetService(typeof(SDTE)) as DTE;
            var proj = VisualStudioAutomationHelper.GetActiveProject(dte);
            var generatedFolderPath = Path.GetDirectoryName(proj.FullName) + Path.DirectorySeparatorChar + ContractsFolderName + Path.DirectorySeparatorChar;

            var refFilePath        = InstallerServices.GetRefFilePath(ramlFilePath);
            var includesFolderPath = generatedFolderPath + Path.DirectorySeparatorChar + InstallerServices.IncludesFolderName;
            var ramlSource         = RamlReferenceReader.GetRamlSource(refFilePath);
            var includesManager    = new RamlIncludesManager();
            var result             = includesManager.Manage(ramlSource, includesFolderPath, generatedFolderPath + Path.DirectorySeparatorChar);

            if (result.IsSuccess)
            {
                File.WriteAllText(ramlFilePath, result.ModifiedContents);
                var targetNamespace = RamlReferenceReader.GetRamlNamespace(refFilePath);
                var useAsyncMethods = RamlReferenceReader.GetRamlUseAsyncMethods(refFilePath);
                Scaffold(ramlFilePath, targetNamespace, Path.GetFileName(ramlFilePath).ToLowerInvariant(), useAsyncMethods);
            }
        }