Exemplo n.º 1
0
        public void TestAddGeneratedClientCode_PassesServiceConfigOptionsToCodeGenerator(
            bool useDSC, bool ignoreUnexpected, bool enableNamingAlias,
            string namespacePrefix, bool makeTypesInternal)
        {
            var handlerHelper  = new TestConnectedServiceHandlerHelper();
            var codeGenFactory = new TestODataT4CodeGeneratorFactory();

            var serviceConfig = new ServiceConfigurationV4()
            {
                UseDataServiceCollection = useDSC,
                IgnoreUnexpectedElementsAndAttributes = ignoreUnexpected,
                EnableNamingAlias = enableNamingAlias,
                NamespacePrefix   = namespacePrefix,
                MakeTypesInternal = makeTypesInternal,
                IncludeT4File     = false
            };
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, "TestService", codeGenFactory, handlerHelper);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();

            var generator = codeGenFactory.LastCreatedInstance;

            Assert.AreEqual(useDSC, generator.UseDataServiceCollection);
            Assert.AreEqual(enableNamingAlias, generator.EnableNamingAlias);
            Assert.AreEqual(ignoreUnexpected, generator.IgnoreUnexpectedElementsAndAttributes);
            Assert.AreEqual(makeTypesInternal, generator.MakeTypesInternal);
            Assert.AreEqual(namespacePrefix, generator.NamespacePrefix);
            Assert.AreEqual(MetadataUri, generator.MetadataDocumentUri);
            Assert.AreEqual(ODataT4CodeGenerator.LanguageOption.CSharp, generator.TargetLanguage);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Create the service configuration according to the edmx version.
        /// </summary>
        /// <returns>If the edm version is less than 4.0, returns a ServiceConfiguration, else, returns ServiceConfigurationV4</returns>
        private ServiceConfiguration CreateServiceConfiguration()
        {
            ServiceConfiguration serviceConfiguration;

            if (ConfigODataEndpointViewModel.EdmxVersion == Common.Constants.EdmxVersion4)
            {
                var ServiceConfigurationV4 = new ServiceConfigurationV4();
                ServiceConfigurationV4.IgnoreUnexpectedElementsAndAttributes = AdvancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes;
                ServiceConfigurationV4.EnableNamingAlias = AdvancedSettingsViewModel.EnableNamingAlias;
                ServiceConfigurationV4.IncludeT4File     = AdvancedSettingsViewModel.IncludeT4File;
                serviceConfiguration = ServiceConfigurationV4;
            }
            else
            {
                serviceConfiguration = new ServiceConfiguration();
            }

            serviceConfiguration.ServiceName = ConfigODataEndpointViewModel.ServiceName;
            serviceConfiguration.Endpoint    = ConfigODataEndpointViewModel.Endpoint;
            serviceConfiguration.EdmxVersion = ConfigODataEndpointViewModel.EdmxVersion;
            serviceConfiguration.UseDataServiceCollection = AdvancedSettingsViewModel.UseDataServiceCollection;
            serviceConfiguration.GeneratedFileNamePrefix  = AdvancedSettingsViewModel.GeneratedFileName;
            serviceConfiguration.UseNameSpacePrefix       = AdvancedSettingsViewModel.UseNamespacePrefix;
            if (AdvancedSettingsViewModel.UseNamespacePrefix && !string.IsNullOrEmpty(AdvancedSettingsViewModel.NamespacePrefix))
            {
                serviceConfiguration.NamespacePrefix = AdvancedSettingsViewModel.NamespacePrefix;
            }

            return(serviceConfiguration);
        }
Exemplo n.º 3
0
        public void Test_GeneratesAndSavesCodeFileWithoutProxy()
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                UseDataServiceCollection = false,
                ServiceName             = serviceName,
                GeneratedFileNamePrefix = "MyFile",
                IncludeT4File           = false,
                Endpoint = "http://localhost:9000"
            };


            var testT4Factory = new TestODataT4NetworkCodeGeneratorFactory();

            testT4Factory.EDMX = ODataT4CodeGeneratorTestDescriptors.Simple.Metadata;

            var handlerHelper = new TestConnectedServiceHandlerHelper();

            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName,
                                                           testT4Factory, handlerHelper);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();
            using (var reader = new StreamReader(handlerHelper.AddedFileInputFileName))
            {
                var generatedCode = reader.ReadToEnd();
                ODataT4CodeGeneratorTestDescriptors.Simple.Verify(generatedCode, true /*isCSharp*/, false /*useDSC*/);
                var requestGenerator = (TestODataT4NetworkCodeGeneratorFactory.TestHttpCreator)ODataT4CodeGenerator.CodeGenerationContext.RequestCreator;
                var proxy            = requestGenerator.mock.Object.Proxy;
                Assert.IsNull(proxy);
                Assert.AreEqual(Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "MyFile.cs"),
                                handlerHelper.AddedFileTargetFilePath);
            }
        }
Exemplo n.º 4
0
        public override async Task <ConnectedServiceInstance> GetFinishedServiceInstanceAsync()
        {
            // ensure that the data has been loaded from wizard pages and saved to UserSettings
            if (this.Context.IsUpdating)
            {
                if (!this.OperationImportsViewModel.IsEntered)
                {
                    await this.OperationImportsViewModel.OnPageEnteringAsync(null);

                    await this.OperationImportsViewModel.OnPageLeavingAsync(null);
                }

                if (!this.SchemaTypesViewModel.IsEntered)
                {
                    await this.SchemaTypesViewModel.OnPageEnteringAsync(null);

                    await this.SchemaTypesViewModel.OnPageLeavingAsync(null);
                }

                if (!this.AdvancedSettingsViewModel.IsEntered)
                {
                    await this.AdvancedSettingsViewModel.OnPageEnteringAsync(null);

                    await this.AdvancedSettingsViewModel.OnPageLeavingAsync(null);
                }
            }

            this.UserSettings.Save();
            this.ServiceInstance.InstanceId           = AdvancedSettingsViewModel.GeneratedFileNamePrefix;
            this.ServiceInstance.Name                 = ConfigODataEndpointViewModel.ServiceName;
            this.ServiceInstance.MetadataTempFilePath = ConfigODataEndpointViewModel.MetadataTempPath;
            this.ServiceInstance.ServiceConfig        = this.CreateServiceConfiguration();

            return(await Task.FromResult <ConnectedServiceInstance>(this.ServiceInstance));
        }
Exemplo n.º 5
0
        public void TestDisableReaOonlyFieldsWhenUpdating()
        {
            ServiceConfigurationV4 savedConfig = GetTestConfig();
            var context = new TestConnectedServiceProviderContext(true, savedConfig);
            var wizard  = new ODataConnectedServiceWizard(context);

            // endpoint page
            var endpointPage = wizard.ConfigODataEndpointViewModel;

            endpointPage.OnPageEnteringAsync(new WizardEnteringArgs(null)).Wait();
            var endpointView = endpointPage.View as ConfigODataEndpoint;

            Assert.False(endpointView.ServiceName.IsEnabled);
            Assert.False(endpointView.Endpoint.IsEnabled);
            Assert.False(endpointView.OpenConnectedServiceJsonFileButton.IsEnabled);

            // if endpoint is a http address, then file dialog should be disabled
            savedConfig.Endpoint = "http://service";
            endpointPage.OnPageEnteringAsync(null).Wait();
            Assert.False(endpointView.OpenEndpointFileButton.IsEnabled);

            // advanced settings page
            var advancedPage = wizard.AdvancedSettingsViewModel;

            advancedPage.OnPageEnteringAsync(new WizardEnteringArgs(endpointPage)).Wait();
            var advancedView = advancedPage.View as AdvancedSettings;

            Assert.False(advancedView.IncludeT4File.IsEnabled);
            Assert.False(advancedView.GenerateMultipleFiles.IsEnabled);
        }
 public V4CodeGenDescriptor(ConnectedServiceHandlerContext context, Instance serviceInstance)
     : base(context, serviceInstance)
 {
     this.ClientNuGetPackageName = Common.Constants.V4ClientNuGetPackage;
     this.ClientDocUri           = Common.Constants.V4DocUri;
     this.ServiceConfiguration   = base.Instance.ServiceConfig as ServiceConfigurationV4;
 }
Exemplo n.º 7
0
        /// <summary>
        /// Create the service configuration according to the edmx version.
        /// </summary>
        /// <returns>If the edm version is less than 4.0, returns a ServiceConfiguration, else, returns ServiceConfigurationV4</returns>
        private ServiceConfiguration CreateServiceConfiguration()
        {
            ServiceConfiguration serviceConfiguration;

            if (ConfigODataEndpointViewModel.EdmxVersion == Constants.EdmxVersion4)
            {
                var serviceConfigurationV4 = new ServiceConfigurationV4();
                serviceConfigurationV4.CopyPropertiesFrom(UserSettings);

                serviceConfigurationV4.ExcludedOperationImports = OperationImportsViewModel.ExcludedOperationImportsNames.ToList();
                serviceConfigurationV4.ExcludedBoundOperations  = SchemaTypesViewModel.ExcludedBoundOperationsNames.ToList();

                serviceConfiguration = serviceConfigurationV4;
            }
            else
            {
                serviceConfiguration = new ServiceConfiguration();

                serviceConfiguration.CopyPropertiesFrom(UserSettings);
            }

            serviceConfiguration.ExcludedSchemaTypes = SchemaTypesViewModel.ExcludedSchemaTypeNames.ToList();
            serviceConfiguration.EdmxVersion         = ConfigODataEndpointViewModel.EdmxVersion;

            return(serviceConfiguration);
        }
Exemplo n.º 8
0
        public void TestCopyPropertiesFromUserSettingsToServiceConfiguration()
        {
            var userSettings = CreateUserSettings();

            var serviceConfig = new ServiceConfigurationV4();

            serviceConfig.CopyPropertiesFrom(userSettings);

            Assert.Equal("Key:Test", serviceConfig.CustomHttpHeaders);
            Assert.True(serviceConfig.EnableNamingAlias);
            Assert.Equal("http://test", serviceConfig.Endpoint);
            Assert.Single(serviceConfig.ExcludedBoundOperations, "TestBoundOperation");
            Assert.Single(serviceConfig.ExcludedOperationImports, "TestOperationImport");
            Assert.Single(serviceConfig.ExcludedSchemaTypes, "TestSchemaType");
            Assert.Equal("Test", serviceConfig.GeneratedFileNamePrefix);
            Assert.True(serviceConfig.GenerateMultipleFiles);
            Assert.True(serviceConfig.IgnoreUnexpectedElementsAndAttributes);
            Assert.True(serviceConfig.IncludeCustomHeaders);
            Assert.True(serviceConfig.IncludeT4File);
            Assert.True(serviceConfig.IncludeWebProxy);
            Assert.True(serviceConfig.IncludeWebProxyNetworkCredentials);
            Assert.True(serviceConfig.MakeTypesInternal);
            Assert.Equal("Test", serviceConfig.NamespacePrefix);
            Assert.True(serviceConfig.OpenGeneratedFilesInIDE);
            Assert.Equal("Test", serviceConfig.ServiceName);
            Assert.True(serviceConfig.UseDataServiceCollection);
            Assert.True(serviceConfig.UseNamespacePrefix);
            Assert.Equal("Test", serviceConfig.WebProxyHost);
            Assert.Equal("Test", serviceConfig.WebProxyNetworkCredentialsDomain);
            Assert.Equal("Test", serviceConfig.WebProxyNetworkCredentialsPassword);
            Assert.Equal("Test", serviceConfig.WebProxyNetworkCredentialsUsername);
        }
Exemplo n.º 9
0
        private async Task GenerateCodeForV4Clients(GenerateOptions generateOptions, IConsole console)
        {
            var serviceConfigurationV4 = new ServiceConfigurationV4();

            serviceConfigurationV4.Endpoint                              = generateOptions.MetadataUri;
            serviceConfigurationV4.ServiceName                           = Constants.DefaultServiceName;
            serviceConfigurationV4.GeneratedFileNamePrefix               = generateOptions.FileName;
            serviceConfigurationV4.CustomHttpHeaders                     = generateOptions.CustomHeaders;
            serviceConfigurationV4.WebProxyHost                          = generateOptions.WebProxyHost;
            serviceConfigurationV4.IncludeWebProxy                       = generateOptions.IncludeWebProxy;
            serviceConfigurationV4.IncludeWebProxyNetworkCredentials     = generateOptions.IncludeWebProxyNetworkCredentials;
            serviceConfigurationV4.WebProxyNetworkCredentialsUsername    = generateOptions.WebProxyNetworkCredentialsUsername;
            serviceConfigurationV4.WebProxyNetworkCredentialsPassword    = generateOptions.WebProxyNetworkCredentialsPassword;
            serviceConfigurationV4.WebProxyNetworkCredentialsDomain      = generateOptions.WebProxyNetworkCredentialsDomain;
            serviceConfigurationV4.NamespacePrefix                       = generateOptions.NamespacePrefix;
            serviceConfigurationV4.MakeTypesInternal                     = generateOptions.EnableInternal;
            serviceConfigurationV4.GenerateMultipleFiles                 = generateOptions.MultipleFiles;
            serviceConfigurationV4.ExcludedSchemaTypes                   = generateOptions.ExcludedSchemaTypes;
            serviceConfigurationV4.ExcludedBoundOperations               = generateOptions.ExcludedBoundOperations;
            serviceConfigurationV4.ExcludedOperationImports              = generateOptions.ExcludedOperationImports;
            serviceConfigurationV4.IgnoreUnexpectedElementsAndAttributes = generateOptions.IgnoreUnexpectedElements;
            serviceConfigurationV4.EnableNamingAlias                     = generateOptions.UpperCamelCase;

            Project project = ProjectHelper.CreateProjectInstance(generateOptions.OutputDir);
            BaseCodeGenDescriptor codeGenDescriptor = new CodeGenDescriptorFactory().Create(
                Constants.EdmxVersion4,
                new ODataCliFileHandler(new ODataCliMessageLogger(console), project),
                new ODataCliMessageLogger(console),
                new ODataCliPackageInstaller(project, new ODataCliMessageLogger(console)));
            await codeGenDescriptor.AddNugetPackagesAsync().ConfigureAwait(false);

            await codeGenDescriptor.AddGeneratedClientCodeAsync(generateOptions.MetadataUri, generateOptions.OutputDir, LanguageOption.GenerateCSharpCode, serviceConfigurationV4).ConfigureAwait(false);
        }
Exemplo n.º 10
0
        public TestConnectedServiceProviderContext(bool isUpdating = false, ServiceConfigurationV4 savedData = null) : base()
        {
            this.savedData = savedData;

            if (isUpdating)
            {
                UpdateContext = new ConnectedServiceUpdateContext(new Version(), new TestVsHierarchyItem());
            }
        }
Exemplo n.º 11
0
        public void TestAddGenerateClientCode_GeneratesMultipleFiles()
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                ServiceName             = serviceName,
                GeneratedFileNamePrefix = "Main",
                GenerateMultipleFiles   = true
            };

            var codeGen           = new TestODataT4CodeGenerator();
            var codeGenFactory    = new TestODataT4CodeGeneratorFactory(codeGen);
            var handlerHelper     = new TestConnectedServiceHandlerHelper();
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName,
                                                           codeGenFactory, handlerHelper);

            var template = new StringBuilder();

            codeGen.MultipleFilesManager = ODataT4CodeGenerator.FilesManager.Create(null, template);
            codeGen.MultipleFilesManager.StartNewFile("File1.cs", false);
            template.Append("Contents1");
            codeGen.MultipleFilesManager.EndBlock();

            codeGen.MultipleFilesManager.StartNewFile("File2.cs", false);
            template.Append("Contents2");
            codeGen.MultipleFilesManager.EndBlock();

            //The file manager expects the files to have been saved in the Temp directory
            // when ODataT4CodeGenerator.TransformText() was called. Since we're using a dummy code generator
            // we need to manually ensure those files exist
            var file1TempPath = Path.Combine(Path.GetTempPath(), "File1.cs");

            File.WriteAllText(file1TempPath, "Contents1");
            var file2TempPath = Path.Combine(Path.GetTempPath(), "File2.cs");

            File.WriteAllText(file2TempPath, "Contents2");

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();
            var expectedMainFilePath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Main.cs");
            var mainFile             = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedMainFilePath);

            Assert.IsNotNull(mainFile);
            Assert.AreEqual("Generated code", File.ReadAllText(mainFile.SourceFile));
            var expectedFile1Path = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "File1.cs");
            var file1             = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedFile1Path);

            Assert.IsNotNull(file1);
            Assert.AreEqual("Contents1", File.ReadAllText(file1.SourceFile));
            var expectedFile2Path = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "File2.cs");
            var file2             = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == expectedFile2Path);

            Assert.IsNotNull(file2);
            Assert.AreEqual("Contents2", File.ReadAllText(file2.SourceFile));
        }
Exemplo n.º 12
0
        public void TestAddGeneratedClientCode_GeneratesT4TemplateFiles_WithIncludeT4File_WithExcludedBoundOperations(string lang, string referenceFile)
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                ServiceName             = serviceName,
                Endpoint                = "https://service/$metadata",
                GeneratedFileNamePrefix = "Reference",
                IncludeT4File           = true,
                ExcludedBoundOperations = new List <string>()
                {
                    "BoundOperation1(Type1)",
                    "BoundOperation2(Type2)",
                    "BoundOperation3(Type1)"
                }
            };

            var codeGenFactory    = new TestODataT4CodeGeneratorFactory();
            var handlerHelper     = new TestConnectedServiceHandlerHelper();
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper,
                                                           lang == "cs" ? ODataT4CodeGenerator.LanguageOption.CSharp : ODataT4CodeGenerator.LanguageOption.VB);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();

            var ttIncludeSourcePath   = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenerator.ttinclude");
            var ttIncludeOutputPath   = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.ttinclude");
            var fileManagerSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenFilesManager.ttinclude");
            var fileManagerOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "ODataT4CodeGenFilesManager.ttinclude");
            var ttOutputPath          = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.tt");
            var csdlFileName          = String.Concat(serviceName, "Csdl.xml");

            Assert.IsTrue(handlerHelper.AddedFiles.Contains((fileManagerOutputPath, fileManagerSourcePath)));
            var ttInclude = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttIncludeOutputPath);

            Assert.IsNotNull(ttInclude);
            var ttIncludeOriginalText = File.ReadAllText(ttIncludeSourcePath);
            var ttIncludeExpectedText = ttIncludeOriginalText.Replace("output extension=\".cs\"", $"output extension=\".{lang}\"");
            var ttIncludeSavedText    = File.ReadAllText(ttInclude.SourceFile);

            Assert.AreEqual(ttIncludeExpectedText, ttIncludeSavedText);
            var tt = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttOutputPath);

            Assert.IsNotNull(tt);
            var ttExpectedText = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "CodeGeneration", referenceFile));

            ttExpectedText = ttExpectedText.Replace("$$CsdlFullPath$$", Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, csdlFileName));
            ttExpectedText = ttExpectedText.Replace("$$CsdlRelativePath$$", csdlFileName);
            ttExpectedText = Regex.Replace(ttExpectedText, "(public const string ExcludedBoundOperations = )\"\";", "$1\"" + string.Join(",", (serviceConfig as ServiceConfigurationV4).ExcludedBoundOperations) + "\";");
            var ttSavedText = File.ReadAllText(tt.SourceFile);

            Assert.AreEqual(ttExpectedText, ttSavedText);
        }
        public ODataConnectedServiceWizard(ConnectedServiceProviderContext context)
        {
            this.Context      = context;
            this.userSettings = UserSettings.Load(context.Logger);

            ConfigODataEndpointViewModel = new ConfigODataEndpointViewModel(this.userSettings);
            AdvancedSettingsViewModel    = new AdvancedSettingsViewModel();

            if (this.Context.IsUpdating)
            {
                //Since ServiceConfigurationV4 is a derived type of ServiceConfiguration. So we can deserialize a ServiceConfiguration into a ServiceConfigurationV4.
                ServiceConfigurationV4 serviceConfig = this.Context.GetExtendedDesignerData <ServiceConfigurationV4>();
                ConfigODataEndpointViewModel.Endpoint          = serviceConfig.Endpoint;
                ConfigODataEndpointViewModel.EdmxVersion       = serviceConfig.EdmxVersion;
                ConfigODataEndpointViewModel.ServiceName       = serviceConfig.ServiceName;
                ConfigODataEndpointViewModel.CustomHttpHeaders = serviceConfig.CustomHttpHeaders;
                var configODataEndpoint = (ConfigODataEndpointViewModel.View as ConfigODataEndpoint);
                configODataEndpoint.IsEnabled = false;

                //Restore the advanced settings to UI elements.
                AdvancedSettingsViewModel.PageEntering += (sender, args) =>
                {
                    var advancedSettingsViewModel = sender as AdvancedSettingsViewModel;
                    if (advancedSettingsViewModel != null)
                    {
                        AdvancedSettings advancedSettings = advancedSettingsViewModel.View as AdvancedSettings;

                        advancedSettingsViewModel.GeneratedFileName        = serviceConfig.GeneratedFileNamePrefix;
                        advancedSettings.ReferenceFileName.IsEnabled       = false;
                        advancedSettingsViewModel.UseNamespacePrefix       = serviceConfig.UseNameSpacePrefix;
                        advancedSettingsViewModel.NamespacePrefix          = serviceConfig.NamespacePrefix;
                        advancedSettingsViewModel.UseDataServiceCollection = serviceConfig.UseDataServiceCollection;
                        advancedSettingsViewModel.GenerateMultipleFiles    = serviceConfig.GenerateMultipleFiles;
                        advancedSettings.GenerateMultipleFiles.IsEnabled   = false;

                        if (serviceConfig.EdmxVersion == Common.Constants.EdmxVersion4)
                        {
                            advancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes = serviceConfig.IgnoreUnexpectedElementsAndAttributes;
                            advancedSettingsViewModel.EnableNamingAlias = serviceConfig.EnableNamingAlias;
                            advancedSettingsViewModel.IncludeT4File     = serviceConfig.IncludeT4File;
                            advancedSettingsViewModel.MakeTypesInternal = serviceConfig.MakeTypesInternal;
                            advancedSettings.IncludeT4File.IsEnabled    = false;
                        }
                    }
                };
            }

            this.Pages.Add(ConfigODataEndpointViewModel);
            this.Pages.Add(AdvancedSettingsViewModel);
            this.IsFinishEnabled = true;
        }
Exemplo n.º 14
0
        /// <summary>
        /// Create the service configuration according to the edmx version.
        /// </summary>
        /// <returns>If the edm version is less than 4.0, returns a ServiceConfiguration, else, returns ServiceConfigurationV4</returns>
        private ServiceConfiguration CreateServiceConfiguration()
        {
            ServiceConfiguration serviceConfiguration;

            if (ConfigODataEndpointViewModel.EdmxVersion == Common.Constants.EdmxVersion4)
            {
                var serviceConfigurationV4 = new ServiceConfigurationV4
                {
                    ExcludedOperationImports = OperationImportsViewModel.ExcludedOperationImportsNames.ToList(),
                    ExcludedBoundOperations  = SchemaTypesViewModel.ExcludedBoundOperationsNames.ToList(),
                    IgnoreUnexpectedElementsAndAttributes =
                        AdvancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes,
                    EnableNamingAlias       = AdvancedSettingsViewModel.EnableNamingAlias,
                    IncludeT4File           = AdvancedSettingsViewModel.IncludeT4File,
                    OpenGeneratedFilesInIDE = AdvancedSettingsViewModel.OpenGeneratedFilesInIDE
                };
                serviceConfiguration = serviceConfigurationV4;
            }
            else
            {
                serviceConfiguration = new ServiceConfiguration();
            }

            serviceConfiguration.ExcludedSchemaTypes = SchemaTypesViewModel.ExcludedSchemaTypeNames.ToList();
            serviceConfiguration.ServiceName         = ConfigODataEndpointViewModel.ServiceName;
            serviceConfiguration.Endpoint            = ConfigODataEndpointViewModel.Endpoint;
            serviceConfiguration.EdmxVersion         = ConfigODataEndpointViewModel.EdmxVersion;
            serviceConfiguration.CustomHttpHeaders   = ConfigODataEndpointViewModel.CustomHttpHeaders;
            serviceConfiguration.IncludeWebProxy     = ConfigODataEndpointViewModel.IncludeWebProxy;
            serviceConfiguration.WebProxyHost        = ConfigODataEndpointViewModel.WebProxyHost;
            serviceConfiguration.IncludeWebProxyNetworkCredentials  = ConfigODataEndpointViewModel.IncludeWebProxyNetworkCredentials;
            serviceConfiguration.WebProxyNetworkCredentialsUsername = ConfigODataEndpointViewModel.WebProxyNetworkCredentialsUsername;
            serviceConfiguration.WebProxyNetworkCredentialsPassword = ConfigODataEndpointViewModel.WebProxyNetworkCredentialsPassword;
            serviceConfiguration.WebProxyNetworkCredentialsDomain   = ConfigODataEndpointViewModel.WebProxyNetworkCredentialsDomain;
            serviceConfiguration.IncludeCustomHeaders     = ConfigODataEndpointViewModel.IncludeCustomHeaders;
            serviceConfiguration.UseDataServiceCollection = AdvancedSettingsViewModel.UseDataServiceCollection;
            serviceConfiguration.GeneratedFileNamePrefix  = AdvancedSettingsViewModel.GeneratedFileNamePrefix;
            serviceConfiguration.UseNamespacePrefix       = AdvancedSettingsViewModel.UseNamespacePrefix;
            serviceConfiguration.MakeTypesInternal        = AdvancedSettingsViewModel.MakeTypesInternal;
            serviceConfiguration.OpenGeneratedFilesInIDE  = AdvancedSettingsViewModel.OpenGeneratedFilesInIDE;
            serviceConfiguration.GenerateMultipleFiles    = AdvancedSettingsViewModel.GenerateMultipleFiles;

            if (AdvancedSettingsViewModel.UseNamespacePrefix && !string.IsNullOrEmpty(AdvancedSettingsViewModel.NamespacePrefix))
            {
                serviceConfiguration.NamespacePrefix = AdvancedSettingsViewModel.NamespacePrefix;
            }

            return(serviceConfiguration);
        }
Exemplo n.º 15
0
 internal static IEdmModel GetODataEdmModel(this ServiceConfigurationV4 serviceConfiguration, ConnectedServiceHandlerContext context = null)
 {
     using (var reader = serviceConfiguration.GetXmlReaderForEndpoint())
     {
         var edmxReaderSettings = new CsdlReaderSettings
         {
             IgnoreUnexpectedAttributesAndElements = serviceConfiguration.IgnoreUnexpectedElementsAndAttributes
         };
         if (!CsdlReader.TryParse(reader, Enumerable.Empty <IEdmModel>(), edmxReaderSettings, out var model, out var parseErrors))
         {
             if (context != null)
             {
                 foreach (var error in parseErrors)
                 {
                     var task = context.Logger.WriteMessageAsync(LoggerMessageCategory.Warning,
                                                                 error.ErrorMessage);
                     task.RunSynchronously();
                 }
             }
         }
Exemplo n.º 16
0
        public ODataConnectedServiceWizard(ConnectedServiceProviderContext context)
        {
            this.Context      = context;
            this.UserSettings = UserSettings.Load(context?.Logger);

            // Since ServiceConfigurationV4 is a derived type of ServiceConfiguration. So we can deserialize a ServiceConfiguration into a ServiceConfigurationV4.
            this._serviceConfig = this.Context?.GetExtendedDesignerData <ServiceConfigurationV4>();

            ConfigODataEndpointViewModel = new ConfigODataEndpointViewModel(this.UserSettings, this);
            AdvancedSettingsViewModel    = new AdvancedSettingsViewModel(this.UserSettings);
            SchemaTypesViewModel         = new SchemaTypesViewModel(this.UserSettings);
            OperationImportsViewModel    = new OperationImportsViewModel(this.UserSettings);

            OperationImportsViewModel.PageEntering += OperationImportsViewModel_PageEntering;

            SchemaTypesViewModel.PageEntering += SchemaTypeSelectionViewModel_PageEntering;
            SchemaTypesViewModel.PageLeaving  += SchemaTypeSelectionViewModel_PageLeaving;
            if (this.Context != null && this.Context.IsUpdating)
            {
                ConfigODataEndpointViewModel.Endpoint          = this._serviceConfig?.Endpoint;
                ConfigODataEndpointViewModel.EdmxVersion       = this._serviceConfig?.EdmxVersion;
                ConfigODataEndpointViewModel.ServiceName       = this._serviceConfig?.ServiceName;
                ConfigODataEndpointViewModel.CustomHttpHeaders = this._serviceConfig?.CustomHttpHeaders;

                // Restore the main settings to UI elements.
                ConfigODataEndpointViewModel.PageEntering += ConfigODataEndpointViewModel_PageEntering;

                // The ViewModel should always be filled otherwise if the wizard is completed without visiting this page the generated code becomes wrong
                AdvancedSettingsViewModel_PageEntering(AdvancedSettingsViewModel, EventArgs.Empty);

                // Restore the advanced settings to UI elements.
                AdvancedSettingsViewModel.PageEntering += AdvancedSettingsViewModel_PageEntering;
            }

            this.Pages.Add(ConfigODataEndpointViewModel);
            this.Pages.Add(SchemaTypesViewModel);
            this.Pages.Add(OperationImportsViewModel);
            this.Pages.Add(AdvancedSettingsViewModel);
            this.IsFinishEnabled = true;
        }
Exemplo n.º 17
0
        /// <summary>
        /// Create the service configuration according to the edmx version.
        /// </summary>
        /// <returns>If the edm version is less than 4.0, returns a ServiceConfiguration, else, returns ServiceConfigurationV4</returns>
        private ServiceConfiguration CreateServiceConfiguration()
        {
            ServiceConfiguration serviceConfiguration;

            if (ConfigODataEndpointViewModel.EdmxVersion == Common.Constants.EdmxVersion4)
            {
                serviceConfiguration = new ServiceConfigurationV4
                {
                    IgnoreUnexpectedElementsAndAttributes =
                        AdvancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes,
                    EnableNamingAlias = AdvancedSettingsViewModel.EnableNamingAlias,
                    IncludeT4File     = AdvancedSettingsViewModel.IncludeT4File
                };
            }
            else
            {
                serviceConfiguration = new ServiceConfigurationV3
                {
                    IncludeExtensionsT4File  = AdvancedSettingsViewModel.IncludeExtensionsT4File,
                    FunctionImportsGenerator = AdvancedSettingsViewModel.FunctionImportsGenerator,
                    GenerateFunctionImports  = AdvancedSettingsViewModel.GenerateFunctionImports
                };
            }

            serviceConfiguration.LanguageOption               = ConfigODataEndpointViewModel.UserSettings.LanguageOption;
            serviceConfiguration.ServiceName                  = ConfigODataEndpointViewModel.UserSettings.ServiceName;
            serviceConfiguration.Endpoint                     = ConfigODataEndpointViewModel.UserSettings.Endpoint;
            serviceConfiguration.EdmxVersion                  = ConfigODataEndpointViewModel.EdmxVersion;
            serviceConfiguration.UseDataServiceCollection     = AdvancedSettingsViewModel.UseDataServiceCollection;
            serviceConfiguration.GeneratedFileNamePrefix      = AdvancedSettingsViewModel.GeneratedFileName;
            serviceConfiguration.UseNameSpacePrefix           = AdvancedSettingsViewModel.UseNamespacePrefix;
            serviceConfiguration.OpenGeneratedFilesOnComplete = ConfigODataEndpointViewModel.UserSettings.OpenGeneratedFilesOnComplete;
            if (AdvancedSettingsViewModel.UseNamespacePrefix && !string.IsNullOrEmpty(AdvancedSettingsViewModel.NamespacePrefix))
            {
                serviceConfiguration.NamespacePrefix = AdvancedSettingsViewModel.NamespacePrefix;
            }

            return(serviceConfiguration);
        }
Exemplo n.º 18
0
        public ODataConnectedServiceWizard(ConnectedServiceProviderContext context)
        {
            Context = context;
            // We only use most recently used endpoints from the config file saved in user's isolated storage
            // The UserSettings constructor will load those endpoints
            UserSettings = new UserSettings(context?.Logger);

            // Since ServiceConfigurationV4 is a derived type of ServiceConfiguration,
            // we can deserialize a ServiceConfiguration into a ServiceConfigurationV4.
            ServiceConfig = Context?.GetExtendedDesignerData <ServiceConfigurationV4>();

            ConfigODataEndpointViewModel = new ConfigODataEndpointViewModel(UserSettings);
            AdvancedSettingsViewModel    = new AdvancedSettingsViewModel(UserSettings);
            SchemaTypesViewModel         = new SchemaTypesViewModel(UserSettings);
            OperationImportsViewModel    = new OperationImportsViewModel(UserSettings);

            OperationImportsViewModel.PageEntering += OperationImportsViewModel_PageEntering;
            SchemaTypesViewModel.PageEntering      += SchemaTypeSelectionViewModel_PageEntering;
            SchemaTypesViewModel.PageLeaving       += SchemaTypeSelectionViewModel_PageLeaving;

            if (Context != null && Context.IsUpdating)
            {
                LoadUserSettingsFromServiceConfig();
                ConfigODataEndpointViewModel.EdmxVersion = ServiceConfig?.EdmxVersion;

                // Restore the main settings to UI elements.
                ConfigODataEndpointViewModel.PageEntering += ConfigODataEndpointViewModel_PageEntering;
                // The ViewModel should always be filled otherwise if the wizard is completed without visiting this page the generated code becomes wrong
                AdvancedSettingsViewModel_PageEntering(AdvancedSettingsViewModel, EventArgs.Empty);
                // Restore the advanced settings to UI elements.
                AdvancedSettingsViewModel.PageEntering += AdvancedSettingsViewModel_PageEntering;
            }

            Pages.Add(ConfigODataEndpointViewModel);
            Pages.Add(SchemaTypesViewModel);
            Pages.Add(OperationImportsViewModel);
            Pages.Add(AdvancedSettingsViewModel);
            IsFinishEnabled = true;
        }
Exemplo n.º 19
0
        public void TestAddGeneratedClientCode_GeneratesCsdlFiles(string lang)
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                ServiceName             = serviceName,
                Endpoint                = "https://service/$metadata",
                GeneratedFileNamePrefix = "Reference",
                IncludeT4File           = true
            };

            var codeGenFactory    = new TestODataT4CodeGeneratorFactory();
            var handlerHelper     = new TestConnectedServiceHandlerHelper();
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper,
                                                           lang == "cs" ? ODataT4CodeGenerator.LanguageOption.CSharp : ODataT4CodeGenerator.LanguageOption.VB);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();

            var csdlFilePath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, String.Concat(serviceName, "Csdl.xml"));

            Assert.IsNotNull(csdlFilePath);
        }
Exemplo n.º 20
0
        private static ServiceConfigurationV4 CreateServiceConfiguration()
        {
            var serviceConfig = new ServiceConfigurationV4();

            serviceConfig.CustomHttpHeaders       = "Key:Test";
            serviceConfig.EdmxVersion             = new Version(4, 0, 0, 0);
            serviceConfig.EnableNamingAlias       = true;
            serviceConfig.Endpoint                = "http://test";
            serviceConfig.ExcludedBoundOperations = new List <string> {
                "TestBoundOperation"
            };
            serviceConfig.ExcludedOperationImports = new List <string> {
                "TestOperationImport"
            };
            serviceConfig.ExcludedSchemaTypes = new List <string> {
                "TestSchemaType"
            };
            serviceConfig.GeneratedFileNamePrefix = "Test";
            serviceConfig.GenerateMultipleFiles   = true;
            serviceConfig.IgnoreUnexpectedElementsAndAttributes = true;
            serviceConfig.IncludeCustomHeaders = true;
            serviceConfig.IncludeT4File        = true;
            serviceConfig.IncludeWebProxy      = true;
            serviceConfig.IncludeWebProxyNetworkCredentials = true;
            serviceConfig.MakeTypesInternal                  = true;
            serviceConfig.NamespacePrefix                    = "Test";
            serviceConfig.OpenGeneratedFilesInIDE            = true;
            serviceConfig.ServiceName                        = "Test";
            serviceConfig.UseDataServiceCollection           = true;
            serviceConfig.UseNamespacePrefix                 = true;
            serviceConfig.WebProxyHost                       = "Test";
            serviceConfig.WebProxyNetworkCredentialsDomain   = "Test";
            serviceConfig.WebProxyNetworkCredentialsPassword = "******";
            serviceConfig.WebProxyNetworkCredentialsUsername = "******";

            return(serviceConfig);
        }
Exemplo n.º 21
0
        public void TestAddGeneratedClientCode_GeneratesAndSavesCodeFile()
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                MakeTypesInternal        = true,
                UseDataServiceCollection = false,
                ServiceName             = serviceName,
                GeneratedFileNamePrefix = "MyFile",
                IncludeT4File           = false
            };
            var handlerHelper     = new TestConnectedServiceHandlerHelper();
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName,
                                                           new TestODataT4CodeGeneratorFactory(), handlerHelper);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();
            using (var reader = new StreamReader(handlerHelper.AddedFileInputFileName))
            {
                var generatedCode = reader.ReadToEnd();
                Assert.AreEqual("Generated code", generatedCode);
                Assert.AreEqual(Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "MyFile.cs"),
                                handlerHelper.AddedFileTargetFilePath);
            }
        }
Exemplo n.º 22
0
        private async Task AddGeneratedCodeAsync(string metadata, string outputDirectory, LanguageOption languageOption, ServiceConfiguration serviceConfiguration)
        {
            await MessageLogger.WriteMessageAsync(LogMessageCategory.Information, "Generating Client Proxy for OData V4...");

            ServiceConfigurationV4 servConfiguration = serviceConfiguration as ServiceConfigurationV4;
            ODataT4CodeGenerator   t4CodeGenerator   = CodeGeneratorFactory.Create();

            t4CodeGenerator.MetadataDocumentUri      = metadata;
            t4CodeGenerator.UseDataServiceCollection = servConfiguration.UseDataServiceCollection;
            t4CodeGenerator.TargetLanguage           =
                languageOption == LanguageOption.GenerateCSharpCode
                    ? ODataT4CodeGenerator.LanguageOption.CSharp
                    : ODataT4CodeGenerator.LanguageOption.VB;
            t4CodeGenerator.IgnoreUnexpectedElementsAndAttributes = servConfiguration.IgnoreUnexpectedElementsAndAttributes;
            t4CodeGenerator.EnableNamingAlias        = servConfiguration.EnableNamingAlias;
            t4CodeGenerator.NamespacePrefix          = servConfiguration.NamespacePrefix;
            t4CodeGenerator.MakeTypesInternal        = servConfiguration.MakeTypesInternal;
            t4CodeGenerator.GenerateMultipleFiles    = servConfiguration.GenerateMultipleFiles;
            t4CodeGenerator.ExcludedOperationImports = servConfiguration.ExcludedOperationImports;
            t4CodeGenerator.ExcludedBoundOperations  = servConfiguration.ExcludedBoundOperations;
            t4CodeGenerator.ExcludedSchemaTypes      = servConfiguration.ExcludedSchemaTypes;
            var headers = new List <string>();

            if (servConfiguration.CustomHttpHeaders != null)
            {
                var headerElements = servConfiguration.CustomHttpHeaders.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var headerElement in headerElements)
                {
                    // Trim header for empty spaces
                    var header = headerElement.Trim();
                    headers.Add(header);
                }
            }
            t4CodeGenerator.CustomHttpHeaders = headers;
            t4CodeGenerator.IncludeWebProxy   = servConfiguration.IncludeWebProxy;
            t4CodeGenerator.WebProxyHost      = servConfiguration.WebProxyHost;
            t4CodeGenerator.IncludeWebProxyNetworkCredentials  = servConfiguration.IncludeWebProxyNetworkCredentials;
            t4CodeGenerator.WebProxyNetworkCredentialsUsername = servConfiguration.WebProxyNetworkCredentialsUsername;
            t4CodeGenerator.WebProxyNetworkCredentialsPassword = servConfiguration.WebProxyNetworkCredentialsPassword;
            t4CodeGenerator.WebProxyNetworkCredentialsDomain   = servConfiguration.WebProxyNetworkCredentialsDomain;

            var tempFile        = Path.GetTempFileName();
            var referenceFolder = outputDirectory;

            // Csdl file name is this format [ServiceName]Csdl.xml
            var csdlFileName = string.Concat(servConfiguration.ServiceName, Common.Constants.CsdlFileNameSuffix);
            var metadataFile = Path.Combine(referenceFolder, csdlFileName);
            await FileHandler.AddFileAsync(tempFile, metadataFile, new ODataFileOptions { SuppressOverwritePrompt = true });

            FileHandler.SetFileAsEmbeddedResource(csdlFileName);
            t4CodeGenerator.EmitContainerPropertyAttribute = FileHandler.EmitContainerPropertyAttribute();

            t4CodeGenerator.MetadataFilePath         = metadataFile;
            t4CodeGenerator.MetadataFileRelativePath = csdlFileName;

            using (StreamWriter writer = File.CreateText(tempFile))
            {
                await writer.WriteAsync(t4CodeGenerator.TransformText());

                await writer.FlushAsync();

                if (t4CodeGenerator.Errors != null && t4CodeGenerator.Errors.Count > 0)
                {
                    foreach (var err in t4CodeGenerator.Errors)
                    {
                        await MessageLogger.WriteMessageAsync(LogMessageCategory.Warning, err.ToString()).ConfigureAwait(false);
                    }
                }
            }

            var outputFile = Path.Combine(referenceFolder, $"{this.GeneratedFileNamePrefix(servConfiguration.GeneratedFileNamePrefix)}{(languageOption == LanguageOption.GenerateCSharpCode ? ".cs" : ".vb")}");
            await FileHandler.AddFileAsync(tempFile, outputFile, new ODataFileOptions { SuppressOverwritePrompt = true });

            t4CodeGenerator.MultipleFilesManager?.GenerateFiles(servConfiguration.GenerateMultipleFiles, FileHandler, MessageLogger, referenceFolder, true, servConfiguration.OpenGeneratedFilesInIDE);
            await MessageLogger.WriteMessageAsync(LogMessageCategory.Information, "Client Proxy for OData V4 was generated.");
        }
        public ODataConnectedServiceWizard(ConnectedServiceProviderContext context)
        {
            this.Context      = context;
            this.UserSettings = UserSettings.Load(context.Logger);

            ConfigODataEndpointViewModel = new ConfigODataEndpointViewModel(this.UserSettings, this);
            AdvancedSettingsViewModel    = new AdvancedSettingsViewModel(this.UserSettings);
            OperationImportsViewModel    = new OperationImportsViewModel();

            ServiceConfigurationV4 serviceConfig = null;

            OperationImportsViewModel.PageEntering += ObjectSelectionViewModel_PageEntering;

            if (this.Context.IsUpdating)
            {
                //Since ServiceConfigurationV4 is a derived type of ServiceConfiguration. So we can deserialize a ServiceConfiguration into a ServiceConfigurationV4.
                serviceConfig = this.Context.GetExtendedDesignerData <ServiceConfigurationV4>();
                ConfigODataEndpointViewModel.Endpoint          = serviceConfig.Endpoint;
                ConfigODataEndpointViewModel.EdmxVersion       = serviceConfig.EdmxVersion;
                ConfigODataEndpointViewModel.ServiceName       = serviceConfig.ServiceName;
                ConfigODataEndpointViewModel.CustomHttpHeaders = serviceConfig.CustomHttpHeaders;



                // The ViewModel should always be filled otherwise if the wizard is completed without visiting this page the generated code becomes wrong
                AdvancedSettingsViewModel.UseNamespacePrefix       = serviceConfig.UseNamespacePrefix;
                AdvancedSettingsViewModel.NamespacePrefix          = serviceConfig.NamespacePrefix;
                AdvancedSettingsViewModel.UseDataServiceCollection = serviceConfig.UseDataServiceCollection;

                if (serviceConfig.EdmxVersion == Common.Constants.EdmxVersion4)
                {
                    AdvancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes =
                        serviceConfig.IgnoreUnexpectedElementsAndAttributes;
                    AdvancedSettingsViewModel.EnableNamingAlias = serviceConfig.EnableNamingAlias;
                    AdvancedSettingsViewModel.IncludeT4File     = serviceConfig.IncludeT4File;
                    AdvancedSettingsViewModel.MakeTypesInternal = serviceConfig.MakeTypesInternal;
                }


                ConfigODataEndpointViewModel.PageEntering += (sender, args) =>
                {
                    var configOdataViewModel = sender as ConfigODataEndpointViewModel;
                    if (configOdataViewModel != null)
                    {
                        var configOdataView = configOdataViewModel.View as ConfigODataEndpoint;
                        configOdataView.Endpoint.IsEnabled = false;
                        configOdataView.OpenConnectedServiceJsonFileButton.IsEnabled = false;
                        configOdataView.OpenEndpointFileButton.IsEnabled             = !serviceConfig.Endpoint.StartsWith("http");
                        configOdataView.ServiceName.IsEnabled     = false;
                        configOdataViewModel.IncludeCustomHeaders = serviceConfig.IncludeCustomHeaders;
                        configOdataViewModel.IncludeWebProxy      = serviceConfig.IncludeWebProxy;
                        configOdataViewModel.WebProxyHost         = serviceConfig.WebProxyHost;

                        configOdataViewModel.IncludeWebProxyNetworkCredentials = serviceConfig.IncludeWebProxyNetworkCredentials;
                        configOdataViewModel.WebProxyNetworkCredentialsDomain  = serviceConfig.WebProxyNetworkCredentialsDomain;

                        // don't accept any credentials from the restored settings
                        configOdataViewModel.WebProxyNetworkCredentialsUsername = null;
                        configOdataViewModel.WebProxyNetworkCredentialsPassword = null;
                    }
                };


                //Restore the advanced settings to UI elements.
                AdvancedSettingsViewModel.PageEntering += (sender, args) =>
                {
                    if (sender is AdvancedSettingsViewModel advancedSettingsViewModel)
                    {
                        if (advancedSettingsViewModel.View is AdvancedSettings advancedSettings)
                        {
                            advancedSettingsViewModel.GeneratedFileNamePrefix  = serviceConfig.GeneratedFileNamePrefix;
                            advancedSettings.ReferenceFileName.IsEnabled       = false;
                            advancedSettingsViewModel.UseNamespacePrefix       = serviceConfig.UseNamespacePrefix;
                            advancedSettingsViewModel.NamespacePrefix          = serviceConfig.NamespacePrefix;
                            advancedSettingsViewModel.UseDataServiceCollection = serviceConfig.UseDataServiceCollection;
                            advancedSettingsViewModel.GenerateMultipleFiles    = serviceConfig.GenerateMultipleFiles;
                            advancedSettings.GenerateMultipleFiles.IsEnabled   = false;

                            if (serviceConfig.EdmxVersion == Common.Constants.EdmxVersion4)
                            {
                                advancedSettingsViewModel.IgnoreUnexpectedElementsAndAttributes = serviceConfig.IgnoreUnexpectedElementsAndAttributes;
                                advancedSettingsViewModel.EnableNamingAlias = serviceConfig.EnableNamingAlias;
                                advancedSettingsViewModel.IncludeT4File     = serviceConfig.IncludeT4File;
                                advancedSettingsViewModel.MakeTypesInternal = serviceConfig.MakeTypesInternal;
                                advancedSettings.IncludeT4File.IsEnabled    = false;
                            }
                        }
                    }
                };
            }

            this.Pages.Add(ConfigODataEndpointViewModel);
            this.Pages.Add(OperationImportsViewModel);
            this.Pages.Add(AdvancedSettingsViewModel);
            this.IsFinishEnabled = true;
        }
Exemplo n.º 24
0
        public void TestAddGeneratedClientCode_GeneratesT4Templates_AllSettingsSet()
        {
            var serviceName = "MyService";
            ServiceConfiguration serviceConfig = new ServiceConfigurationV4()
            {
                EdmxVersion          = Common.Constants.EdmxVersion4,
                ServiceName          = serviceName,
                IncludeT4File        = true,
                Endpoint             = "https://service/$metadata",
                IncludeCustomHeaders = true,
                CustomHttpHeaders    = "Key1:val\nKey2:val2",
                IncludeWebProxy      = true,
                WebProxyHost         = "http://localhost:8080",
                IncludeWebProxyNetworkCredentials  = true,
                WebProxyNetworkCredentialsDomain   = "domain",
                WebProxyNetworkCredentialsUsername = "******",
                WebProxyNetworkCredentialsPassword = "******",
                ExcludedSchemaTypes = new List <string>()
                {
                    "Namespace.Type1", "Namespace.Type2", "Namespace.Type3"
                },
                ExcludedOperationImports = new List <string>()
                {
                    "Operation1", "Operation2"
                },
                GeneratedFileNamePrefix  = "Reference",
                UseNamespacePrefix       = true,
                UseDataServiceCollection = true,
                NamespacePrefix          = "MyNamespace",
                EnableNamingAlias        = true,
                GenerateMultipleFiles    = true,
                MakeTypesInternal        = true,
                IgnoreUnexpectedElementsAndAttributes = true,
                OpenGeneratedFilesInIDE = true
            };

            var codeGenFactory    = new TestODataT4CodeGeneratorFactory();
            var handlerHelper     = new TestConnectedServiceHandlerHelper();
            var codeGenDescriptor = SetupCodeGenDescriptor(serviceConfig, serviceName, codeGenFactory, handlerHelper);

            codeGenDescriptor.AddGeneratedClientCodeAsync().Wait();

            var ttIncludeSourcePath   = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenerator.ttinclude");
            var ttIncludeOutputPath   = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.ttinclude");
            var fileManagerSourcePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "ODataT4CodeGenFilesManager.ttinclude");
            var fileManagerOutputPath = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "ODataT4CodeGenFilesManager.ttinclude");
            var ttOutputPath          = Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Reference.tt");

            Assert.IsTrue(handlerHelper.AddedFiles.Contains((fileManagerOutputPath, fileManagerSourcePath)));
            var ttInclude = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttIncludeOutputPath);

            Assert.IsNotNull(ttInclude);
            var ttIncludeOriginalText = File.ReadAllText(ttIncludeSourcePath);
            var ttIncludeSavedText    = File.ReadAllText(ttInclude.SourceFile);

            Assert.AreEqual(ttIncludeOriginalText, ttIncludeSavedText);
            var tt = handlerHelper.AddedFiles.FirstOrDefault(f => f.CreatedFile == ttOutputPath);

            Assert.IsNotNull(tt);
            var ttExpectedText = File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "CodeGeneration", "TestConfigAllOptionsSet.txt"));

            ttExpectedText = ttExpectedText.Replace("$$CsdlFullPath$$", Path.Combine(TestProjectRootPath, ServicesRootFolder, serviceName, "Csdl.xml"));
            var ttSavedText = File.ReadAllText(tt.SourceFile);

            Assert.AreEqual(ttExpectedText, ttSavedText);
        }
Exemplo n.º 25
0
 public override void SetExtendedDesignerData <TData>(TData data)
 {
     savedData = data as ServiceConfigurationV4;
 }
        /// <summary>
        /// Create the service configuration according to the edmx version.
        /// </summary>
        /// <returns>If the edm version is less than 4.0, returns a ServiceConfiguration, else, returns ServiceConfigurationV4</returns>
        private ServiceConfiguration CreateServiceConfiguration()
        {
            ServiceConfiguration serviceConfiguration;

            if (ConfigODataEndpointViewModel.EdmxVersion == Common.Constants.EdmxVersion4)
            {
                serviceConfiguration = new ServiceConfigurationV4
                {
                    IgnoreUnexpectedElementsAndAttributes =
                        AdvancedSettingsViewModel.UserSettings.IgnoreUnexpectedElementsAndAttributes,
                    GenerateDynamicPropertiesCollection = AdvancedSettingsViewModel.UserSettings.GenerateDynamicPropertiesCollection,
                    DynamicPropertiesCollectionName     = AdvancedSettingsViewModel.UserSettings.DynamicPropertiesCollectionName,
                    EnableNamingAlias = AdvancedSettingsViewModel.UserSettings.EnableNamingAlias,
                    IncludeT4File     = AdvancedSettingsViewModel.UserSettings.IncludeT4File,
                    MakeTypesInternal = AdvancedSettingsViewModel.UserSettings.MakeTypesInternal
                };
            }
            else
            {
                serviceConfiguration = new ServiceConfigurationV3
                {
                    IncludeExtensionsT4File   = AdvancedSettingsViewModel.UserSettings.IncludeExtensionsT4File,
                    OperationImportsGenerator = AdvancedSettingsViewModel.UserSettings.OperationImportsGenerator,
                    GenerateOperationImports  = AdvancedSettingsViewModel.UserSettings.SelectOperationImports,
                    FunctionImports           = FunctionImportsViewModel.FunctionImports
                };
            }

            serviceConfiguration.LanguageOption = ConfigODataEndpointViewModel.UserSettings.LanguageOption;
            serviceConfiguration.ServiceName    = ConfigODataEndpointViewModel.UserSettings.ServiceName;
            serviceConfiguration.AcceptAllUntrustedCertificates = ConfigODataEndpointViewModel.UserSettings.AcceptAllUntrustedCertificates;
            serviceConfiguration.Endpoint    = ConfigODataEndpointViewModel.UserSettings.Endpoint;
            serviceConfiguration.EdmxVersion = ConfigODataEndpointViewModel.EdmxVersion;
            serviceConfiguration.UseDataServiceCollection      = AdvancedSettingsViewModel.UserSettings.UseDataServiceCollection;
            serviceConfiguration.UseAsyncDataServiceCollection = AdvancedSettingsViewModel.UserSettings.UseAsyncDataServiceCollection;
            serviceConfiguration.GeneratedFileNamePrefix       = AdvancedSettingsViewModel.UserSettings.GeneratedFileNamePrefix;
            serviceConfiguration.UseNameSpacePrefix            = AdvancedSettingsViewModel.UserSettings.UseNameSpacePrefix;
            serviceConfiguration.OpenGeneratedFilesOnComplete  = ConfigODataEndpointViewModel.UserSettings.OpenGeneratedFilesOnComplete;
            if (AdvancedSettingsViewModel.UserSettings.UseNameSpacePrefix && !string.IsNullOrEmpty(AdvancedSettingsViewModel.UserSettings.NamespacePrefix))
            {
                serviceConfiguration.NamespacePrefix = AdvancedSettingsViewModel.UserSettings.NamespacePrefix;
            }

            serviceConfiguration.ExcludedOperationImportsNames = AdvancedSettingsViewModel.UserSettings.ExcludedOperationImportsNames;
            serviceConfiguration.OperationImports = FunctionImportsViewModel.OperationImports;

            #region Network Credentials
            serviceConfiguration.UseNetworkCredentials =
                ConfigODataEndpointViewModel.UseNetworkCredentials;
            serviceConfiguration.NetworkCredentialsUserName =
                ConfigODataEndpointViewModel.NetworkCredentialsUserName;
            serviceConfiguration.NetworkCredentialsPassword =
                ConfigODataEndpointViewModel.NetworkCredentialsPassword;
            serviceConfiguration.NetworkCredentialsDomain =
                ConfigODataEndpointViewModel.NetworkCredentialsDomain;
            #endregion

            #region Web-proxy
            serviceConfiguration.UseWebProxy =
                ConfigODataEndpointViewModel.UseWebProxy;
            serviceConfiguration.UseWebProxyCredentials =
                ConfigODataEndpointViewModel.UseWebProxyCredentials;
            serviceConfiguration.WebProxyNetworkCredentialsUserName =
                ConfigODataEndpointViewModel.WebProxyNetworkCredentialsUserName;
            serviceConfiguration.WebProxyNetworkCredentialsPassword =
                ConfigODataEndpointViewModel.WebProxyNetworkCredentialsPassword;
            serviceConfiguration.WebProxyNetworkCredentialsDomain =
                ConfigODataEndpointViewModel.WebProxyNetworkCredentialsDomain;
            serviceConfiguration.WebProxyUri =
                ConfigODataEndpointViewModel.WebProxyUri;
            #endregion

            return(serviceConfiguration);
        }
Exemplo n.º 27
0
        private async Task AddT4FileAsync(string metadata, string outputDirectory, LanguageOption languageOption, ServiceConfigurationV4 serviceConfiguration)
        {
            await MessageLogger.WriteMessageAsync(LogMessageCategory.Information, "Adding T4 files for OData V4...");

            var t4IncludeTempFile = Path.GetTempFileName();
            var t4Folder          = Path.Combine(this.CurrentAssemblyPath, "Templates");

            var referenceFolder = outputDirectory;

            // generate .ttinclude
            using (StreamWriter writer = File.CreateText(t4IncludeTempFile))
            {
                var ttIncludeText = File.ReadAllText(Path.Combine(t4Folder, "ODataT4CodeGenerator.ttinclude"));
                if (languageOption == LanguageOption.GenerateVBCode)
                {
                    ttIncludeText = Regex.Replace(ttIncludeText, "(output extension=)\".cs\"", "$1\".vb\"");
                }
                await writer.WriteAsync(ttIncludeText);

                await writer.FlushAsync();
            }

            await FileHandler.AddFileAsync(t4IncludeTempFile, Path.Combine(referenceFolder, this.GeneratedFileNamePrefix(serviceConfiguration.GeneratedFileNamePrefix) + ".ttinclude"));

            await FileHandler.AddFileAsync(Path.Combine(t4Folder, "ODataT4CodeGenFilesManager.ttinclude"), Path.Combine(referenceFolder, "ODataT4CodeGenFilesManager.ttinclude"));

            var csdlTempFile = Path.GetTempFileName();

            // Csdl file name is this format [ServiceName]Csdl.xml
            var csdlFileName = string.Concat(serviceConfiguration.ServiceName, Common.Constants.CsdlFileNameSuffix);
            var metadataFile = Path.Combine(referenceFolder, csdlFileName);

            // When the T4 file is added to the target project, the proxy and metadata files
            // are not automatically generated. To avoid ending up with an empty metadata file with
            // warnings, we pre-populate it with the root element. The content will later be overwritten with the actual metadata when T4 template is run by the user.
            using (StreamWriter writer = File.CreateText(csdlTempFile))
            {
                await writer.WriteLineAsync("<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">");

                await writer.WriteLineAsync("</edmx:Edmx>");
            }

            await FileHandler.AddFileAsync(csdlTempFile, metadataFile, new ODataFileOptions { SuppressOverwritePrompt = true });

            FileHandler.SetFileAsEmbeddedResource(csdlFileName);

            var t4TempFile = Path.GetTempFileName();

            using (StreamWriter writer = File.CreateText(t4TempFile))
            {
                var text = File.ReadAllText(Path.Combine(t4Folder, "ODataT4CodeGenerator.tt"));

                text = Regex.Replace(text, "ODataT4CodeGenerator(\\.ttinclude)", this.GeneratedFileNamePrefix(serviceConfiguration.GeneratedFileNamePrefix) + "$1");
                text = Regex.Replace(text, "(public const string MetadataDocumentUri = )\"\";", "$1@\"" + serviceConfiguration.Endpoint + "\";");
                text = Regex.Replace(text, "(public const bool UseDataServiceCollection = ).*;", "$1" + serviceConfiguration.UseDataServiceCollection.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture) + ";");
                text = Regex.Replace(text, "(public const string NamespacePrefix = )\"\\$rootnamespace\\$\";", "$1\"" + serviceConfiguration.NamespacePrefix + "\";");
                if (languageOption == LanguageOption.GenerateCSharpCode)
                {
                    text = Regex.Replace(text, "(public const string TargetLanguage = )\"OutputLanguage\";",
                                         "$1\"CSharp\";");
                }
                else if (languageOption == LanguageOption.GenerateVBCode)
                {
                    text = Regex.Replace(text, "(public const string TargetLanguage = )\"OutputLanguage\";",
                                         "$1\"VB\";");
                }
                text = Regex.Replace(text, "(public const bool EnableNamingAlias = )true;", "$1" + serviceConfiguration.EnableNamingAlias.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture) + ";");
                text = Regex.Replace(text, "(public const bool IgnoreUnexpectedElementsAndAttributes = )true;", "$1" + serviceConfiguration.IgnoreUnexpectedElementsAndAttributes.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture) + ";");
                text = Regex.Replace(text, "(public const bool MakeTypesInternal = )false;", "$1" + serviceConfiguration.MakeTypesInternal.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture) + ";");
                text = Regex.Replace(text, "(public const bool GenerateMultipleFiles = )false;", "$1" + serviceConfiguration.GenerateMultipleFiles.ToString(CultureInfo.InvariantCulture).ToLower(CultureInfo.InvariantCulture) + ";");
                var customHeaders = serviceConfiguration.CustomHttpHeaders ?? "";
                text = Regex.Replace(text, "(public const string CustomHttpHeaders = )\"\";", "$1@\"" + customHeaders + "\";");
                text = Regex.Replace(text, "(public const string MetadataFilePath = )\"\";", "$1@\"" + metadataFile + "\";");
                text = Regex.Replace(text, "(public const string MetadataFileRelativePath = )\"\";", "$1@\"" + csdlFileName + "\";");
                if (serviceConfiguration.ExcludedOperationImports?.Any() == true)
                {
                    text = Regex.Replace(text, "(public const string ExcludedOperationImports = )\"\";", "$1\"" + string.Join(",", serviceConfiguration.ExcludedOperationImports) + "\";");
                }
                if (serviceConfiguration.ExcludedBoundOperations?.Any() == true)
                {
                    text = Regex.Replace(text, "(public const string ExcludedBoundOperations = )\"\";", "$1\"" + string.Join(",", serviceConfiguration.ExcludedBoundOperations) + "\";");
                }
                if (serviceConfiguration.ExcludedSchemaTypes?.Any() == true)
                {
                    text = Regex.Replace(text, "(public const string ExcludedSchemaTypes = )\"\";", "$1\"" + string.Join(",", serviceConfiguration.ExcludedSchemaTypes) + "\";");
                }
                await writer.WriteAsync(text);

                await writer.FlushAsync();
            }

            await FileHandler.AddFileAsync(t4TempFile, Path.Combine(referenceFolder, this.GeneratedFileNamePrefix(serviceConfiguration.GeneratedFileNamePrefix) + ".tt"));

            await MessageLogger.WriteMessageAsync(LogMessageCategory.Information, "T4 files for OData V4 were added.");
        }