コード例 #1
0
        /// <summary>
        /// Get the specified request.
        /// </summary>
        /// <param name="request">Request.</param>
        public object Get(GetOpensearchSearch request)
        {
            var context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);
            IOpenSearchResultCollection result = null;

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/collection/{{serieId}}/search GET serieId='{0}'", request.serieId));

                // Load the complete request
                HttpRequest httpRequest = HttpContext.Current.Request;

                if (request.serieId == null)
                {
                    throw new ArgumentNullException(Terradue.Tep.WebServer.CustomErrorMessages.WRONG_IDENTIFIER);
                }

                Terradue.Tep.Collection serie = Terradue.Tep.Collection.FromIdentifier(context, request.serieId);

                OpenSearchEngine ose = MasterCatalogue.OpenSearchEngine;
                ose.DefaultTimeOut = 60000;

                Type type = OpenSearchFactory.ResolveTypeFromRequest(httpRequest.QueryString, httpRequest.Headers, ose);

                result = ose.Query(serie, httpRequest.QueryString, type);

                var descriptionUrl = serie.GetDescriptionBaseUrl("application/opensearchdescription+xml");
                if (descriptionUrl != null)
                {
                    result.Links.Add(new SyndicationLink(new Uri(descriptionUrl.Template), descriptionUrl.Relation, "OpenSearch Description link", descriptionUrl.Type, 0));
                }

                MasterCatalogue.ReplaceSelfLinksFormat(result, Request.QueryString);

                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }

            return(new HttpResult(result.SerializeToString(), result.ContentType));
        }
コード例 #2
0
        public object Get(CollectionGetDensityRequestTep request)
        {
            var    context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);
            string result  = "";

            try {
                context.Open();
                context.LogInfo(this, string.Format("/data/collection/{{serieId}}/tdensity GET serieId='{0}'", request.CollId));

                Terradue.Tep.Collection serie = Terradue.Tep.Collection.FromIdentifier(context, request.CollId);
                var OSDD        = serie.GetOpenSearchDescription();
                var tdensityUrl = OSDD.Url.First(p => p.Type == "application/tdensity+json");
                if (tdensityUrl != null)
                {
                    var query       = HttpContext.Current.Request.QueryString;
                    var urib        = new UriBuilder(tdensityUrl.Template);
                    var queryString = Array.ConvertAll(query.AllKeys, key => string.Format("{0}={1}", key, query[key]));
                    urib.Query = string.Join("&", queryString);

                    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(urib.Uri.AbsoluteUri);
                    using (var resp = httpRequest.GetResponse()) {
                        using (var stream = resp.GetResponseStream()) {
                            StreamReader reader = new StreamReader(stream);
                            result = reader.ReadToEnd();
                        }
                    }
                }

                context.Close();
            } catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }
            return(result);
        }
コード例 #3
0
        /*				!
         * \fn Get(Getseries request)
         * \brief Response to the Get request with a Getseries object (get the complete list of series)
         * \param request request content
         * \return the series list
         */
        public object Get(GetOpensearchDescription request)
        {
            OpenSearchDescription OSDD;
            var context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);

            try{
                context.Open();
                context.LogInfo(this, string.Format("/data/collection/{{serieId}}/description GET serieId='{0}'", request.serieId));

                UriBuilder baseUrl = new UriBuilder(context.BaseUrl);

                if (request.serieId == null)
                {
                    throw new ArgumentNullException(Terradue.Tep.WebServer.CustomErrorMessages.WRONG_IDENTIFIER);
                }

                Terradue.Tep.Collection serie = Terradue.Tep.Collection.FromIdentifier(context, request.serieId);

                // The new URL template list
                Hashtable           newUrls = new Hashtable();
                UriBuilder          urib;
                NameValueCollection query = new NameValueCollection();

                urib = new UriBuilder(baseUrl.ToString());

                OSDD = serie.GetOpenSearchDescription();

                foreach (var url in OSDD.Url)
                {
                    string path = "";
                    switch (url.Type)
                    {
                    case "application/opensearchdescription+xml":
                        path = baseUrl.Path + "/data/collection/" + serie.Identifier + "/description";
                        break;

                    case "application/tdensity+json":
                        path = baseUrl.Path + "/data/collection/" + serie.Identifier + "/tdensity";
                        break;

                    default:
                        path = baseUrl.Path + "/data/collection/" + serie.Identifier + "/search";
                        break;
                    }

                    var queryUrl = url.Template != null && url.Template.IndexOf("?") >= 0 ? url.Template.Substring(url.Template.IndexOf("?")) : "";

                    var urlB = new UriBuilder(context.BaseUrl);
                    urlB.Path    = path;
                    url.Template = urlB.Uri.AbsoluteUri + queryUrl;
                }

                context.Close();
            }catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }
            HttpResult hr = new HttpResult(OSDD, "application/opensearchdescription+xml");

            return(hr);
        }