SftpFileAttributesBuilder.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using Renci.SshNet.Sftp;
  4. namespace Renci.SshNet.Tests.Common
  5. {
  6. public class SftpFileAttributesBuilder
  7. {
  8. private DateTime? _lastAccessTime;
  9. private DateTime? _lastWriteTime;
  10. private long? _size;
  11. private int? _userId;
  12. private int? _groupId;
  13. private uint? _permissions;
  14. private readonly IDictionary<string, string> _extensions;
  15. public SftpFileAttributesBuilder()
  16. {
  17. _extensions = new Dictionary<string, string>();
  18. }
  19. public SftpFileAttributesBuilder WithLastAccessTime(DateTime lastAccessTime)
  20. {
  21. _lastAccessTime = lastAccessTime;
  22. return this;
  23. }
  24. public SftpFileAttributesBuilder WithLastWriteTime(DateTime lastWriteTime)
  25. {
  26. _lastWriteTime = lastWriteTime;
  27. return this;
  28. }
  29. public SftpFileAttributesBuilder WithSize(long size)
  30. {
  31. _size = size;
  32. return this;
  33. }
  34. public SftpFileAttributesBuilder WithUserId(int userId)
  35. {
  36. _userId = userId;
  37. return this;
  38. }
  39. public SftpFileAttributesBuilder WithGroupId(int groupId)
  40. {
  41. _groupId = groupId;
  42. return this;
  43. }
  44. public SftpFileAttributesBuilder WithPermissions(uint permissions)
  45. {
  46. _permissions = permissions;
  47. return this;
  48. }
  49. public SftpFileAttributesBuilder WithExtension(string name, string value)
  50. {
  51. _extensions.Add(name, value);
  52. return this;
  53. }
  54. public SftpFileAttributes Build()
  55. {
  56. if (_lastAccessTime == null)
  57. {
  58. _lastAccessTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
  59. }
  60. else if (_lastAccessTime.Value.Kind != DateTimeKind.Utc)
  61. {
  62. _lastAccessTime = _lastAccessTime.Value.ToUniversalTime();
  63. }
  64. if (_lastWriteTime == null)
  65. {
  66. _lastWriteTime = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
  67. }
  68. else if (_lastWriteTime.Value.Kind != DateTimeKind.Utc)
  69. {
  70. _lastWriteTime = _lastWriteTime.Value.ToUniversalTime();
  71. }
  72. _size ??= 0;
  73. _userId ??= 0;
  74. _groupId ??= 0;
  75. _permissions ??= 0;
  76. return new SftpFileAttributes(_lastAccessTime.Value,
  77. _lastWriteTime.Value,
  78. _size.Value,
  79. _userId.Value,
  80. _groupId.Value,
  81. _permissions.Value,
  82. _extensions);
  83. }
  84. }
  85. }