/RESTTemplates/TemplateClient/RESTTemplateClient.cs
https://bitbucket.org/coalvilledave/templateronline · C# · 192 lines · 131 code · 42 blank · 19 comment · 12 complexity · 50851317390e2f8671280ec843f34253 MD5 · raw file
- namespace TemplateClient
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using RestSharp;
- using Newtonsoft.Json;
- public class RESTTemplateClient
- {
- private RestClient _client;
- public RESTTemplateClient(string url)
- {
- _client = new RestClient(url);
- }
- public string Parse(string templateName, object model)
- {
- return Parse(templateName, new List<object>() { model }).First();
- }
- public IEnumerable<string> Parse(string templateName, IEnumerable<object> models)
- {
- var results = new List<string>();
- var request = new RestRequest("templates/{id}/parse", Method.POST);
- request.RequestFormat = DataFormat.Json;
- request.AddUrlSegment("id", templateName); // replaces matching token in request.Resource
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // add files to upload (works with compatible verbs)
- request.AddBody(new { Models = models });
- // execute the request
- IRestResponse response = _client.Execute(request);
- if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
- {
- throw new RESTTemplateClientResponseException("Template with name {0} does not exist and therefore could not be parsed", templateName);
- }
- else
- {
- results.AddRange(DeserializeResult(response.Content));
- }
- return results;
- }
- public string ParseTemplate(string templateBody, object model)
- {
- return ParseTemplate(templateBody, new List<object>() { model }).First();
- }
- public IEnumerable<string> ParseTemplate(string templateBody, IEnumerable<object> models)
- {
- var results = new List<string>();
- var request = new RestRequest("templates/parse", Method.POST);
- request.RequestFormat = DataFormat.Json;
-
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // add files to upload (works with compatible verbs)
- request.AddBody(new { Template = templateBody, Models = models });
- // execute the request
- IRestResponse response = _client.Execute(request);
- results.AddRange(DeserializeResult(response.Content)); // raw content as string
- return results;
- }
- public void CreateTemplate(string templateName, string templateBody)
- {
- var request = new RestRequest("templates", Method.POST);
- request.RequestFormat = DataFormat.Json;
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // add files to upload (works with compatible verbs)
- request.AddBody(new { Name = templateName, TemplateBody = templateBody });
- // execute the request
- var response = _client.Execute(request);
- if (response.StatusCode == System.Net.HttpStatusCode.Conflict)
- {
- throw new RESTTemplateClientResponseException("Template with name {0} already exists and therefore could not be created", templateName);
- }
- }
- public void UpdateTemplate(string templateName, string templateBody)
- {
- var request = new RestRequest("templates/{id}", Method.PUT);
- request.RequestFormat = DataFormat.Json;
- request.AddUrlSegment("id", templateName);
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // add files to upload (works with compatible verbs)
- request.AddBody(new { Name = templateName, TemplateBody = templateBody });
- // execute the request
- var response = _client.Execute(request);
- if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
- {
- throw new RESTTemplateClientResponseException("Template with name {0} does not exist", templateName);
- }
- }
- public void DeleteTemplate(string templateName)
- {
- var request = new RestRequest("templates/{id}", Method.DELETE);
- request.AddUrlSegment("id", templateName);
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // execute the request
- _client.Execute(request);
- }
- public string GetTemplate(string templateName)
- {
- string result = null;
- var request = new RestRequest("templates/{id}", Method.GET);
- request.RequestFormat = DataFormat.Json;
- request.AddUrlSegment("id", templateName);
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // execute the request
- IRestResponse response = _client.Execute(request);
- if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
- {
- throw new RESTTemplateClientResponseException("Template with name {0} does not exist", templateName);
- }
- else
- {
- result = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content)["TemplateBody"];
- }
- return result;
- }
- public void RenameTemplate(string fromTemplateName, string toTemplateName)
- {
- var body = GetTemplate(fromTemplateName);
- if (body != null)
- {
- var request = new RestRequest("templates/{id}", Method.PUT);
- request.RequestFormat = DataFormat.Json;
- request.AddUrlSegment("id", fromTemplateName);
- // easily add HTTP Headers
- request.AddHeader("Content-Type", "application/json");
- // add files to upload (works with compatible verbs)
- request.AddBody(new { Name = toTemplateName, TemplateBody = body });
- // execute the request
- var response = _client.Execute(request);
- if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
- {
- throw new RESTTemplateClientResponseException("Template with name {0} does not exist", fromTemplateName);
- }
- }
- else
- {
- throw new RESTTemplateClientResponseException("Template with name {0} does not exist", fromTemplateName);
- }
- }
- private List<string> DeserializeResult(string content)
- {
- var dct = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(content);
- return dct["Results"]; // raw content as string
- }
- }
- }