/// <summary> /// Returns the fields' metadata for the given entity type /// </summary> public async Task <ListResult <FieldMetadata> > GetFieldsMetadataAsync(IRequestContext context, string entityType) { if (context == null) { throw new ArgumentNullException("context"); } if (string.IsNullOrEmpty(entityType)) { throw new ArgumentException("entityType parameter is null or empty"); } string url = context.GetPath() + "/metadata/fields"; var query = new List <QueryPhrase> { new LogicalQueryPhrase(FieldMetadata.ENTITY_NAME_FIELD, entityType) }; var queryString = QueryStringBuilder.BuildQueryString(query); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); if (response.Data == null) { return(null); } return(jsonSerializer.Deserialize <ListResult <FieldMetadata> >(response.Data)); }
public async Task DeleteByFilterAsync <T>(IRequestContext context, IList <QueryPhrase> queryPhrases) where T : BaseEntity { String collectionName = EntityTypeRegistry.GetInstance().GetCollectionName(typeof(T)); String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, null, null, null, null, null, null); string url = context.GetPath() + "/" + collectionName + "?" + queryString; ResponseWrapper response = await rc.ExecuteDeleteAsync(url).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); }
public void BuildCrossFieldNullPhrase() { var phrase = new CrossQueryPhrase("parent_suite", NullQueryPhrase.Null); var phrases = new List <QueryPhrase>(new[] { phrase }); string raw = QueryStringBuilder.BuildQueryString(phrases); Assert.AreEqual("query=\"parent_suite={null}\"", raw); }
public void DeleteByFilter <T>(IRequestContext context, IList <QueryPhrase> queryPhrases) where T : BaseEntity { String collectionName = GetCollectionName <T>(); String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, null, null, null, null, null); string url = context.GetPath() + "/" + collectionName + "?" + queryString; ResponseWrapper response = rc.ExecuteDelete(url); }
private async Task <BaseEntity> GetByIdInternalAsync(IRequestContext context, EntityId id, Type entityType, IList <String> fields) { String collectionName = EntityTypeRegistry.GetInstance().GetCollectionName(entityType); string url = context.GetPath() + "/" + collectionName + "/" + id; String queryString = QueryStringBuilder.BuildQueryString(null, fields, null, null, null, null, null); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); BaseEntity result = (BaseEntity)jsonSerializer.Deserialize(response.Data, entityType); return(result); }
private async Task <BaseEntity> UpdateInternalAsync(IRequestContext context, BaseEntity entity, Type entityType, Dictionary <string, string> serviceArguments, IList <string> fieldsToReturn) { String collectionName = EntityTypeRegistry.GetInstance().GetCollectionName(entityType); String queryString = QueryStringBuilder.BuildQueryString(null, fieldsToReturn, null, null, null, null, serviceArguments); string url = context.GetPath() + "/" + collectionName + "/" + entity.Id; String data = jsonSerializer.Serialize(entity); ResponseWrapper response = await rc.ExecutePutAsync(url, queryString, data).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); BaseEntity result = (BaseEntity)jsonSerializer.Deserialize(response.Data, entityType); return(result); }
/// <summary> /// Search for all entities of given type that satify the search criteria /// </summary> public async Task <EntityListResult <T> > SearchAsync <T>(IRequestContext context, string searchString, List <string> subTypes, int limit = 30) where T : BaseEntity { if (context == null) { throw new ArgumentNullException("context"); } if (string.IsNullOrEmpty(searchString)) { throw new ArgumentException("searchString parameter is null or empty"); } if (limit <= 0) { throw new ArgumentException("search limit should be greater than 0"); } string url = context.GetPath() + "/" + EntityTypeRegistry.GetInstance().GetCollectionName(typeof(T)); List <QueryPhrase> query = null; if (subTypes != null && subTypes.Count > 0) { query = new List <QueryPhrase> { new InQueryPhrase("subtype", subTypes) }; } var serviceArguments = new Dictionary <string, string> { { "text_search", "{\"type\":\"global\",\"text\":\"" + searchString + "\"}" } }; var queryString = QueryStringBuilder.BuildQueryString(query, null, "id", null, limit, null, serviceArguments); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); EntityListResult <T> result = jsonSerializer.Deserialize <EntityListResult <T> >(response.Data); foreach (var entity in result.data) { var searchResult = entity.GetValue("global_text_search_result") as BaseEntity; if (searchResult == null) { continue; } entity.SetValue("name", searchResult.GetValue("name")); entity.SetValue("description", searchResult.GetValue("description")); } return(result); }
public async Task <EntityListResult <BaseEntity> > GetAsyncReferenceFields(IRequestContext context, String apiEntityName, IList <QueryPhrase> queryPhrases, List <String> fields, int?limit) { string url = context.GetPath() + "/" + apiEntityName; String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, fields, null, null, limit, null, null); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); if (response.Data != null) { EntityListResult <BaseEntity> result = jsonSerializer.Deserialize <EntityListResult <BaseEntity> >(response.Data); return(result); } return(null); }
public async Task <EntityListResult <T> > GetAsync <T>(IRequestContext context, IList <QueryPhrase> queryPhrases, List <String> fields, int?limit) where T : BaseEntity { String collectionName = EntityTypeRegistry.GetInstance().GetCollectionName(typeof(T)); string url = context.GetPath() + "/" + collectionName; String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, fields, null, null, limit, null, null); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); if (response.Data != null) { EntityListResult <T> result = jsonSerializer.Deserialize <EntityListResult <T> >(response.Data); return(result); } return(null); }
public async Task <Attachment> AttachToEntityAsync(IRequestContext context, BaseEntity entity, string fileName, byte[] content, string contentType, string[] fieldsToReturn) { String queryString = QueryStringBuilder.BuildQueryString(null, fieldsToReturn, null, null, null, null, null); string url = context.GetPath() + "/attachments?" + queryString; string attachmentEntity = null; if (entity != null) { attachmentEntity = string.Format("{0}\"name\":\"{2}\",\"owner_{3}\":{0}\"type\":\"{3}\",\"id\":\"{4}\"{1}{1}", "{", "}", fileName, entity.AggregateType, entity.Id.ToString()); } ResponseWrapper response = await rc.SendMultiPartAsync(url, content, contentType, fileName, attachmentEntity).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); EntityListResult <Attachment> result = jsonSerializer.Deserialize <EntityListResult <Attachment> >(response.Data); return((Attachment)result.data[0]); }
public T GetById <T>(IRequestContext context, long id, IList <String> fields) where T : BaseEntity { String collectionName = GetCollectionName <T>(); string url = context.GetPath() + "/" + collectionName + "/" + id; String queryString = QueryStringBuilder.BuildQueryString(null, fields, null, null, null, null); if (!String.IsNullOrEmpty(queryString)) { url = url + "?" + queryString; } ResponseWrapper response = rc.ExecuteGet(url); T result = jsonSerializer.Deserialize <T>(response.Data); return(result); }
/// <summary> /// Performs request to a specified API method /// </summary> /// <typeparam name="T">Response type</typeparam> /// <param name="path">API method path, e.g. "create_task"</param> /// <param name="parameters">Dictionary<string, string> OR raw string</param> public QencodeApiResponse Request <T>(string path, object parameters) { lastResponseRaw = null; lastResponse = null; string requestUrl = null; if (path.ToLower().IndexOf("http") == 0) { requestUrl = path; } else { requestUrl = this.url + "/" + this.version + "/" + path.Trim('/'); } if (parameters != null && !(parameters is String)) { parameters = QueryStringBuilder.BuildQueryString(parameters); } try { lastResponseRaw = HttpPost(requestUrl, parameters as string); } catch (Exception e) { throw new QencodeException("Error executing request to url: " + requestUrl, e); } var response = JsonConvert.DeserializeObject <T>(lastResponseRaw) as QencodeApiResponse; if (response == null || response.error == null) { throw new QencodeException("Invalid API response", lastResponseRaw); } if (response.error != 0) { throw new QencodeApiException(response.message); } return(response); }
public async Task <GroupResult> GetWithGroupByAsync <T>(IRequestContext context, IList <QueryPhrase> queryPhrases, String groupBy) where T : BaseEntity { String collectionName = EntityTypeRegistry.GetInstance().GetCollectionName(typeof(T)); string url = context.GetPath() + "/" + collectionName + "/groups"; // Octane group API now return logical name by default as ID field, // this parameter change this to return numeric ID. var serviceArgs = new Dictionary <string, string>(); serviceArgs.Add("use_numeric_id", "true"); string queryString = QueryStringBuilder.BuildQueryString(queryPhrases, null, null, null, null, groupBy, serviceArgs); ResponseWrapper response = await rc.ExecuteGetAsync(url, queryString).ConfigureAwait(RestConnector.AwaitContinueOnCapturedContext); if (response.Data != null) { GroupResult result = jsonSerializer.Deserialize <GroupResult>(response.Data); return(result); } return(null); }
public EntityListResult <T> Get <T>(IRequestContext context, IList <QueryPhrase> queryPhrases, List <String> fields, int?limit) where T : BaseEntity { String collectionName = GetCollectionName <T>(); string url = context.GetPath() + "/" + collectionName; String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, fields, null, null, limit, null); if (!String.IsNullOrEmpty(queryString)) { url = url + "?" + queryString; } ResponseWrapper response = rc.ExecuteGet(url); if (response.Data != null) { EntityListResult <T> result = jsonSerializer.Deserialize <EntityListResult <T> >(response.Data); return(result); } return(null); }
public GroupResult GetWithGroupBy <T>(IRequestContext context, IList <QueryPhrase> queryPhrases, String groupBy) where T : BaseEntity { String collectionName = GetCollectionName <T>(); string url = context.GetPath() + "/" + collectionName + "/groups"; String queryString = QueryStringBuilder.BuildQueryString(queryPhrases, null, null, null, null, groupBy); if (!String.IsNullOrEmpty(queryString)) { url = url + "?" + queryString; } ResponseWrapper response = rc.ExecuteGet(url); if (response.Data != null) { GroupResult result = jsonSerializer.Deserialize <GroupResult>(response.Data); return(result); } return(null); }