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