/// <summary> /// Removes a resource from the syndication data source. /// </summary> /// <param name="request">The request from the syndication data source for the resource to be removed.</param> /// <param name="entry">the resource that is being deleted</param> /// <returns><b>true</b> if the syndication resource was successfully deleted; otherwise, <b>false</b>.</returns> public virtual bool DeleteEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); try { var url = request.ToString(); var eTag = entry != null?entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Delete, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(true); } var operation = new RequestOperation(HttpMethod.Delete) { ETag = eTag }; var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); return(response.StatusCode == HttpStatusCode.OK); } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Adds a url to the batch for processing /// </summary> /// <param name="item">url for batch item</param> public void AddToBatch(SDataBatchRequestItem item) { Guard.ArgumentNotNull(item, "item"); var uri = new SDataUri(item.Url) { CollectionPredicate = null, Query = null }; if (uri.PathSegments.Length > 3) { uri.PathSegments = uri.PathSegments.Take(3).ToArray(); } var baseUri = uri.ToString(); var request = _requests.LastOrDefault(x => x.ToString() == baseUri); if (request == null) { throw new InvalidOperationException("Unable to find an appropriate batch request in progress"); } request.Requests.Add(item); }
/// <summary> /// Adds a url to the batch for processing /// </summary> /// <param name="item">url for batch item</param> /// <returns>True if an appropriate pending batch operation was found</returns> public bool AddToBatch(SDataBatchRequestItem item) { Guard.ArgumentNotNull(item, "item"); var uri = new SDataUri(item.Url) { CollectionPredicate = null, Query = null }; if (uri.PathSegments.Length > 4) { uri.TrimRange(4, uri.PathSegments.Length - 4); } uri.AppendPath("$batch"); var baseUri = uri.ToString(); var request = _requests.LastOrDefault(x => string.Equals(x.ToString(), baseUri, StringComparison.InvariantCultureIgnoreCase)); if (request != null) { request.Items.Add(item); return true; } return false; }
/// <summary> /// Adds a new syndication resource to the data source. /// </summary> /// <param name="request">The request that identifies the resource within the syndication data source.</param> /// <param name="entry">The entry that should be created.</param> public virtual AtomEntry CreateEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); Guard.ArgumentNotNull(entry, "entry"); try { var url = request.ToString(); var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Post, Entry = entry }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(null); } var operation = new RequestOperation(HttpMethod.Post, entry); return(ExecuteEntryRequest(url, operation)); } catch (SDataClientException) { throw; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Adds a url to the batch for processing /// </summary> /// <param name="item">url for batch item</param> /// <returns>True if an appropriate pending batch operation was found</returns> public bool AddToBatch(SDataBatchRequestItem item) { Guard.ArgumentNotNull(item, "item"); var uri = new SDataUri(item.Url) { CollectionPredicate = null, Query = null }; if (uri.PathSegments.Length > 4) { uri.TrimRange(4, uri.PathSegments.Length - 4); } uri.AppendPath("$batch"); var baseUri = uri.ToString(); var request = _requests.LastOrDefault(x => string.Equals(x.ToString(), baseUri, StringComparison.InvariantCultureIgnoreCase)); if (request != null) { request.Items.Add(item); return(true); } return(false); }
/// <summary> /// Adds a url to the batch for processing /// </summary> /// <param name="item">url for batch item</param> /// <returns>True if an appropriate pending batch operation was found</returns> public bool AddToBatch(SDataBatchRequestItem item) { Guard.ArgumentNotNull(item, "item"); var id = GetBatchKey(item.Url, "$batch"); var request = _requests.LastOrDefault(x => string.Equals(GetBatchKey(x.ToString()), id, StringComparison.InvariantCultureIgnoreCase)); if (request != null) { request.Items.Add(item); return(true); } return(false); }
/// <summary> /// Adds a url to the batch for processing /// </summary> /// <param name="item">url for batch item</param> /// <returns>True if an appropriate pending batch operation was found</returns> public bool AddToBatch(SDataBatchRequestItem item) { Guard.ArgumentNotNull(item, "item"); var id = GetBatchKey(item.Url, "$batch"); var request = _requests.LastOrDefault(x => string.Equals(GetBatchKey(x.ToString()), id, StringComparison.InvariantCultureIgnoreCase)); if (request != null) { request.Items.Add(item); return true; } return false; }
public void BatchProcess_AddItemWithUnsuitableRequest() { var service = new SDataService("http://localhost:59213/sdata/aw/dynamic/-/"); using (var request = new SDataBatchRequest(service) {ResourceKind = "employees"}) { var item = new SDataBatchRequestItem { Url = "http://localhost:59213/sdata/aw/dynamic/-/contacts" }; var added = BatchProcess.Instance.AddToBatch(item); Assert.That(added, Is.False); Assert.That(request.Items, Is.Empty); } }
private AtomEntry CreateEntry(string url, AtomEntry entry) { Guard.ArgumentNotNull(entry, "entry"); try { var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Post, Entry = entry }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(null); } var operation = new RequestOperation(HttpMethod.Post, entry); var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); var result = response.Content as AtomEntry; if (result == null) { var feedResult = response.Content as AtomFeed; if (feedResult != null) { result = feedResult.Entries.FirstOrDefault(); } } if (!string.IsNullOrEmpty(response.ETag) && result != null) { result.SetSDataHttpETag(response.ETag); } return(result); } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Reads resource information from the data source based on the URL and the ETag of the specified entry. /// </summary> /// <param name="request"></param> /// <param name="entry"></param> /// <returns></returns> public virtual AtomEntry ReadEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); try { var requestUrl = request.ToString(); var eTag = entry != null?entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = requestUrl, Method = HttpMethod.Get, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(null); } var operation = new RequestOperation(HttpMethod.Get) { ETag = eTag }; var response = ExecuteRequest(requestUrl, operation, MediaType.AtomEntry, MediaType.Xml); entry = (AtomEntry)response.Content; if (!string.IsNullOrEmpty(response.ETag)) { entry.SetSDataHttpETag(response.ETag); } return(entry); } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
private AtomEntry UpdateEntry(string url, AtomEntry entry) { Guard.ArgumentNotNull(entry, "entry"); try { var eTag = entry.GetSDataHttpETag(); var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Put, Entry = entry, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(null); } var operation = new RequestOperation(HttpMethod.Put, entry) { ETag = eTag }; var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); entry = (AtomEntry)response.Content; if (!string.IsNullOrEmpty(response.ETag)) { entry.SetSDataHttpETag(response.ETag); } return(entry); } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Reads resource information from the data source based on the URL and the ETag of the specified entry. /// </summary> /// <param name="request"></param> /// <param name="entry"></param> /// <returns></returns> public virtual AtomEntry ReadEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); try { var url = request.ToString(); var eTag = entry != null?entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Get, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return(null); } var operation = new RequestOperation(HttpMethod.Get) { ETag = eTag }; return(ExecuteEntryRequest(url, operation)); } catch (SDataClientException) { throw; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Removes a resource from the syndication data source. /// </summary> /// <param name="request">The request from the syndication data source for the resource to be removed.</param> /// <param name="entry">the resource that is being deleted</param> /// <returns><b>true</b> if the syndication resource was successfully deleted; otherwise, <b>false</b>.</returns> public virtual bool DeleteEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); try { var url = request.ToString(); var eTag = entry != null ? entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Delete, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return true; } var operation = new RequestOperation(HttpMethod.Delete) {ETag = eTag}; var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); return response.StatusCode == HttpStatusCode.OK; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
private AtomEntry UpdateEntry(string url, AtomEntry entry) { Guard.ArgumentNotNull(entry, "entry"); try { var eTag = entry.GetSDataHttpETag(); var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Put, Entry = entry, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return null; } var operation = new RequestOperation(HttpMethod.Put, entry) {ETag = eTag}; var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); entry = (AtomEntry) response.Content; if (!string.IsNullOrEmpty(response.ETag)) { entry.SetSDataHttpETag(response.ETag); } return entry; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
private bool DeleteEntry(string url, AtomEntry entry) { try { var eTag = entry != null ? entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Delete, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return true; } var operation = new RequestOperation(HttpMethod.Delete) {ETag = eTag}; var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); return response.StatusCode == HttpStatusCode.OK; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
private AtomEntry CreateEntry(string url, AtomEntry entry) { Guard.ArgumentNotNull(entry, "entry"); try { var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Post, Entry = entry }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return null; } var operation = new RequestOperation(HttpMethod.Post, entry); var response = ExecuteRequest(url, operation, MediaType.AtomEntry, MediaType.Xml); var result = response.Content as AtomEntry; if (result == null) { var feedResult = response.Content as AtomFeed; if (feedResult != null) { result = feedResult.Entries.FirstOrDefault(); } } if (!string.IsNullOrEmpty(response.ETag) && result != null) { result.SetSDataHttpETag(response.ETag); } return result; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
/// <summary> /// Reads resource information from the data source based on the URL and the ETag of the specified entry. /// </summary> /// <param name="request"></param> /// <param name="entry"></param> /// <returns></returns> public virtual AtomEntry ReadEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); try { var requestUrl = request.ToString(); var eTag = entry != null ? entry.GetSDataHttpETag() : null; var batchItem = new SDataBatchRequestItem { Url = requestUrl, Method = HttpMethod.Get, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return null; } var operation = new RequestOperation(HttpMethod.Get) {ETag = eTag}; var response = ExecuteRequest(requestUrl, operation, MediaType.AtomEntry, MediaType.Xml); entry = (AtomEntry) response.Content; if (!string.IsNullOrEmpty(response.ETag)) { entry.SetSDataHttpETag(response.ETag); } return entry; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }
public void BatchProcess_AddItemWithoutRequest() { var item = new SDataBatchRequestItem(); var added = BatchProcess.Instance.AddToBatch(item); Assert.That(added, Is.False); }
/// <summary> /// Updates information about a syndication resource in the data source. /// </summary> /// <param name="request">The url from the syndication data source for the resource to be updated.</param> /// <param name="entry"> /// An object that implements the <see cref="ISyndicationResource"/> interface that represents the updated information for the resource. /// </param> public virtual AtomEntry UpdateEntry(SDataBaseRequest request, AtomEntry entry) { Guard.ArgumentNotNull(request, "request"); Guard.ArgumentNotNull(entry, "entry"); try { var url = request.ToString(); var eTag = entry.GetSDataHttpETag(); var batchItem = new SDataBatchRequestItem { Url = url, Method = HttpMethod.Put, Entry = entry, ETag = eTag }; if (BatchProcess.Instance.AddToBatch(batchItem)) { return null; } var operation = new RequestOperation(HttpMethod.Put, entry) {ETag = eTag}; return ExecuteEntryRequest(url, operation); } catch (SDataClientException) { throw; } catch (Exception ex) { throw new SDataClientException(ex.Message, ex); } }