CmdPrint.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Quadarax.Foundation.Core.Console;
  5. using Quadarax.Foundation.Core.QConsole.Argument;
  6. using Quadarax.Foundation.Core.QConsole.Attributes;
  7. using Quadarax.Foundation.Core.QConsole.Command.Base;
  8. using Quadarax.Foundation.Core.QConsole.Value;
  9. using Quadarax.Foundation.Core.Value;
  10. namespace Quadarax.Foundation.Core.QConsole.Command.Defaults
  11. {
  12. [CommandDefinition]
  13. public class CmdPrint : AbstractCommand
  14. {
  15. public CmdPrint(Engine engine) : base(engine)
  16. {
  17. }
  18. public override string Name => Constants.Commands.Print.Name;
  19. public override string Description => Constants.Commands.Print.Description;
  20. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  21. {
  22. var arguments = base.OnSetupArguments().ToList();
  23. arguments.AddRange(
  24. new AbstractArgument []
  25. {
  26. new OrdinalArgument(0,
  27. false,
  28. Constants.Commands.Print.ArgCommandValue.Code,
  29. Constants.Commands.Print.Description,
  30. Constants.Commands.Print.ArgCommandValue.Hint,
  31. TypeValuesEnum.String,
  32. string.Empty,
  33. true),
  34. new FlagArgument(Constants.Commands.Print.ArgCommandClipboard.Code,
  35. Constants.Commands.Print.ArgCommandClipboard.Description,
  36. Constants.Commands.Print.ArgCommandClipboard.Hint,
  37. false),
  38. });
  39. return arguments;
  40. }
  41. protected override Result OnExecute()
  42. {
  43. var result = new Result();
  44. using (var writerGreen = new ConsoleWriter(ConsoleColor.Green))
  45. {
  46. using (var writerYellow = new ConsoleWriter(ConsoleColor.Yellow))
  47. {
  48. var valueArgument = GetArgument(0);
  49. var value = valueArgument.Value.AsString();
  50. if (!value.StartsWith(QConsole.Defaults.RoleCharacters.SelectionVariablePrefixCharacter))
  51. throw new Exception($"Variable is defined as {QConsole.Defaults.RoleCharacters.SelectionVariablePrefixCharacter}<selection_ordinal>.<property_name>");
  52. var parts = value.Split(
  53. new string[]
  54. {
  55. QConsole.Defaults.RoleCharacters.SelectionVariablePrefixCharacter,
  56. QConsole.Defaults.RoleCharacters.SelectionVariablePropertyCharacter
  57. }, StringSplitOptions.RemoveEmptyEntries);
  58. if (parts.Length!=2)
  59. throw new Exception($"Variable is defined as {QConsole.Defaults.RoleCharacters.SelectionVariablePrefixCharacter}<selection_ordinal>.<property_name>");
  60. var ordinal = int.Parse(parts[0]);
  61. var selection = Engine.GetSelection(ordinal);
  62. if (selection == null)
  63. throw new Exception($"Selection variable '{value}' is not defined.");
  64. writerGreen.Write(value);
  65. writerGreen.Write(" = ");
  66. writerYellow.WriteLine(selection.GetPropertyValueAsString(parts[1]));
  67. var argument = GetArgument(Constants.Commands.Print.ArgCommandClipboard.Code);
  68. if ((bool) argument.Value.Get())
  69. {
  70. writerGreen.WriteLine("Value was stored in clipboard.");
  71. }
  72. }
  73. }
  74. return result;
  75. }
  76. }
  77. }