1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . ComponentModel ;
4+ using System . Linq ;
5+ using System . Threading . Tasks ;
6+ using JavaVersionSwitcher . Logging ;
7+ using JavaVersionSwitcher . Services ;
8+ using JetBrains . Annotations ;
9+ using Spectre . Console ;
10+ using Spectre . Console . Cli ;
11+
12+ namespace JavaVersionSwitcher . Commands . config
13+ {
14+ [ UsedImplicitly ]
15+ public class ShowConfigCommand : AsyncCommand < ShowConfigCommand . Settings >
16+ {
17+ private readonly ILogger _logger ;
18+ private readonly IConfigurationService _service ;
19+ private readonly IEnumerable < IConfigurationProvider > _providers ;
20+
21+ public ShowConfigCommand (
22+ ILogger logger ,
23+ IConfigurationService service ,
24+ IEnumerable < IConfigurationProvider > providers )
25+ {
26+ _logger = logger ;
27+ _service = service ;
28+ _providers = providers ;
29+ }
30+
31+ [ UsedImplicitly ]
32+ public sealed class Settings : CommonCommandSettings
33+ {
34+ [ CommandOption ( "--providers" ) ]
35+ [ Description ( "Show provider names only." ) ]
36+ [ DefaultValue ( false ) ]
37+ public bool Providers { get ; [ UsedImplicitly ] set ; }
38+
39+ [ CommandOption ( "--provider" ) ]
40+ [ Description ( "Show settings for one provider only." ) ]
41+ public string Provider { get ; [ UsedImplicitly ] set ; }
42+
43+ public override ValidationResult Validate ( )
44+ {
45+ if ( Providers && ! string . IsNullOrEmpty ( Provider ) )
46+ {
47+ return ValidationResult . Error ( "--providers and --provider are mutually exclusive." ) ;
48+ }
49+
50+ return ValidationResult . Success ( ) ;
51+ }
52+ }
53+
54+ public override async Task < int > ExecuteAsync ( CommandContext context , Settings settings )
55+ {
56+ _logger . PrintVerbose = settings . Verbose ;
57+ if ( settings . Providers )
58+ {
59+ return await ListProviders ( ) ;
60+ }
61+
62+ if ( ! string . IsNullOrEmpty ( settings . Provider ) )
63+ {
64+ return await ListSettingsForProviders ( settings . Provider ) ;
65+ }
66+
67+ return await ListAllSettings ( ) ;
68+ }
69+
70+ private async Task < int > ListSettingsForProviders ( string settingsProvider )
71+ {
72+ var provider = _providers . FirstOrDefault ( p =>
73+ p . ProviderName . Equals ( settingsProvider , StringComparison . OrdinalIgnoreCase ) ) ;
74+ if ( provider == null )
75+ {
76+ AnsiConsole . MarkupLine ( $ "[red]No provider named { settingsProvider } [/]") ;
77+ return await Task . FromResult ( 1 ) ;
78+ }
79+
80+ _logger . LogVerbose ( $ "Listing setting for { provider . ProviderName } :") ;
81+ foreach ( var setting in provider . Settings . OrderBy ( x => x ) )
82+ {
83+ AnsiConsole . WriteLine ( setting ) ;
84+ }
85+
86+ return await Task . FromResult ( 0 ) ;
87+ }
88+
89+ private async Task < int > ListAllSettings ( )
90+ {
91+ var table = new Table ( ) ;
92+ table . AddColumn ( "Provider" ) ;
93+ table . AddColumn ( "Setting" ) ;
94+ table . AddColumn ( "Configured value" ) ;
95+
96+ foreach ( var provider in _providers . OrderBy ( p => p . ProviderName ) )
97+ {
98+ foreach ( var setting in provider . Settings . OrderBy ( x => x ) )
99+ {
100+ var val = await _service . GetConfiguration ( provider . ProviderName , setting ) ;
101+ table . AddRow ( provider . ProviderName , setting , val ) ;
102+ }
103+ }
104+
105+ AnsiConsole . Render ( table ) ;
106+ return 0 ;
107+ }
108+
109+ private async Task < int > ListProviders ( )
110+ {
111+ foreach ( var name in _providers . Select ( p => p . ProviderName ) . OrderBy ( x => x ) )
112+ {
113+ AnsiConsole . WriteLine ( name ) ;
114+ }
115+
116+ return await Task . FromResult ( 0 ) ;
117+ }
118+ }
119+ }
0 commit comments