Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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]);
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
        }