Skip to content

Commit 61bf7cd

Browse files
committed
Add Parameter Cmdlets
1 parent b855ded commit 61bf7cd

File tree

42 files changed

+2262
-164
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2262
-164
lines changed

src/ServiceManagement/Compute/Commands.ServiceManagement.PlatformImageRepository/Automation/RunCodeGeneration.ps1

Lines changed: 108 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ ${operation_get_code}
202202
$st = Set-Content -Path $file_full_path -Value $cmdlet_source_code_text -Force;
203203
}
204204

205+
# Sample: InvokeAzureVirtualMachineGetMethod.cs
205206
function Write-OperationCmdletFile
206207
{
207208
param(
@@ -212,10 +213,10 @@ function Write-OperationCmdletFile
212213
$opShortName,
213214

214215
[Parameter(Mandatory = $True)]
215-
[System.Reflection.MethodInfo]$operationMethodInfo
216+
[System.Reflection.MethodInfo]$operation_method_info
216217
)
217218

218-
$methodName = ($operationMethodInfo.Name.Replace('Async', ''));
219+
$methodName = ($operation_method_info.Name.Replace('Async', ''));
219220
$cmdlet_verb = "Invoke";
220221
$cmdlet_noun_prefix = 'Azure';
221222
$cmdlet_noun_suffix = 'Method';
@@ -226,9 +227,9 @@ function Write-OperationCmdletFile
226227
$get_set_block = '{ get; set; }';
227228

228229
$cmdlet_generated_code = '';
229-
# $cmdlet_generated_code += $indents + '// ' + $operationMethodInfo + $new_line_str;
230+
# $cmdlet_generated_code += $indents + '// ' + $operation_method_info + $new_line_str;
230231

231-
$params = $operationMethodInfo.GetParameters();
232+
$params = $operation_method_info.GetParameters();
232233
[System.Collections.ArrayList]$param_names = @();
233234
foreach ($pt in $params)
234235
{
@@ -288,7 +289,95 @@ ${cmdlet_generated_code}
288289
$st = Set-Content -Path $file_full_path -Value $cmdlt_source_template -Force;
289290
}
290291

291-
# Code Generation Main:
292+
# Sample: VirtualMachineCreateParameters
293+
function Get-ClientComplexParameter
294+
{
295+
param(
296+
[Parameter(Mandatory = $True)]
297+
[System.Reflection.MethodInfo]$op_method_info,
298+
299+
[Parameter(Mandatory = $True)]
300+
[string]$client_name_space
301+
)
302+
303+
$params = $op_method_info.GetParameters();
304+
$params = $params | where { -not $_.ParameterType.IsEnum };
305+
306+
# Assume that each operation method has only one complext parameter type
307+
$param_info = $params | where { $_.ParameterType.Namespace -like "${client_name_space}.Model?" } | select -First 1;
308+
309+
return $param_info;
310+
}
311+
312+
# Sample: NewAzureVirtualMachineCreateParameters.cs
313+
function Write-ParameterCmdletFile
314+
{
315+
param(
316+
[Parameter(Mandatory = $True)]
317+
[string]$fileOutputFolder,
318+
319+
[Parameter(Mandatory = $True)]
320+
[string]$operation_short_name,
321+
322+
[Parameter(Mandatory = $True)]
323+
[System.Reflection.ParameterInfo]$parameter_info
324+
)
325+
326+
$param_type_full_name = $parameter_info.ParameterType.FullName;
327+
$param_type_short_name = $parameter_info.ParameterType.Name;
328+
if (($param_type_short_name -like "${operation_short_name}*") -and ($param_type_short_name.Length -gt $operation_short_name.Length))
329+
{
330+
# Remove the common part between the parameter type name and operation short name, e.g. 'VirtualMachineDisk'
331+
$param_type_short_name = $param_type_short_name.Substring($operation_short_name.Length);
332+
}
333+
334+
$cmdlet_verb = "New";
335+
$cmdlet_noun_prefix = 'Azure';
336+
$cmdlet_noun_suffix = '';
337+
338+
$cmdlet_noun = $cmdlet_noun_prefix + $operation_short_name + $param_type_short_name + $cmdlet_noun_suffix;
339+
$cmdlet_class_name = $cmdlet_verb + $cmdlet_noun;
340+
341+
# Construct Code Content
342+
$indents = " " * 8;
343+
$get_set_block = '{ get; set; }';
344+
345+
$cmdlet_generated_code = '';
346+
347+
$cmdlet_client_call_template =
348+
@"
349+
protected override void OnProcessRecord()
350+
{
351+
ServiceManagementProfile.Initialize();
352+
base.OnProcessRecord();
353+
var parameter = new ${param_type_full_name}();
354+
WriteObject(parameter);
355+
}
356+
"@;
357+
358+
$cmdlet_generated_code += $cmdlet_client_call_template;
359+
360+
$cmdlt_source_template =
361+
@"
362+
${code_common_header}
363+
364+
$code_using_strs
365+
366+
namespace ${code_common_namespace}
367+
{
368+
[Cmdlet(`"${cmdlet_verb}`", `"${cmdlet_noun}`")]
369+
public class ${cmdlet_class_name} : ComputeAutomationBaseCmdlet
370+
{
371+
${cmdlet_generated_code}
372+
}
373+
}
374+
"@;
375+
376+
$file_full_path = $fileOutputFolder + '/' + $cmdlet_class_name + '.cs';
377+
$st = Set-Content -Path $file_full_path -Value $cmdlt_source_template -Force;
378+
}
379+
380+
# Code Generation Main Run
292381
Write-Output $dllFolder;
293382
Write-Output $outFolder;
294383

@@ -323,7 +412,9 @@ else
323412
$clientClassType = $types | where { $_.Namespace -eq $dllname -and $_.Name -eq 'IComputeManagementClient' };
324413
Write-BaseCmdletFile $baseCmdletFileFullName $opNameList $clientClassType;
325414

326-
# Write Cmdlet Files
415+
[System.Reflection.ParameterInfo[]]$parameter_type_info_list = @();
416+
417+
# Write Operation Cmdlet Files
327418
foreach ($ft in $filtered_types)
328419
{
329420
Write-Output '=============================================';
@@ -340,6 +431,17 @@ else
340431
{
341432
Write-Output ($new_line_str + $mt.Name.Replace('Async', ''));
342433
Write-OperationCmdletFile $opOutFolder $opShortName $mt;
434+
435+
[System.Reflection.ParameterInfo]$parameter_type_info = (Get-ClientComplexParameter $mt $client_library_namespace);
436+
437+
if (($parameter_type_info -ne $null) -and (($parameter_type_info_list | where { $_.ParameterType.FullName -eq $parameter_type_info.FullName }).Count -eq 0))
438+
{
439+
$parameter_type_info_list += $parameter_type_info;
440+
441+
Write-Output '---------------------------------------------';
442+
Write-ParameterCmdletFile $opOutFolder $opShortName $parameter_type_info;
443+
Write-Output '---------------------------------------------';
444+
}
343445
}
344446
}
345447

0 commit comments

Comments
 (0)