2525using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Policy ;
2626using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . ProductApis ;
2727using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Products ;
28+ using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Schemas ;
2829using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . TagApi ;
2930using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Common . Templates . Tags ;
3031using Microsoft . Azure . Management . ApiManagement . ArmTemplates . Extractor . EntityExtractors . Abstractions ;
@@ -64,6 +65,7 @@ public class ExtractorExecutor
6465 readonly IGatewayApiExtractor gatewayApiExtractor ;
6566 readonly IIdentityProviderExtractor identityProviderExtractor ;
6667 readonly IApiManagementServiceExtractor apiManagementServiceExtractor ;
68+ readonly ISchemaExtractor schemaExtractor ;
6769
6870 public ExtractorExecutor (
6971 ILogger < ExtractorExecutor > logger ,
@@ -86,7 +88,8 @@ public ExtractorExecutor(
8688 IGatewayExtractor gatewayExtractor ,
8789 IGatewayApiExtractor gatewayApiExtractor ,
8890 IIdentityProviderExtractor identityProviderExtractor ,
89- IApiManagementServiceExtractor apiManagementServiceExtractor )
91+ IApiManagementServiceExtractor apiManagementServiceExtractor ,
92+ ISchemaExtractor schemaExtractor )
9093 {
9194 this . logger = logger ;
9295 this . apisClient = apisClient ;
@@ -109,6 +112,7 @@ public ExtractorExecutor(
109112 this . gatewayApiExtractor = gatewayApiExtractor ;
110113 this . identityProviderExtractor = identityProviderExtractor ;
111114 this . apiManagementServiceExtractor = apiManagementServiceExtractor ;
115+ this . schemaExtractor = schemaExtractor ;
112116 }
113117
114118 /// <summary>
@@ -136,7 +140,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
136140 IGatewayExtractor gatewayExtractor = null ,
137141 IGatewayApiExtractor gatewayApiExtractor = null ,
138142 IIdentityProviderExtractor identityProviderExtractor = null ,
139- IApiManagementServiceExtractor apiManagementServiceExtractor = null )
143+ IApiManagementServiceExtractor apiManagementServiceExtractor = null ,
144+ ISchemaExtractor schemaExtractor = null )
140145 => new ExtractorExecutor (
141146 logger ,
142147 apisClient ,
@@ -158,7 +163,8 @@ public static ExtractorExecutor BuildExtractorExecutor(
158163 gatewayExtractor ,
159164 gatewayApiExtractor ,
160165 identityProviderExtractor ,
161- apiManagementServiceExtractor ) ;
166+ apiManagementServiceExtractor ,
167+ schemaExtractor ) ;
162168
163169 public void SetExtractorParameters ( ExtractorParameters extractorParameters )
164170 {
@@ -453,7 +459,8 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
453459 NamedValuesResources namedValuesTemplateResources = null ,
454460 TagTemplateResources tagTemplateResources = null ,
455461 GroupTemplateResources groupTemplateResources = null ,
456- IdentityProviderResources identityProviderTemplateResources = null )
462+ IdentityProviderResources identityProviderTemplateResources = null ,
463+ SchemaTemplateResources schemaTemplateResources = null )
457464 {
458465 if ( string . IsNullOrEmpty ( this . extractorParameters . LinkedTemplatesBaseUrl ) )
459466 {
@@ -467,7 +474,7 @@ public async Task<Template<MasterTemplateResources>> GenerateMasterTemplateAsync
467474 this . extractorParameters , apiTemplateResources , policyTemplateResources , apiVersionSetTemplateResources ,
468475 productsTemplateResources , productApisTemplateResources , apiTagsTemplateResources , loggersTemplateResources ,
469476 backendsTemplateResources , authorizationServersTemplateResources , namedValuesTemplateResources , tagTemplateResources ,
470- groupTemplateResources , identityProviderTemplateResources ) ;
477+ groupTemplateResources , identityProviderTemplateResources , schemaTemplateResources ) ;
471478
472479 if ( masterTemplate ? . HasResources ( ) == true )
473480 {
@@ -751,6 +758,29 @@ await FileWriter.SaveAsJsonAsync(
751758 return apiManagementServiceTemplate ;
752759 }
753760
761+ /// <summary>
762+ /// Generates schema templates in the desired folder
763+ /// </summary>
764+ /// <param name="baseFilesGenerationDirectory">name of base folder where to save output files</param>
765+ /// <returns>generated schemas template</returns>
766+ public async Task < Template < SchemaTemplateResources > > GenerateSchemasTemplateAsync ( string baseFilesGenerationDirectory )
767+ {
768+ this . logger . LogInformation ( "Started generation of schemas template..." ) ;
769+
770+ var schemasTemplate = await this . schemaExtractor . GenerateSchemasTemplateAsync ( this . extractorParameters ) ;
771+
772+ if ( schemasTemplate ? . HasResources ( ) == true )
773+ {
774+ await FileWriter . SaveAsJsonAsync (
775+ schemasTemplate ,
776+ directory : baseFilesGenerationDirectory ,
777+ fileName : this . extractorParameters . FileNames . Schema ) ;
778+ }
779+
780+ this . logger . LogInformation ( "Finished generation of schemas template..." ) ;
781+ return schemasTemplate ;
782+ }
783+
754784 /// <summary>
755785 /// Generates split api templates / folders for each api in this sourceApim
756786 /// </summary>
@@ -931,6 +961,7 @@ async Task GenerateTemplates(
931961 var backendTemplate = await this . GenerateBackendTemplateAsync ( singleApiName , apiTemplate . TypedResources . GetAllPolicies ( ) , namedValueTemplate . TypedResources . NamedValues , baseFilesGenerationDirectory ) ;
932962 var groupTemplate = await this . GenerateGroupsTemplateAsync ( baseFilesGenerationDirectory ) ;
933963 var identityProviderTemplate = await this . GenerateIdentityProviderTemplateAsync ( baseFilesGenerationDirectory ) ;
964+ var schemasTempate = await this . GenerateSchemasTemplateAsync ( baseFilesGenerationDirectory ) ;
934965 await this . GenerateGatewayTemplateAsync ( singleApiName , baseFilesGenerationDirectory ) ;
935966 await this . GenerateGatewayApiTemplateAsync ( singleApiName , multipleApiNames , baseFilesGenerationDirectory ) ;
936967 await this . GenerateApiManagementServiceTemplate ( baseFilesGenerationDirectory ) ;
@@ -950,7 +981,8 @@ await this.GenerateMasterTemplateAsync(
950981 namedValuesTemplateResources : namedValueTemplate . TypedResources ,
951982 tagTemplateResources : tagTemplate . TypedResources ,
952983 groupTemplateResources : groupTemplate . TypedResources ,
953- identityProviderTemplateResources : identityProviderTemplate . TypedResources ) ;
984+ identityProviderTemplateResources : identityProviderTemplate . TypedResources ,
985+ schemaTemplateResources : schemasTempate . TypedResources ) ;
954986 }
955987
956988
0 commit comments