public FindServicesResponseObj FindServices([FromBody] FindServicesRequestObj findServicesObj)
        {
            log.Info("Incoming request to " + GetCurrentMethod());

            var requestString = JsonConvert.SerializeObject(findServicesObj, Formatting.Indented);

            _logEventService.LogInfo(EventNumber.SPIS_consumeService, EventDataType.None, null, requestString);

            try
            {
                var result = _sscService.FindServices(findServicesObj);

                _logEventService.LogSuccess(EventNumber.SPIS_consumeService, EventDataType.Other, null, JsonConvert.SerializeObject(result, Formatting.Indented));
                return(result);
            }
            catch (HttpResponseException ex)
            {
                _logEventService.LogError(EventNumber.SPIS_consumeService, EventType.Error_internal, null,
                                          JsonConvert.SerializeObject(requestString, Formatting.Indented) + " " + ex.Response.ToString());

                throw;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);

                string msg = "SPIS internal server error. " + ex.Message;
                _logEventService.LogError(EventNumber.SPIS_consumeService, EventType.Error_internal, null,
                                          JsonConvert.SerializeObject(requestString, Formatting.Indented) + " " + ex.Message);

                throw CreateHttpResponseException(HttpStatusCode.InternalServerError, msg);
            }
        }
Пример #2
0
        public ObservableCollection <ServiceInstance> FindServices(string coverageAreaType, string coverageArea, string unloCode, List <string> serviceProviderIds, string serviceDesignId,
                                                                   string serviceInstanceId, string mmsi, string imo, string serviceType, string serviceStatus, List <string> keyWords, string freeText, long?page, long?pageSize)
        {
            var result = new ObservableCollection <ServiceInstance>();

            var url = _visUrl + string.Format("/findServices");

            var area   = new FindServicesRequestObjFilterCoverageArea(coverageAreaType, coverageArea);
            var filter = new FindServicesRequestObjFilter(area, unloCode, serviceProviderIds, serviceDesignId, serviceInstanceId,
                                                          mmsi, imo, serviceType, serviceStatus, keyWords, freeText);
            var request = new FindServicesRequestObj(filter, page, pageSize);

            WebHeaderCollection headers = new WebHeaderCollection();

            headers.Add(HttpRequestHeader.ContentType, "application / json; charset = UTF8");

            var response = WebRequestHelper.Post(url, request.ToJson(), headers);

            try
            {
                var responseObj = JsonConvert.DeserializeObject <FindServicesResponseObj>(response.Body);
                if (responseObj != null)
                {
                    if (response.HttpStatusCode == HttpStatusCode.OK)
                    {
                        if (responseObj.StatusCode != 200)
                        {
                            MessageBox.Show(string.Format("The find service request returned status code {0}, {1}", responseObj.StatusCode, responseObj.StatusMessage));
                        }
                        try
                        {
                            if (responseObj.ServicesInstances != null)
                            {
                                foreach (var service in responseObj.ServicesInstances)
                                {
                                    result.Add(service);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(responseObj.ServicesInstances.ToArray().ToString(), ex);
                        }
                    }
                }
                else
                {
                    MessageBox.Show(string.Format("The find service request returned status code {0}, {1}", response.HttpStatusCode, response.Body));
                }
                return(result);
            }
            catch (Exception ex)
            {
                string errMessage = string.Format("Failed to get valid response from Service Registry. The reponse body does not validate towards the underlying schema: {0}", ex.Message);
                var    err        = new Exception(errMessage);
                throw err;
            }
        }
        public virtual FindServicesResponseObj FindServices(FindServicesRequestObj request)
        {
            if (request == null)
            {
                string msg      = "Invalid request.";
                var    errorMsg = new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    Content      = new StringContent(msg),
                    ReasonPhrase = "Bad request."
                };

                throw new HttpResponseException(errorMsg);
            }

            log.Info(string.Format("Sending findServices {0}, {1}, {2} request to ServiceRegistry", request.Filter, request.Page, request.PageSize));
            var result = new FindServicesResponseObj();

            try
            {
                var serviceRegService = new ServiceRegistryService();
                var response          = serviceRegService.FindServices(request);

                if (response.HttpStatusCode == HttpStatusCode.OK &&
                    !string.IsNullOrEmpty(response.Body))
                {
                    var responseObj = JsonConvert.DeserializeObject <List <ServiceInstance> >(response.Body);
                    result.ServicesInstances = responseObj;
                }

                result.StatusCode    = (int)response.HttpStatusCode;
                result.StatusMessage = response.ErrorMessage;

                return(result);
            }
            catch (HttpResponseException ex)
            {
                log.Error(ex.Message, ex);
                throw;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                string msg      = "VIS internal server error. " + ex.Message;
                var    errorMsg = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content      = new StringContent(msg),
                    ReasonPhrase = "Internal error."
                };

                throw new HttpResponseException(errorMsg);
            }
        }
Пример #4
0
        public FindServicesResponseObj FindServices([FromBody] FindServicesRequestObj findServicesObj)
        {
            log.Info("Incoming request to " + GetCurrentMethod());

            _logEventService.LogInfo(EventNumber.VIS_consumeService, EventDataType.Other, null,
                                     JsonConvert.SerializeObject(findServicesObj, Formatting.Indented));
            try
            {
                var result = _sscService.FindServices(findServicesObj);

                _logEventService.LogSuccess(EventNumber.VIS_consumeService, EventDataType.Other, null,
                                            JsonConvert.SerializeObject(result, Formatting.Indented));

                //set last interaction time
                var conInfo = _connectionInformationService.Get().FirstOrDefault();
                if (conInfo == null)
                {
                    _connectionInformationService.Insert(new ConnectionInformation {
                        LastInteraction = DateTime.UtcNow
                    });
                }
                else
                {
                    conInfo.LastInteraction = DateTime.UtcNow;
                    _connectionInformationService.Update(conInfo);
                }
                _context.SaveChanges();

                return(result);
            }
            catch (HttpResponseException ex)
            {
                _logEventService.LogError(EventNumber.VIS_consumeService, EventType.Error_internal, null,
                                          JsonConvert.SerializeObject(ex.Response, Formatting.Indented));

                throw;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);

                string msg = "VIS internal server error. " + ex.Message;
                _logEventService.LogError(EventNumber.VIS_consumeService, EventType.Error_internal, null, ex.Message);

                throw CreateHttpResponseException(HttpStatusCode.InternalServerError, msg);
            }
        }
        public ObservableCollection <ServiceInstance> FindServices(string coverageAreaType, string coverageArea, string unloCode, List <string> serviceProviderIds, string serviceDesignId,
                                                                   string serviceInstanceId, string mmsi, string imo, string serviceType, string serviceStatus, List <string> keyWords, string freeText, long?page, long?pageSize)
        {
            var result = new ObservableCollection <ServiceInstance>();

            var url = _spisUrl + string.Format("/findServices");

            var area   = new FindServicesRequestObjFilterCoverageArea(coverageAreaType, coverageArea);
            var filter = new FindServicesRequestObjFilter(area, unloCode, serviceProviderIds, serviceDesignId, serviceInstanceId,
                                                          mmsi, imo, serviceType, serviceStatus, keyWords, freeText);
            var request = new FindServicesRequestObj(filter, page, pageSize);

            WebHeaderCollection headers = new WebHeaderCollection();

            headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");

            var response = WebRequestHelper.Post(url, request.ToJson(), headers);

            var responseObj = JsonConvert.DeserializeObject <FindServicesResponseObj>(response.Body);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                try
                {
                    foreach (var service in responseObj.ServicesInstances)
                    {
                        result.Add(service);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(responseObj.ServicesInstances.ToArray().ToString(), ex);
                }
            }
            return(result);
        }
        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"));
        }