From ea27a4562013ce98dbeb069dfecfc427e78b208e Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Tue, 10 Nov 2015 19:53:07 +0300 Subject: [PATCH 1/6] - get list of all issue statuses - fix: transitions href format allow issue key, not only id --- TechTalk.JiraRestClient/IJiraClient.cs | 3 +++ TechTalk.JiraRestClient/JiraClient.cs | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/TechTalk.JiraRestClient/IJiraClient.cs b/TechTalk.JiraRestClient/IJiraClient.cs index 5205faa..b61f5b1 100644 --- a/TechTalk.JiraRestClient/IJiraClient.cs +++ b/TechTalk.JiraRestClient/IJiraClient.cs @@ -83,6 +83,9 @@ namespace TechTalk.JiraRestClient /// Returns all issue types IEnumerable GetIssueTypes(); + /// Returns all issue statuses + IEnumerable GetIssueStatuses(); + /// Returns information about the JIRA server ServerInfo GetServerInfo(); } diff --git a/TechTalk.JiraRestClient/JiraClient.cs b/TechTalk.JiraRestClient/JiraClient.cs index 42fc27e..d53b929 100644 --- a/TechTalk.JiraRestClient/JiraClient.cs +++ b/TechTalk.JiraRestClient/JiraClient.cs @@ -277,7 +277,7 @@ public IEnumerable GetTransitions(IssueRef issue) { try { - var path = String.Format("issue/{0}/transitions?expand=transitions.fields", issue.id); + var path = String.Format("issue/{0}/transitions?expand=transitions.fields", issue.JiraIdentifier); var request = CreateRequest(Method.GET, path); var response = ExecuteRequest(request); @@ -637,6 +637,27 @@ public IEnumerable GetIssueTypes() } } + public IEnumerable GetIssueStatuses() + { + try + { + var request = CreateRequest(Method.GET, "status"); + request.AddHeader("ContentType", "application/json"); + + var response = ExecuteRequest(request); + AssertStatus(response, HttpStatusCode.OK); + + var data = deserializer.Deserialize>(response); + return data; + + } + catch (Exception ex) + { + Trace.TraceError("GetIssueStatuses() error: {0}", ex); + throw new JiraClientException("Could not load issue statuses", ex); + } + } + public ServerInfo GetServerInfo() { try From 147a70a0416a74d4587c9dae603f7958f33f45c1 Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Wed, 11 Nov 2015 13:14:26 +0300 Subject: [PATCH 2/6] generic GetIssueTypes and GetIssueStatuses --- TechTalk.JiraRestClient/Compatibility.cs | 2 +- TechTalk.JiraRestClient/IJiraClient.cs | 4 ++-- TechTalk.JiraRestClient/JiraClient.cs | 9 +++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/TechTalk.JiraRestClient/Compatibility.cs b/TechTalk.JiraRestClient/Compatibility.cs index 9089172..c227252 100644 --- a/TechTalk.JiraRestClient/Compatibility.cs +++ b/TechTalk.JiraRestClient/Compatibility.cs @@ -240,7 +240,7 @@ public void DeleteRemoteLink(IssueRef issue, RemoteLink remoteLink) public IEnumerable GetIssueTypes() { - return client.GetIssueTypes(); + return client.GetIssueTypes(); } public ServerInfo GetServerInfo() diff --git a/TechTalk.JiraRestClient/IJiraClient.cs b/TechTalk.JiraRestClient/IJiraClient.cs index b61f5b1..3563d63 100644 --- a/TechTalk.JiraRestClient/IJiraClient.cs +++ b/TechTalk.JiraRestClient/IJiraClient.cs @@ -81,10 +81,10 @@ namespace TechTalk.JiraRestClient void DeleteRemoteLink(IssueRef issue, RemoteLink remoteLink); /// Returns all issue types - IEnumerable GetIssueTypes(); + IEnumerable GetIssueTypes() where T : IssueType; /// Returns all issue statuses - IEnumerable GetIssueStatuses(); + IEnumerable GetIssueStatuses() where T : Status; /// Returns information about the JIRA server ServerInfo GetServerInfo(); diff --git a/TechTalk.JiraRestClient/JiraClient.cs b/TechTalk.JiraRestClient/JiraClient.cs index d53b929..012defe 100644 --- a/TechTalk.JiraRestClient/JiraClient.cs +++ b/TechTalk.JiraRestClient/JiraClient.cs @@ -616,7 +616,8 @@ public void DeleteRemoteLink(IssueRef issue, RemoteLink remoteLink) } } - public IEnumerable GetIssueTypes() + //public IEnumerable GetIssueTypes() + public IEnumerable GetIssueTypes() where T : IssueType { try { @@ -626,7 +627,7 @@ public IEnumerable GetIssueTypes() var response = ExecuteRequest(request); AssertStatus(response, HttpStatusCode.OK); - var data = deserializer.Deserialize>(response); + var data = deserializer.Deserialize>(response); return data; } @@ -637,7 +638,7 @@ public IEnumerable GetIssueTypes() } } - public IEnumerable GetIssueStatuses() + public IEnumerable GetIssueStatuses() where T:Status { try { @@ -647,7 +648,7 @@ public IEnumerable GetIssueStatuses() var response = ExecuteRequest(request); AssertStatus(response, HttpStatusCode.OK); - var data = deserializer.Deserialize>(response); + var data = deserializer.Deserialize>(response); return data; } From cdcc5eb343560a37d951070170268ec1a1431599 Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Wed, 11 Nov 2015 14:26:27 +0300 Subject: [PATCH 3/6] added issue priorities list --- TechTalk.JiraRestClient/JiraClient.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/TechTalk.JiraRestClient/JiraClient.cs b/TechTalk.JiraRestClient/JiraClient.cs index 012defe..b103d17 100644 --- a/TechTalk.JiraRestClient/JiraClient.cs +++ b/TechTalk.JiraRestClient/JiraClient.cs @@ -659,6 +659,27 @@ public IEnumerable GetIssueStatuses() where T:Status } } + public IEnumerable GetIssuePriorities() where T : IssuePriority + { + try + { + var request = CreateRequest(Method.GET, "priority"); + request.AddHeader("ContentType", "application/json"); + + var response = ExecuteRequest(request); + AssertStatus(response, HttpStatusCode.OK); + + var data = deserializer.Deserialize>(response); + return data; + + } + catch (Exception ex) + { + Trace.TraceError("GetIssuePriorities() error: {0}", ex); + throw new JiraClientException("Could not load issue priorities", ex); + } + } + public ServerInfo GetServerInfo() { try From e9ec168232538d82d7509962d72403803040a86e Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Wed, 11 Nov 2015 14:46:33 +0300 Subject: [PATCH 4/6] re --- TechTalk.JiraRestClient/IJiraClient.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TechTalk.JiraRestClient/IJiraClient.cs b/TechTalk.JiraRestClient/IJiraClient.cs index 3563d63..367c41c 100644 --- a/TechTalk.JiraRestClient/IJiraClient.cs +++ b/TechTalk.JiraRestClient/IJiraClient.cs @@ -86,6 +86,9 @@ namespace TechTalk.JiraRestClient /// Returns all issue statuses IEnumerable GetIssueStatuses() where T : Status; + /// Returns all issue priorities + IEnumerable GetIssuePriorities() where T : IssuePriority; + /// Returns information about the JIRA server ServerInfo GetServerInfo(); } From acb7e322d67d3d1cabf57b71b73dba7d9cf281d0 Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Thu, 12 Nov 2015 12:13:14 +0300 Subject: [PATCH 5/6] added mothods to view users --- TechTalk.JiraRestClient/IJiraClient.cs | 4 +++ TechTalk.JiraRestClient/IssuePriority.cs | 10 +++++++ TechTalk.JiraRestClient/JiraClient.cs | 26 +++++++++++++++++++ .../TechTalk.JiraRestClient.csproj | 1 + 4 files changed, 41 insertions(+) create mode 100644 TechTalk.JiraRestClient/IssuePriority.cs diff --git a/TechTalk.JiraRestClient/IJiraClient.cs b/TechTalk.JiraRestClient/IJiraClient.cs index 367c41c..30a0763 100644 --- a/TechTalk.JiraRestClient/IJiraClient.cs +++ b/TechTalk.JiraRestClient/IJiraClient.cs @@ -48,6 +48,10 @@ namespace TechTalk.JiraRestClient /// Returns all watchers for the given issue IEnumerable GetWatchers(IssueRef issue); + List FindUsers(string search) where T : JiraUser; + T FindUser(string search) where T : JiraUser; + + /// Returns all comments for the given issue IEnumerable GetComments(IssueRef issue); /// Adds a comment to the given issue diff --git a/TechTalk.JiraRestClient/IssuePriority.cs b/TechTalk.JiraRestClient/IssuePriority.cs new file mode 100644 index 0000000..5c1526e --- /dev/null +++ b/TechTalk.JiraRestClient/IssuePriority.cs @@ -0,0 +1,10 @@ +namespace TechTalk.JiraRestClient +{ + public class IssuePriority + { + public string self { get; set; } + public string iconUrl { get; set; } + public string name { get; set; } + public int id { get; set; } + } +} diff --git a/TechTalk.JiraRestClient/JiraClient.cs b/TechTalk.JiraRestClient/JiraClient.cs index b103d17..6404236 100644 --- a/TechTalk.JiraRestClient/JiraClient.cs +++ b/TechTalk.JiraRestClient/JiraClient.cs @@ -340,6 +340,32 @@ public IEnumerable GetWatchers(IssueRef issue) } } + + public List FindUsers(string search) where T : JiraUser + { + try + { + var path = String.Format("user/search?username={0}", search); + var request = CreateRequest(Method.GET, path); + var response = ExecuteRequest(request); + AssertStatus(response, HttpStatusCode.OK); + + var result = deserializer.Deserialize>(response); + return result; + } + catch (Exception ex) + { + Trace.TraceError("FindUsers(issue) error: {0}", ex); + throw new JiraClientException(String.Format("Could find user {0}. {1}", search, ex)); + } + } + + public T FindUser(string search) where T : JiraUser + { + return FindUsers(search).FirstOrDefault(); + } + + public IEnumerable GetComments(IssueRef issue) { diff --git a/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj b/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj index bd93afe..6483abe 100644 --- a/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj +++ b/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj @@ -44,6 +44,7 @@ + From d6b3b9b257af2f9f47b4b3202fdf674195c2215c Mon Sep 17 00:00:00 2001 From: rmyakimenko Date: Thu, 12 Nov 2015 16:53:07 +0300 Subject: [PATCH 6/6] projects list --- TechTalk.JiraRestClient/IJiraClient.cs | 2 ++ TechTalk.JiraRestClient/JiraClient.cs | 19 +++++++++++++++++++ TechTalk.JiraRestClient/JiraProject.cs | 17 +++++++++++++++++ .../TechTalk.JiraRestClient.csproj | 1 + 4 files changed, 39 insertions(+) create mode 100644 TechTalk.JiraRestClient/JiraProject.cs diff --git a/TechTalk.JiraRestClient/IJiraClient.cs b/TechTalk.JiraRestClient/IJiraClient.cs index 30a0763..f89e1f1 100644 --- a/TechTalk.JiraRestClient/IJiraClient.cs +++ b/TechTalk.JiraRestClient/IJiraClient.cs @@ -48,6 +48,8 @@ namespace TechTalk.JiraRestClient /// Returns all watchers for the given issue IEnumerable GetWatchers(IssueRef issue); + List GetProjects() where T : JiraProject; + List FindUsers(string search) where T : JiraUser; T FindUser(string search) where T : JiraUser; diff --git a/TechTalk.JiraRestClient/JiraClient.cs b/TechTalk.JiraRestClient/JiraClient.cs index 6404236..d99ceb3 100644 --- a/TechTalk.JiraRestClient/JiraClient.cs +++ b/TechTalk.JiraRestClient/JiraClient.cs @@ -340,6 +340,25 @@ public IEnumerable GetWatchers(IssueRef issue) } } + public List GetProjects() where T: JiraProject + { + try + { + var path = "project"; + var request = CreateRequest(Method.GET, path); + + var response = ExecuteRequest(request); + AssertStatus(response, HttpStatusCode.OK); + + return deserializer.Deserialize>(response); + } + catch (Exception ex) + { + Trace.TraceError("GetProjects() error: {0}", ex); + throw new JiraClientException("Could not load projects", ex); + } + + } public List FindUsers(string search) where T : JiraUser { diff --git a/TechTalk.JiraRestClient/JiraProject.cs b/TechTalk.JiraRestClient/JiraProject.cs new file mode 100644 index 0000000..0488f55 --- /dev/null +++ b/TechTalk.JiraRestClient/JiraProject.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace TechTalk.JiraRestClient +{ + public class JiraProject + { + public string self { get; set; } + public int id { get; set; } + public string key { get; set; } + public string name { get; set; } + public string projectTypeKey { get; set; } + + } +} diff --git a/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj b/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj index 6483abe..38be586 100644 --- a/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj +++ b/TechTalk.JiraRestClient/TechTalk.JiraRestClient.csproj @@ -46,6 +46,7 @@ +