/// <summary>
        /// </summary>
        private async void GenerateCode() {
            var outputPath = txtOutputDirectory.Text;
            var progress = new Progress<ProgressResult>(ReportProgress);
            var schema = await ProcessInputFile();
            var tableCount = schema.Tables.Count;

            progressBar.Maximum = 3 + (3 * tableCount) + (2 * tableCount);

            schema.Tables.ForEach(x => x.Initialize(schema.Database));

            var database = schema.Database;
            if (database.ProviderFolder.IsEmpty()) {
                database.ProviderFolder = Database.DefaultProviderFolder;
            }

            var generatorContent = new ContractClassGenerator(schema);
            var generatorDatabaseHelper = new DatabaseHelperGenerator(schema);
            var generatorDTO = new DataTransferObjectGenerator(schema);
            var generatorMetaData = new MetaDataGenerator(schema);
            var generatorProvider = new ProviderClassGenerator(schema);
            var generatorSelection = new SelectionBuilderGenerator(schema);
            var generatorUriType = new UriTypeGenerator(schema);

            var contentResult = await generatorContent.Generate(outputPath, progress);
            var databaseResult = await generatorDatabaseHelper.Generate(outputPath, progress);
            var dtoResult = await generatorDTO.Generate(outputPath, progress);
            var metaResult = await generatorMetaData.Generate(outputPath, progress);
            var providerResult = await generatorProvider.Generate(outputPath, progress);
            var selectionResult = await generatorSelection.Generate(outputPath, progress);
            var uriResult = await generatorUriType.Generate(outputPath, progress);

            FileUtils.SaveFile(contentResult.Path, contentResult.Content);
            FileUtils.SaveFile(databaseResult.Path, databaseResult.Content);
            FileUtils.SaveFile(dtoResult.Path, dtoResult.Content);
            FileUtils.SaveFile(metaResult.Path, metaResult.Content);
            FileUtils.SaveFile(providerResult.Path, providerResult.Content);
            FileUtils.SaveFile(selectionResult.Path, selectionResult.Content);
            FileUtils.SaveFile(uriResult.Path, uriResult.Content);

            End();
        }