/RESTTemplates/TemplateClient/RESTTemplateClient.cs

https://bitbucket.org/coalvilledave/templateronline · C# · 192 lines · 131 code · 42 blank · 19 comment · 12 complexity · 50851317390e2f8671280ec843f34253 MD5 · raw file

  1. namespace TemplateClient
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using RestSharp;
  8. using Newtonsoft.Json;
  9. public class RESTTemplateClient
  10. {
  11. private RestClient _client;
  12. public RESTTemplateClient(string url)
  13. {
  14. _client = new RestClient(url);
  15. }
  16. public string Parse(string templateName, object model)
  17. {
  18. return Parse(templateName, new List<object>() { model }).First();
  19. }
  20. public IEnumerable<string> Parse(string templateName, IEnumerable<object> models)
  21. {
  22. var results = new List<string>();
  23. var request = new RestRequest("templates/{id}/parse", Method.POST);
  24. request.RequestFormat = DataFormat.Json;
  25. request.AddUrlSegment("id", templateName); // replaces matching token in request.Resource
  26. // easily add HTTP Headers
  27. request.AddHeader("Content-Type", "application/json");
  28. // add files to upload (works with compatible verbs)
  29. request.AddBody(new { Models = models });
  30. // execute the request
  31. IRestResponse response = _client.Execute(request);
  32. if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
  33. {
  34. throw new RESTTemplateClientResponseException("Template with name {0} does not exist and therefore could not be parsed", templateName);
  35. }
  36. else
  37. {
  38. results.AddRange(DeserializeResult(response.Content));
  39. }
  40. return results;
  41. }
  42. public string ParseTemplate(string templateBody, object model)
  43. {
  44. return ParseTemplate(templateBody, new List<object>() { model }).First();
  45. }
  46. public IEnumerable<string> ParseTemplate(string templateBody, IEnumerable<object> models)
  47. {
  48. var results = new List<string>();
  49. var request = new RestRequest("templates/parse", Method.POST);
  50. request.RequestFormat = DataFormat.Json;
  51. // easily add HTTP Headers
  52. request.AddHeader("Content-Type", "application/json");
  53. // add files to upload (works with compatible verbs)
  54. request.AddBody(new { Template = templateBody, Models = models });
  55. // execute the request
  56. IRestResponse response = _client.Execute(request);
  57. results.AddRange(DeserializeResult(response.Content)); // raw content as string
  58. return results;
  59. }
  60. public void CreateTemplate(string templateName, string templateBody)
  61. {
  62. var request = new RestRequest("templates", Method.POST);
  63. request.RequestFormat = DataFormat.Json;
  64. // easily add HTTP Headers
  65. request.AddHeader("Content-Type", "application/json");
  66. // add files to upload (works with compatible verbs)
  67. request.AddBody(new { Name = templateName, TemplateBody = templateBody });
  68. // execute the request
  69. var response = _client.Execute(request);
  70. if (response.StatusCode == System.Net.HttpStatusCode.Conflict)
  71. {
  72. throw new RESTTemplateClientResponseException("Template with name {0} already exists and therefore could not be created", templateName);
  73. }
  74. }
  75. public void UpdateTemplate(string templateName, string templateBody)
  76. {
  77. var request = new RestRequest("templates/{id}", Method.PUT);
  78. request.RequestFormat = DataFormat.Json;
  79. request.AddUrlSegment("id", templateName);
  80. // easily add HTTP Headers
  81. request.AddHeader("Content-Type", "application/json");
  82. // add files to upload (works with compatible verbs)
  83. request.AddBody(new { Name = templateName, TemplateBody = templateBody });
  84. // execute the request
  85. var response = _client.Execute(request);
  86. if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
  87. {
  88. throw new RESTTemplateClientResponseException("Template with name {0} does not exist", templateName);
  89. }
  90. }
  91. public void DeleteTemplate(string templateName)
  92. {
  93. var request = new RestRequest("templates/{id}", Method.DELETE);
  94. request.AddUrlSegment("id", templateName);
  95. // easily add HTTP Headers
  96. request.AddHeader("Content-Type", "application/json");
  97. // execute the request
  98. _client.Execute(request);
  99. }
  100. public string GetTemplate(string templateName)
  101. {
  102. string result = null;
  103. var request = new RestRequest("templates/{id}", Method.GET);
  104. request.RequestFormat = DataFormat.Json;
  105. request.AddUrlSegment("id", templateName);
  106. // easily add HTTP Headers
  107. request.AddHeader("Content-Type", "application/json");
  108. // execute the request
  109. IRestResponse response = _client.Execute(request);
  110. if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
  111. {
  112. throw new RESTTemplateClientResponseException("Template with name {0} does not exist", templateName);
  113. }
  114. else
  115. {
  116. result = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content)["TemplateBody"];
  117. }
  118. return result;
  119. }
  120. public void RenameTemplate(string fromTemplateName, string toTemplateName)
  121. {
  122. var body = GetTemplate(fromTemplateName);
  123. if (body != null)
  124. {
  125. var request = new RestRequest("templates/{id}", Method.PUT);
  126. request.RequestFormat = DataFormat.Json;
  127. request.AddUrlSegment("id", fromTemplateName);
  128. // easily add HTTP Headers
  129. request.AddHeader("Content-Type", "application/json");
  130. // add files to upload (works with compatible verbs)
  131. request.AddBody(new { Name = toTemplateName, TemplateBody = body });
  132. // execute the request
  133. var response = _client.Execute(request);
  134. if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
  135. {
  136. throw new RESTTemplateClientResponseException("Template with name {0} does not exist", fromTemplateName);
  137. }
  138. }
  139. else
  140. {
  141. throw new RESTTemplateClientResponseException("Template with name {0} does not exist", fromTemplateName);
  142. }
  143. }
  144. private List<string> DeserializeResult(string content)
  145. {
  146. var dct = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(content);
  147. return dct["Results"]; // raw content as string
  148. }
  149. }
  150. }