StringArrayNode.ts 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { inject, injectable, } from 'inversify';
  2. import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
  3. import format from 'string-template';
  4. import { TIdentifierNamesGeneratorFactory } from '../../types/container/generators/TIdentifierNamesGeneratorFactory';
  5. import { TStatement } from '../../types/node/TStatement';
  6. import { IOptions } from '../../interfaces/options/IOptions';
  7. import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
  8. import { IStorage } from '../../interfaces/storages/IStorage';
  9. import { initializable } from '../../decorators/Initializable';
  10. import { StringArrayTemplate } from '../../templates/string-array-nodes/string-array-node/StringArrayTemplate';
  11. import { AbstractCustomNode } from '../AbstractCustomNode';
  12. import { NodeUtils } from '../../node/NodeUtils';
  13. import { StringArrayStorage } from '../../storages/string-array/StringArrayStorage';
  14. @injectable()
  15. export class StringArrayNode extends AbstractCustomNode {
  16. /**
  17. * @type {IStorage <string>}
  18. */
  19. @initializable()
  20. private stringArrayStorage: IStorage <string>;
  21. /**
  22. * @type {string}
  23. */
  24. @initializable()
  25. private stringArrayName: string;
  26. /**
  27. * @type {number}
  28. */
  29. @initializable()
  30. private stringArrayRotateValue: number;
  31. /**
  32. * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
  33. * @param {IRandomGenerator} randomGenerator
  34. * @param {IOptions} options
  35. */
  36. constructor (
  37. @inject(ServiceIdentifiers.Factory__IIdentifierNamesGenerator)
  38. identifierNamesGeneratorFactory: TIdentifierNamesGeneratorFactory,
  39. @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
  40. @inject(ServiceIdentifiers.IOptions) options: IOptions
  41. ) {
  42. super(identifierNamesGeneratorFactory, randomGenerator, options);
  43. }
  44. /**
  45. * @param {IStorage<string>} stringArrayStorage
  46. * @param {string} stringArrayName
  47. * @param {number} stringArrayRotateValue
  48. */
  49. public initialize (
  50. stringArrayStorage: IStorage <string>,
  51. stringArrayName: string,
  52. stringArrayRotateValue: number
  53. ): void {
  54. this.stringArrayStorage = stringArrayStorage;
  55. this.stringArrayName = stringArrayName;
  56. this.stringArrayRotateValue = stringArrayRotateValue;
  57. }
  58. /**
  59. * @returns {TStatement[]}
  60. */
  61. public getNode (): TStatement[] {
  62. (<StringArrayStorage>this.stringArrayStorage).rotateArray(this.stringArrayRotateValue);
  63. return super.getNode();
  64. }
  65. /**
  66. * @returns {TStatement[]}
  67. */
  68. protected getNodeStructure (): TStatement[] {
  69. return NodeUtils.convertCodeToStructure(this.getTemplate());
  70. }
  71. /**
  72. * @returns {string}
  73. */
  74. protected getTemplate (): string {
  75. return format(StringArrayTemplate(), {
  76. stringArrayName: this.stringArrayName,
  77. stringArray: this.stringArrayStorage.toString()
  78. });
  79. }
  80. }