msnCommand.cs
1 using System;
2 using System.Diagnostics;
3
4 namespace MS.StrongName.ManagedSN
5 {
6 /// <summary>
7 /// Handler for a specific command line option
8 /// </summary>
9 /// <param name="arguments">List of all the command line options</param>
10 public delegate int OptionHandler(string[] arguments);
11
12 /// <summary>
13 /// Utility class linking an option switch, its implementation, and help about it
14 /// </summary>
15 internal sealed class Command : IComparable
16 {
17 private string option;
18 private OptionHandler handler;
19 private string arguments;
20 private string help;
21
22 /// <summary>
23 /// Initialize a SN command
24 /// </summary>
25 /// <param name="option">switch that enters this command</param>
26 /// <param name="handler">implementation of the command</param>
27 /// <param name="arguments">Names of the arguments this command takes</param>
28 /// <param name="help">help string for the command</param>
29 internal Command(string option, OptionHandler handler, string arguments, string help)
30 {
31 Debug.Assert(!String.IsNullOrEmpty(option), "Empty option switch");
32 Debug.Assert(handler != null);
33 Debug.Assert(!String.IsNullOrEmpty(help), "Empty command help");
34
35 this.option = option;
36 this.handler = handler;
37 this.arguments = arguments;
38 this.help = help;
39
40 return;
41 }
42
43 /// <summary>
44 /// Switch that enters this command
45 /// </summary>
46 public string Option { get { return option; } }
47
48 /// <summary>
49 /// Implementation of the command
50 /// </summary>
51 public OptionHandler Handler { get { return handler; } }
52
53 /// <summary>
54 /// Names of the arguments this command needs
55 /// </summary>
56 public string Arguments
57 {
58 get
59 {
60 if(arguments == null)
61 return String.Empty;
62 else
63 return arguments;
64 }
65 }
66
67 /// <summary>
68 /// Help string for the command
69 /// </summary>
70 public string Help { get { return help; } }
71
72 /// <summary>
73 /// Comparison function to sort by option
74 /// </summary>
75 public int CompareTo(object obj)
76 {
77 Command other = obj as Command;
78
79 Debug.Assert(other != null);
80 if(other == null)
81 throw new InvalidOperationException(Resources.CompareToNonCommand);
82
83 return Option.CompareTo(other.Option);
84 }
85 }
86 }