// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.EC2.Model; using AWS.Deploy.CLI.Extensions; using AWS.Deploy.Common; using AWS.Deploy.Common.Data; using AWS.Deploy.Common.Recipes; using AWS.Deploy.Common.TypeHintData; using AWS.Deploy.Orchestration.Data; namespace AWS.Deploy.CLI.Commands.TypeHints { /// /// The type hint lists existing VPC in an account for an option setting of type . /// public class ExistingVpcCommand : ITypeHintCommand { private readonly IAWSResourceQueryer _awsResourceQueryer; private readonly IConsoleUtilities _consoleUtilities; private readonly IOptionSettingHandler _optionSettingHandler; public ExistingVpcCommand(IAWSResourceQueryer awsResourceQueryer, IConsoleUtilities consoleUtilities, IOptionSettingHandler optionSettingHandler) { _awsResourceQueryer = awsResourceQueryer; _consoleUtilities = consoleUtilities; _optionSettingHandler = optionSettingHandler; } private async Task> GetData() { return await _awsResourceQueryer.GetListOfVpcs(); } public async Task GetResources(Recommendation recommendation, OptionSettingItem optionSetting) { var vpcs = await GetData(); var resourceTable = new TypeHintResourceTable(); resourceTable.Rows = vpcs.ToDictionary(x => x.VpcId, x => x.GetDisplayableVpc()).Select(x => new TypeHintResource(x.Key, x.Value)).ToList(); return resourceTable; } public async Task Execute(Recommendation recommendation, OptionSettingItem optionSetting) { var currentVpcValue = _optionSettingHandler.GetOptionSettingValue(recommendation, optionSetting); var vpcs = await GetData(); var userInputConfig = new UserInputConfiguration( idSelector: vpc => vpc.VpcId, displaySelector: vpc => vpc.GetDisplayableVpc(), defaultSelector: vpc => !string.IsNullOrEmpty(currentVpcValue) ? vpc.VpcId == currentVpcValue : vpc.IsDefault) { CanBeEmpty = true, EmptyOption = true, CreateNew = false }; var userResponse = _consoleUtilities.AskUserToChooseOrCreateNew( vpcs, "Select a VPC", userInputConfig); return userResponse.SelectedOption?.VpcId ?? string.Empty; } } }