@@ -82,23 +82,64 @@ public ExtractCommand()
82
82
// pull all apis from service
83
83
string apis = await apiExtractor . GetAPIsAsync ( sourceApim , resourceGroup ) ;
84
84
JObject oApi = JObject . Parse ( apis ) ;
85
+
86
+ // Generate folders based on all apiversionset
87
+ var apiDictionary = new Dictionary < string , List < string > > ( ) ;
85
88
for ( int i = 0 ; i < ( ( JContainer ) oApi [ "value" ] ) . Count ; i ++ )
86
89
{
87
- string apiName = ( ( JValue ) oApi [ "value" ] [ i ] [ "name" ] ) . Value . ToString ( ) ;
88
-
89
- // create folder for each API
90
- string apiFileFolder = String . Concat ( @dirName , $@ "/{ apiName } ") ;
91
- System . IO . Directory . CreateDirectory ( apiFileFolder ) ;
92
-
93
- // generate templates for each API
94
- await this . GenerateTemplates ( sourceApim , destinationApim , apiName , resourceGroup , policyXMLBaseUrl , apiFileFolder , linkedBaseUrl , linkedUrlQueryString , fileNameGenerator , fileNames , fileWriter ) ;
90
+ string apiDisplayName = ( ( JValue ) oApi [ "value" ] [ i ] [ "properties" ] [ "displayName" ] ) . Value . ToString ( ) ;
91
+ if ( ! apiDictionary . ContainsKey ( apiDisplayName ) )
92
+ {
93
+ List < string > apiVersionSet = new List < string > ( ) ;
94
+ apiVersionSet . Add ( ( ( JValue ) oApi [ "value" ] [ i ] [ "name" ] ) . Value . ToString ( ) ) ;
95
+ apiDictionary [ apiDisplayName ] = apiVersionSet ;
96
+ }
97
+ else
98
+ {
99
+ apiDictionary [ apiDisplayName ] . Add ( ( ( JValue ) oApi [ "value" ] [ i ] [ "name" ] ) . Value . ToString ( ) ) ;
100
+ }
101
+ }
95
102
96
- Console . WriteLine ( $@ "Finish extracting API { apiName } ") ;
103
+ // Generate templates based on each API/APIversionSet
104
+ foreach ( KeyValuePair < string , List < string > > versionSetEntry in apiDictionary )
105
+ {
106
+ string apiFileFolder = dirName ;
107
+
108
+ // Check if it's APIVersionSet
109
+ if ( versionSetEntry . Value . Count > 1 )
110
+ {
111
+ // this API has VersionSet
112
+ string apiDisplayName = versionSetEntry . Key ;
113
+
114
+ // create apiVersionSet folder
115
+ apiFileFolder = String . Concat ( @apiFileFolder , $@ "/{ apiDisplayName } ") ;
116
+ System . IO . Directory . CreateDirectory ( apiFileFolder ) ;
117
+
118
+ // create master templates for each apiVersionSet
119
+ string versionSetFolder = String . Concat ( @apiFileFolder , fileNames . versionSetMasterFolder ) ;
120
+ System . IO . Directory . CreateDirectory ( versionSetFolder ) ;
121
+ await this . GenerateTemplates ( sourceApim , destinationApim , null , versionSetEntry . Value , resourceGroup , policyXMLBaseUrl , versionSetFolder , linkedBaseUrl , linkedUrlQueryString , fileNameGenerator , fileNames , fileWriter ) ;
122
+
123
+ Console . WriteLine ( $@ "Finish extracting APIVersionSet { versionSetEntry . Key } ") ;
124
+ }
125
+
126
+ // Generate templates
127
+ foreach ( string apiName in versionSetEntry . Value )
128
+ {
129
+ // create folder for each API
130
+ string tempFileFolder = String . Concat ( @apiFileFolder , $@ "/{ apiName } ") ;
131
+ System . IO . Directory . CreateDirectory ( tempFileFolder ) ;
132
+
133
+ // generate templates for each API
134
+ await this . GenerateTemplates ( sourceApim , destinationApim , apiName , null , resourceGroup , policyXMLBaseUrl , tempFileFolder , linkedBaseUrl , linkedUrlQueryString , fileNameGenerator , fileNames , fileWriter ) ;
135
+
136
+ Console . WriteLine ( $@ "Finish extracting API { apiName } ") ;
137
+ }
97
138
}
98
139
}
99
140
else
100
141
{
101
- await this . GenerateTemplates ( sourceApim , destinationApim , singleApiName , resourceGroup , policyXMLBaseUrl , dirName , linkedBaseUrl , linkedUrlQueryString , fileNameGenerator , fileNames , fileWriter ) ;
142
+ await this . GenerateTemplates ( sourceApim , destinationApim , singleApiName , null , resourceGroup , policyXMLBaseUrl , dirName , linkedBaseUrl , linkedUrlQueryString , fileNameGenerator , fileNames , fileWriter ) ;
102
143
}
103
144
Console . WriteLine ( "Templates written to output location" ) ;
104
145
Console . WriteLine ( "Press any key to exit process:" ) ;
@@ -113,7 +154,7 @@ public ExtractCommand()
113
154
}
114
155
} ) ;
115
156
}
116
- private async Task < Boolean > GenerateTemplates ( string sourceApim , string destinationApim , string singleApiName , string resourceGroup , string policyXMLBaseUrl , string dirName , string linkedBaseUrl , string linkedUrlQueryString , FileNameGenerator fileNameGenerator , FileNames fileNames , FileWriter fileWriter )
157
+ private async Task < Boolean > GenerateTemplates ( string sourceApim , string destinationApim , string singleApiName , List < string > multipleApiNams , string resourceGroup , string policyXMLBaseUrl , string dirName , string linkedBaseUrl , string linkedUrlQueryString , FileNameGenerator fileNameGenerator , FileNames fileNames , FileWriter fileWriter )
117
158
{
118
159
// initialize entity extractor classes
119
160
APIExtractor apiExtractor = new APIExtractor ( fileWriter ) ;
@@ -129,7 +170,7 @@ private async Task<Boolean> GenerateTemplates(string sourceApim, string destinat
129
170
130
171
// extract templates from apim service
131
172
Template globalServicePolicyTemplate = await policyExtractor . GenerateGlobalServicePolicyTemplateAsync ( sourceApim , resourceGroup , policyXMLBaseUrl , dirName ) ;
132
- Template apiTemplate = await apiExtractor . GenerateAPIsARMTemplateAsync ( sourceApim , resourceGroup , singleApiName , policyXMLBaseUrl , dirName ) ;
173
+ Template apiTemplate = await apiExtractor . GenerateAPIsARMTemplateAsync ( sourceApim , resourceGroup , singleApiName , multipleApiNams , policyXMLBaseUrl , dirName ) ;
133
174
List < TemplateResource > apiTemplateResources = apiTemplate . resources . ToList ( ) ;
134
175
Template apiVersionSetTemplate = await apiVersionSetExtractor . GenerateAPIVersionSetsARMTemplateAsync ( sourceApim , resourceGroup , singleApiName , apiTemplateResources , policyXMLBaseUrl ) ;
135
176
Template authorizationServerTemplate = await authorizationServerExtractor . GenerateAuthorizationServersARMTemplateAsync ( sourceApim , resourceGroup , singleApiName , apiTemplateResources , policyXMLBaseUrl ) ;
0 commit comments