AbstractGetCommand.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using BO.AppServer.Metadata.Enums;
  4. using Quadarax.Foundation.Core.QConsole;
  5. using Quadarax.Foundation.Core.QConsole.Argument;
  6. using Quadarax.Foundation.Core.QConsole.Value;
  7. using static System.String;
  8. namespace BO.Console.Commands.Base
  9. {
  10. internal abstract class AbstractGetCommand : BaseCommand
  11. {
  12. #region *** Constants ***
  13. private const string CS_ARG_NAME_ID = "id";
  14. private const string CS_ARG_HINT_ID = "<id>";
  15. private const string CS_ARG_DESC_ID = "Record identifier (long). Alternative to argument '" + CS_ARG_NAME_NAME + "'.";
  16. private const string CS_ARG_NAME_NAME = "name";
  17. private const string CS_ARG_HINT_NAME = "<name>";
  18. private const string CS_ARG_DESC_NAME = "Record name or code identifier. Alternative to argument '" + CS_ARG_NAME_ID + "'.";
  19. private const string CS_ARG_NAME_DETAILS = "details";
  20. private const string CS_ARG_HINT_DETAILS = "<show_details>";
  21. private const string CS_ARG_DESC_DETAILS = "Flag if show more details (related tables).";
  22. #endregion
  23. #region *** Properties ***
  24. protected IdentificationTypeEnum IdentificationType { get; private set; }
  25. protected string IdentificationValue { get; private set; }
  26. #endregion
  27. #region *** Constructors ***
  28. protected AbstractGetCommand(Engine engine) : base(engine)
  29. {
  30. }
  31. #endregion
  32. #region *** Protected Overrides ***
  33. protected override void BeginExecute()
  34. {
  35. base.BeginExecute();
  36. // Parsing input values
  37. IdentificationType = WasArgumentSpecified(CS_ARG_NAME_ID)
  38. ? IdentificationTypeEnum.Id : IdentificationTypeEnum.Name;
  39. IdentificationValue = WasArgumentSpecified(CS_ARG_NAME_ID)
  40. ? GetArgumentValueOrDefault<int>(CS_ARG_NAME_ID).ToString() : GetArgumentValueOrDefault<string>(CS_ARG_NAME_NAME);
  41. WriteCaption($"Getting entity by {IdentificationType}={IdentificationValue} ..." );
  42. }
  43. protected override void OnValidateArguments()
  44. {
  45. base.OnValidateArguments();
  46. if (!WasArgumentSpecified(CS_ARG_NAME_ID) && !WasArgumentSpecified(CS_ARG_NAME_NAME)
  47. ||
  48. WasArgumentSpecified(CS_ARG_NAME_ID) && WasArgumentSpecified(CS_ARG_NAME_NAME)
  49. )
  50. throw new ArgumentException(
  51. $"Argument {Engine.Configuration.CharacterNamedArgumentSeparator}{CS_ARG_NAME_ID} or {Engine.Configuration.CharacterNamedArgumentSeparator}{CS_ARG_NAME_NAME} must be specified!");
  52. }
  53. protected override IEnumerable<AbstractArgument> OnSetupArguments()
  54. {
  55. var args = new List<AbstractArgument>(base.OnSetupArguments());
  56. args.Add(new NamedArgument(CS_ARG_NAME_ID, CS_ARG_DESC_ID, CS_ARG_HINT_ID,TypeValuesEnum.Integer,Empty,false));
  57. args.Add(new NamedArgument(CS_ARG_NAME_NAME, CS_ARG_DESC_NAME, CS_ARG_HINT_NAME,TypeValuesEnum.String,Empty,false));
  58. args.Add(new FlagArgument(CS_ARG_NAME_DETAILS, CS_ARG_DESC_DETAILS, CS_ARG_HINT_DETAILS, false));
  59. return args;
  60. }
  61. #endregion
  62. }
  63. }