| File: Commands\Workload\Search\WorkloadSearchCommand.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using System.CommandLine; using Microsoft.DotNet.Cli.Commands.Workload.Install; using Microsoft.DotNet.Cli.Utils; using Microsoft.NET.Sdk.WorkloadManifestReader; namespace Microsoft.DotNet.Cli.Commands.Workload.Search; internal sealed class WorkloadSearchCommand : WorkloadCommandBase<WorkloadSearchCommandDefinition> { private readonly IWorkloadResolver _workloadResolver; private readonly string _workloadIdStub; public WorkloadSearchCommand( ParseResult result, IReporter reporter = null, IWorkloadResolverFactory workloadResolverFactory = null) : base(result, reporter) { _workloadIdStub = result.GetValue(Definition.WorkloadIdStubArgument); workloadResolverFactory ??= new WorkloadResolverFactory(); if (!string.IsNullOrEmpty(result.GetValue(Definition.VersionOption))) { throw new GracefulException(CliCommandStrings.SdkVersionOptionNotSupported); } var creationResult = workloadResolverFactory.Create(); _workloadResolver = creationResult.WorkloadResolver; } public override int Execute() { IEnumerable<WorkloadResolver.WorkloadInfo> availableWorkloads = _workloadResolver.GetAvailableWorkloads() .OrderBy(workload => workload.Id); if (!string.IsNullOrEmpty(_workloadIdStub)) { availableWorkloads = availableWorkloads .Where(workload => workload.Id.ToString().Contains(_workloadIdStub, StringComparison.OrdinalIgnoreCase) || (workload.Description?.Contains(_workloadIdStub, StringComparison.OrdinalIgnoreCase) ?? false)); } var table = new PrintableTable<WorkloadResolver.WorkloadInfo>(); table.AddColumn(CliCommandStrings.WorkloadIdColumnName, workload => workload.Id.ToString()); table.AddColumn(CliCommandStrings.DescriptionColumnName, workload => workload.Description); Reporter.WriteLine(); table.PrintRows(availableWorkloads, l => Reporter.WriteLine(l)); Reporter.WriteLine(); return 0; } }