Skip to content

Commit 872789b

Browse files
committed
Refactor console client and use verbs
1 parent da2c922 commit 872789b

File tree

7 files changed

+107
-42
lines changed

7 files changed

+107
-42
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
3+
namespace IntegrationEngine.Client
4+
{
5+
public enum Endpoint
6+
{
7+
CronTrigger,
8+
SimpleTrigger,
9+
JobType,
10+
TimeZone,
11+
HealthStatus,
12+
}
13+
}
14+

IntegrationEngine.Client/IntegrationEngine.Client.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
<Compile Include="IInEngineClient.cs" />
4848
<Compile Include="IJsonConvert.cs" />
4949
<Compile Include="JsonConvertAdapter.cs" />
50+
<Compile Include="Endpoint.cs" />
5051
</ItemGroup>
5152
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
5253
<ItemGroup>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using CommandLine;
2+
using IntegrationEngine.Model;
3+
using System;
4+
using IntegrationEngine.Client;
5+
6+
namespace IntegrationEngine.ConsoleClient
7+
{
8+
public class GetSubOptions
9+
{
10+
[Option('e', "endpoint", Required = true, HelpText="Endpoint to consume.")]
11+
public Endpoint Resource { get; set; }
12+
13+
[Option('i', "id", HelpText="Id of resource to consume.")]
14+
public string Id { get; set; }
15+
}
16+
}

IntegrationEngine.ConsoleClient/IntegrationEngine.ConsoleClient.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
<ErrorReport>prompt</ErrorReport>
2525
<WarningLevel>4</WarningLevel>
2626
<Prefer32Bit>false</Prefer32Bit>
27+
<Commandlineparameters>get -e CronTrigger</Commandlineparameters>
28+
<ConsolePause>false</ConsolePause>
2729
</PropertyGroup>
2830
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
2931
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -54,6 +56,7 @@
5456
<Compile Include="..\configuration\SharedAssemblyInfo.cs">
5557
<Link>Properties\SharedAssemblyInfo.cs</Link>
5658
</Compile>
59+
<Compile Include="GetSubOptions.cs" />
5760
</ItemGroup>
5861
<ItemGroup>
5962
<ProjectReference Include="..\IntegrationEngine.Client\IntegrationEngine.Client.csproj">

IntegrationEngine.ConsoleClient/Options.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,30 @@
22
using System;
33
using System.Collections.Generic;
44
using IntegrationEngine.Client;
5+
using System.Text;
6+
using System.Reflection;
57

68
namespace IntegrationEngine.ConsoleClient
79
{
8-
910
public class Options
1011
{
11-
[Option('m', "method", Required = true, HelpText = "Call a method from IntegrationEngine.Client.")]
12-
public string MethodName { get; set; }
13-
1412
[Option('u', "url", Required = false, HelpText = "Web API url.")]
1513
public string WebApiUrl { get; set; }
14+
15+
[VerbOption("get", HelpText = "Consume a resource.")]
16+
public GetSubOptions GetVerb { get; set; }
17+
18+
[HelpOption]
19+
public string GetUsage()
20+
{
21+
var version = (Attribute.GetCustomAttribute(
22+
Assembly.GetEntryAssembly(),
23+
typeof(AssemblyInformationalVersionAttribute))
24+
as AssemblyInformationalVersionAttribute).InformationalVersion;
25+
var usage = new StringBuilder();
26+
usage.AppendLine(string.Format("InEngine.NET Console Client {0}", version));
27+
usage.AppendLine("Project website: http://inengine.net");
28+
return usage.ToString();
29+
}
1630
}
1731
}

IntegrationEngine.ConsoleClient/Program.cs

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using IntegrationEngine.Client;
44
using IntegrationEngine.Model;
55
using System;
6+
using System.Collections;
67
using System.Collections.Generic;
78
using System.Linq;
89
using System.Text;
@@ -14,29 +15,58 @@ class Program
1415
static void Main(string[] args)
1516
{
1617
var options = new Options();
17-
if (!CommandLine.Parser.Default.ParseArguments(args, options))
18-
return;
18+
if (args.Length <= 1) {
19+
Console.WriteLine(options.GetUsage());
20+
Environment.Exit(CommandLine.Parser.DefaultExitCodeFail);
21+
}
22+
var invokedVerb = "";
23+
var invokedVerbInstance = new object();
24+
if (!CommandLine.Parser.Default.ParseArguments(args, options, (verb, subOptions) => {
25+
invokedVerb = verb;
26+
invokedVerbInstance = subOptions;
27+
}))
28+
{
29+
Console.WriteLine(options.GetUsage());
30+
Environment.Exit(CommandLine.Parser.DefaultExitCodeFail);
31+
}
32+
1933
var client = !string.IsNullOrWhiteSpace(options.WebApiUrl) ?
2034
new InEngineClient(options.WebApiUrl) :
2135
new InEngineClient();
22-
var type = client.GetType();
23-
if (!type.GetMethods().Where(x => x.Name == options.MethodName && !x.GetParameters().Any()).Any())
24-
{
25-
Console.WriteLine("Method '{0}' does not exist", options.MethodName);
26-
var availableMethods = typeof(IInEngineClient).GetMethods()
27-
.Where(x => !x.GetParameters().Any())
28-
.Select(x => x.Name)
29-
.ToList();
30-
Console.WriteLine("Available methods: '{0}'", string.Join(", ", availableMethods));
31-
return;
36+
37+
if (invokedVerb == "get") {
38+
var getSubOptions = (GetSubOptions)invokedVerbInstance;
39+
switch (getSubOptions.Resource)
40+
{
41+
case Endpoint.CronTrigger:
42+
ResolveResult(client.GetCollection<CronTrigger>());
43+
break;
44+
case Endpoint.SimpleTrigger:
45+
ResolveResult(client.GetCollection<SimpleTrigger>());
46+
break;
47+
case Endpoint.JobType:
48+
ResolveResult(client.GetCollection<JobType>());
49+
break;
50+
case Endpoint.TimeZone:
51+
ResolveResult(client.GetCollection<IntegrationEngine.Model.TimeZone>());
52+
break;
53+
case Endpoint.HealthStatus:
54+
ResolveResult(client.GetHealthStatus());
55+
break;
56+
}
3257
}
33-
var method = type.GetMethod(options.MethodName);
34-
dynamic result = method.Invoke(client, null);
58+
}
59+
60+
public static void ResolveResult(dynamic result)
61+
{
3562
if (result == null)
3663
Console.WriteLine("The web API did not return a result. Is the URL correct and the server online? Try -mPing.");
37-
else if (method.ReturnType.GetInterface("IEnumerable") != null)
64+
else if (result is IEnumerable)
65+
{
66+
Console.WriteLine("Number of items: {0}", result.Count);
3867
foreach (var item in result)
3968
Console.WriteLine(item);
69+
}
4070
else
4171
Console.WriteLine(result);
4272
}

IntegrationEngine.userprefs

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,24 @@
11
<Properties StartupItem="IntegrationEngine.ConsoleHost/IntegrationEngine.ConsoleHost.csproj">
22
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
3-
<MonoDevelop.Ide.Workbench ActiveDocument="IntegrationEngine.Core.Tests/Mail/MailClientTest.cs">
3+
<MonoDevelop.Ide.Workbench ActiveDocument="IntegrationEngine.ConsoleClient/Program.cs">
44
<Files>
5-
<File FileName="IntegrationEngine.Core/Mail/MailClient.cs" Line="1" Column="1" />
6-
<File FileName="IntegrationEngine.Core.Tests/Mail/MailClientTest.cs" Line="26" Column="26" />
7-
<File FileName="IntegrationEngine.Core.Tests/Mail/StubStream.cs" Line="1" Column="1" />
5+
<File FileName="IntegrationEngine.ConsoleClient/Program.cs" Line="1" Column="1" />
6+
<File FileName="IntegrationEngine.ConsoleClient/Options.cs" Line="1" Column="1" />
7+
<File FileName="IntegrationEngine.ConsoleClient/GetSubOptions.cs" Line="25" Column="25" />
8+
<File FileName="IntegrationEngine.Client/InEngineClient.cs" Line="10" Column="10" />
9+
<File FileName="IntegrationEngine.ConsoleHost/Program.cs" Line="20" Column="20" />
10+
<File FileName="IntegrationEngine/MessageQueue/MessageQueueConnection.cs" Line="64" Column="64" />
811
</Files>
912
<Pads>
1013
<Pad Id="MonoDevelop.NUnit.TestPad">
11-
<State expanded="True">
12-
<Node name="IntegrationEngine.Core.Tests" expanded="True">
13-
<Node name="IntegrationEngine" expanded="True">
14-
<Node name="Core" expanded="True">
15-
<Node name="Tests" expanded="True">
16-
<Node name="Mail" expanded="True">
17-
<Node name="MailClientTest" expanded="True">
18-
<Node name="ShouldReturnTrueIfMailServerIsAvailable" selected="True" />
19-
</Node>
20-
</Node>
21-
<Node name="Storage" expanded="True">
22-
<Node name="ElasticsearchRepositoryTest" expanded="True" />
23-
</Node>
24-
</Node>
25-
</Node>
26-
</Node>
27-
</Node>
28-
</State>
14+
<State />
2915
</Pad>
3016
</Pads>
3117
</MonoDevelop.Ide.Workbench>
3218
<MonoDevelop.Ide.DebuggingService.Breakpoints>
3319
<BreakpointStore>
34-
<Breakpoint file="/Users/ethanhann/Projects/IntegrationEngine/IntegrationEngine.Core/Mail/MailClient.cs" line="61" column="1" />
20+
<Breakpoint file="/Users/ethanhann/Projects/IntegrationEngine/IntegrationEngine.Core/Storage/ElasticsearchRepository.cs" line="34" column="1" />
21+
<Breakpoint file="/Users/ethanhann/Projects/IntegrationEngine/IntegrationEngine.ConsoleClient/Program.cs" line="17" column="1" />
3522
</BreakpointStore>
3623
</MonoDevelop.Ide.DebuggingService.Breakpoints>
3724
<MonoDevelop.Ide.DebuggingService.PinnedWatches />

0 commit comments

Comments
 (0)