PageRenderTime 53ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/Atlassian.Jira/Remote/ProjectVersionService.cs

https://bitbucket.org/farmas/atlassian.net-sdk
C# | 113 lines | 93 code | 18 blank | 2 comment | 1 complexity | 0e9030db28097f641d76c6b6ac95f73e MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using Newtonsoft.Json;
  7. using Newtonsoft.Json.Linq;
  8. using RestSharp;
  9. namespace Atlassian.Jira.Remote
  10. {
  11. internal class ProjectVersionService : IProjectVersionService
  12. {
  13. private readonly Jira _jira;
  14. public ProjectVersionService(Jira jira)
  15. {
  16. _jira = jira;
  17. }
  18. public async Task<IEnumerable<ProjectVersion>> GetVersionsAsync(string projectKey, CancellationToken token = default(CancellationToken))
  19. {
  20. var cache = _jira.Cache;
  21. if (!cache.Versions.Values.Any(v => String.Equals(v.ProjectKey, projectKey)))
  22. {
  23. var resource = String.Format("rest/api/2/project/{0}/versions", projectKey);
  24. var remoteVersions = await _jira.RestClient.ExecuteRequestAsync<RemoteVersion[]>(Method.GET, resource, null, token).ConfigureAwait(false);
  25. var versions = remoteVersions.Select(remoteVersion =>
  26. {
  27. remoteVersion.ProjectKey = projectKey;
  28. return new ProjectVersion(_jira, remoteVersion);
  29. });
  30. cache.Versions.TryAdd(versions);
  31. return versions;
  32. }
  33. else
  34. {
  35. return cache.Versions.Values.Where(v => String.Equals(v.ProjectKey, projectKey));
  36. }
  37. }
  38. public async Task<IPagedQueryResult<ProjectVersion>> GetPagedVersionsAsync(string projectKey, int startAt = 0, int maxResults = 50, CancellationToken token = default(CancellationToken))
  39. {
  40. var settings = _jira.RestClient.Settings.JsonSerializerSettings;
  41. var resource = String.Format("rest/api/2/project/{0}/version?startAt={1}&maxResults={2}",
  42. projectKey,
  43. startAt,
  44. maxResults);
  45. var result = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, null, token).ConfigureAwait(false);
  46. var versions = result["values"]
  47. .Cast<JObject>()
  48. .Select(versionJson =>
  49. {
  50. var remoteVersion = JsonConvert.DeserializeObject<RemoteVersion>(versionJson.ToString(), settings);
  51. remoteVersion.ProjectKey = projectKey;
  52. return new ProjectVersion(_jira, remoteVersion);
  53. });
  54. return PagedQueryResult<ProjectVersion>.FromJson((JObject)result, versions);
  55. }
  56. public async Task<ProjectVersion> CreateVersionAsync(ProjectVersionCreationInfo projectVersion, CancellationToken token = default(CancellationToken))
  57. {
  58. var settings = _jira.RestClient.Settings.JsonSerializerSettings;
  59. var serializer = JsonSerializer.Create(settings);
  60. var resource = "/rest/api/2/version";
  61. var requestBody = JToken.FromObject(projectVersion, serializer);
  62. var remoteVersion = await _jira.RestClient.ExecuteRequestAsync<RemoteVersion>(Method.POST, resource, requestBody, token).ConfigureAwait(false);
  63. remoteVersion.ProjectKey = projectVersion.ProjectKey;
  64. var version = new ProjectVersion(_jira, remoteVersion);
  65. // invalidate the cache
  66. _jira.Cache.Versions.Clear();
  67. return version;
  68. }
  69. public async Task DeleteVersionAsync(string versionId, string moveFixIssuesTo = null, string moveAffectedIssuesTo = null, CancellationToken token = default(CancellationToken))
  70. {
  71. var resource = String.Format("/rest/api/2/version/{0}?{1}&{2}",
  72. versionId,
  73. String.IsNullOrEmpty(moveFixIssuesTo) ? null : "moveFixIssuesTo=" + Uri.EscapeDataString(moveFixIssuesTo),
  74. String.IsNullOrEmpty(moveAffectedIssuesTo) ? null : "moveAffectedIssuesTo=" + Uri.EscapeDataString(moveAffectedIssuesTo));
  75. await _jira.RestClient.ExecuteRequestAsync(Method.DELETE, resource, null, token).ConfigureAwait(false);
  76. _jira.Cache.Versions.TryRemove(versionId);
  77. }
  78. public async Task<ProjectVersion> GetVersionAsync(string versionId, CancellationToken token = default(CancellationToken))
  79. {
  80. var resource = String.Format("rest/api/2/version/{0}", versionId);
  81. var remoteVersion = await _jira.RestClient.ExecuteRequestAsync<RemoteVersion>(Method.GET, resource, null, token).ConfigureAwait(false);
  82. return new ProjectVersion(_jira, remoteVersion);
  83. }
  84. public async Task<ProjectVersion> UpdateVersionAsync(ProjectVersion version, CancellationToken token = default(CancellationToken))
  85. {
  86. var resource = String.Format("rest/api/2/version/{0}", version.Id);
  87. var serializerSettings = _jira.RestClient.Settings.JsonSerializerSettings;
  88. var versionJson = JsonConvert.SerializeObject(version.RemoteVersion, serializerSettings);
  89. var remoteVersion = await _jira.RestClient.ExecuteRequestAsync<RemoteVersion>(Method.PUT, resource, versionJson, token).ConfigureAwait(false);
  90. // invalidate the cache
  91. _jira.Cache.Versions.Clear();
  92. return new ProjectVersion(_jira, remoteVersion);
  93. }
  94. }
  95. }