Skip to content

Commit 290802b

Browse files
authored
Merge pull request #26 from nils-a/feature/GH-24
(#24) added "dotnet jvs config show"
2 parents a5de41e + 9ac83b2 commit 290802b

File tree

4 files changed

+148
-4
lines changed

4 files changed

+148
-4
lines changed

src/JavaVersionSwitcher/Adapters/ShellAdapter.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics;
3+
using System.Runtime.InteropServices;
34
using JavaVersionSwitcher.Logging;
45

56
namespace JavaVersionSwitcher.Adapters
@@ -14,8 +15,14 @@ public ShellAdapter(ILogger logger)
1415
_logger = logger;
1516
}
1617

18+
1719
public ShellType GetShellType()
1820
{
21+
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
22+
{
23+
return ShellType.Unknown;
24+
}
25+
1926
try
2027
{
2128
var proc = GetParentProcess(Process.GetCurrentProcess());
@@ -45,11 +52,20 @@ public ShellType GetShellType()
4552
}
4653
}
4754

48-
private static Process GetParentProcess(Process process) {
55+
private static Process GetParentProcess(Process process)
56+
{
4957
return FindPidFromIndexedProcessName(FindIndexedProcessName(process.Id));
5058
}
5159

52-
private static string FindIndexedProcessName(int pid) {
60+
#pragma warning disable CA1416
61+
private static string FindIndexedProcessName(int pid)
62+
{
63+
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
64+
{
65+
throw new NotImplementedException(
66+
"Accessing parent process is currently only available on windows.");
67+
}
68+
5369
var processName = Process.GetProcessById(pid).ProcessName;
5470
var processesByName = Process.GetProcessesByName(processName);
5571
string processIndexedName = null;
@@ -66,8 +82,15 @@ private static string FindIndexedProcessName(int pid) {
6682
}
6783

6884
private static Process FindPidFromIndexedProcessName(string indexedProcessName) {
85+
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
86+
{
87+
throw new NotImplementedException(
88+
"Accessing parent process is currently only available on windows.");
89+
}
90+
6991
var parentId = new PerformanceCounter("Process", "Creating Process ID", indexedProcessName);
7092
return Process.GetProcessById((int) parentId.NextValue());
7193
}
94+
#pragma warning restore CA1416
7295
}
7396
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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+
}

src/JavaVersionSwitcher/JavaVersionSwitcher.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
66
<PackAsTool>true</PackAsTool>
77
</PropertyGroup>
8-
8+
99
<ItemGroup>
1010
<None Include="$(MSBuildProjectDirectory)/../../README.md" PackagePath="" Pack="true" />
1111
<None Include="$(MSBuildProjectDirectory)/../../res/logo/logo-128.png" PackagePath="" Pack="true" />
@@ -37,9 +37,9 @@
3737

3838
<ItemGroup>
3939
<PackageReference Include="JetBrains.Annotations" Version="2021.1.0" />
40+
<PackageReference Include="Microsoft.Windows.Compatibility" Version="5.0.2" />
4041
<PackageReference Include="SimpleInjector" Version="5.3.1" />
4142
<PackageReference Include="Spectre.Console" Version="0.40.0" />
42-
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="5.0.1" />
4343
</ItemGroup>
4444

4545
</Project>

src/JavaVersionSwitcher/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public static void ConfigureApp(IConfigurator config)
4141
.WithDescription("get configuration options.");
4242
cfg.AddCommand<SetConfigCommand>("set")
4343
.WithDescription("set configuration options.");
44+
cfg.AddCommand<ShowConfigCommand>("show")
45+
.WithDescription("show possible configuration options.");
4446
});
4547

4648
#if DEBUG

0 commit comments

Comments
 (0)