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