コード例 #1
0
        public WebRequestHelper.WebResponse FindServices(FindServicesRequestObj data)
        {
            string url         = string.Empty;
            bool   isGeoSearch = false;

            if (data.Filter.CoverageArea != null &&
                !string.IsNullOrEmpty(data.Filter.CoverageArea.Value))
            {
                if (data.Filter.CoverageArea.CoverageType == "WKT")
                {
                    url = PATH_SEARCH_WKT.Replace("[GEOMETRY]", HttpUtility.UrlEncode(data.Filter.CoverageArea.Value));
                }
                if (data.Filter.CoverageArea.CoverageType == "GeoJSON")
                {
                    url = PATH_SEARCH_GeoJSON.Replace("[GEOMETRY]", HttpUtility.UrlEncode(data.Filter.CoverageArea.Value));
                }

                isGeoSearch = true;
            }
            else
            {
                url = PATH_SEARCH_GENERIC;
            }

            string query = string.Empty;

            if (!string.IsNullOrEmpty(data.Filter.FreeText))
            {
                if (FormatValidation.IsValidFreeText(data.Filter.FreeText))
                {
                    query = data.Filter.FreeText.Replace(":", "\\:");
                    query = HttpUtility.UrlEncode(query);
                }
                else
                {
                    string msg      = "Forbidden character(s) in freetext search string.";
                    var    errorMsg = new HttpResponseMessage(HttpStatusCode.BadRequest)
                    {
                        Content      = new StringContent(msg),
                        ReasonPhrase = "Bad request."
                    };
                    throw new HttpResponseException(errorMsg);
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(data.Filter.UnLoCode))
                {
                    query = AddToQuery(query, "unlocode", data.Filter.UnLoCode, "AND");
                }

                if (!string.IsNullOrEmpty(data.Filter.ServiceDesignId))
                {
                    query = AddToQuery(query, "designId", data.Filter.ServiceDesignId.Replace(":", "\\:"), "AND");
                }

                if (!string.IsNullOrEmpty(data.Filter.ServiceInstanceId))
                {
                    query = AddToQuery(query, "instanceId", data.Filter.ServiceInstanceId.Replace(":", "\\:"), "AND");
                }

                if (!string.IsNullOrEmpty(data.Filter.ServiceType))
                {
                    query = AddToQuery(query, "serviceType", data.Filter.ServiceType, "AND");
                }

                if (!string.IsNullOrEmpty(data.Filter.ServiceStatus))
                {
                    query = AddToQuery(query, "status", data.Filter.ServiceStatus, "AND");
                }

                if (!string.IsNullOrEmpty(data.Filter.Mmsi) && !string.IsNullOrEmpty(data.Filter.Imo))
                {
                    if (query == string.Empty)
                    {
                        query += "(";
                    }
                    else
                    {
                        query += " AND (";
                    }

                    query  = AddToQuery(query, "mmsi", data.Filter.Mmsi, "OR");
                    query  = AddToQuery(query, "imo", data.Filter.Imo, "OR");
                    query += ")";
                }
                else
                {
                    if (!string.IsNullOrEmpty(data.Filter.Mmsi))
                    {
                        query = AddToQuery(query, "mmsi", data.Filter.Mmsi, "AND");
                    }

                    if (!string.IsNullOrEmpty(data.Filter.Imo))
                    {
                        query = AddToQuery(query, "imo", data.Filter.Imo, "AND");
                    }
                }

                if (data.Filter.ServiceProviderIds != null && data.Filter.ServiceProviderIds.Count > 0)
                {
                    if (query == string.Empty)
                    {
                        query += "(";
                    }
                    else
                    {
                        query += " AND (";
                    }

                    foreach (var id in data.Filter.ServiceProviderIds)
                    {
                        query = AddToQuery(query, "organizationId", id.Replace(":", "\\:"), "OR");
                    }
                    query += ")";
                }

                if (data.Filter.ServiceProviderIds != null && data.Filter.ServiceProviderIds.Count > 0)
                {
                    if (query == string.Empty)
                    {
                        query += "(";
                    }
                    else
                    {
                        query += " AND (";
                    }

                    foreach (var id in data.Filter.ServiceProviderIds)
                    {
                        query = AddToQuery(query, "organizationId", id.Replace(":", "\\:"), "OR");
                    }
                    query += ")";
                }

                if (data.Filter.KeyWords != null && data.Filter.KeyWords.Count > 0)
                {
                    if (query == string.Empty)
                    {
                        query += "(";
                    }
                    else
                    {
                        query += " AND (";
                    }

                    foreach (var id in data.Filter.KeyWords)
                    {
                        query = AddToQuery(query, "keywords", id.Replace(":", "\\:"), "AND");
                    }
                    query += ")";
                }
            }

            if (string.IsNullOrEmpty(query) && !isGeoSearch)
            {
                url = PATH_ALL;
            }

            if (data.Page != null)
            {
                if (url == PATH_ALL)
                {
                    query += "?page=" + data.Page.ToString();
                }
                else
                {
                    query += "&page=" + data.Page.ToString();
                }
            }
            if (data.PageSize != null)
            {
                query += "&size=" + data.PageSize.ToString();
            }

            return(MakeGenericCall(url + query, "GET"));
        }