public NameValueCollection GetOpenSearchParameters(string mimeType)
        {
            var parameters = openSearchable.GetOpenSearchParameters(mimeType);

            parameters.Set("do", "{t2:downloadOrigin?}");
            return(parameters);
        }
        private NameValueCollection PrepareQueryParameters(IOpenSearchable entity)
        {
            NameValueCollection nvc = new NameValueCollection();

            totalResults = 0;

            foreach (string parameter in parameterArgs)
            {
                Match matchParamDef = Regex.Match(parameter, @"^(.*)=(.*)$");
                // if martch is successful
                if (matchParamDef.Success)
                {
                    // TODO filter and convert query param
                    if (matchParamDef.Groups[1].Value == "count")
                    {
                        if (matchParamDef.Groups[2].Value == "unlimited")
                        {
                            nvc.Add(matchParamDef.Groups[1].Value, pagination.ToString());
                            totalResults = int.MaxValue;
                            continue;
                        }
                        totalResults = int.Parse(matchParamDef.Groups[2].Value);
                        if (totalResults > pagination)
                        {
                            nvc.Add(matchParamDef.Groups[1].Value, pagination.ToString());
                            continue;
                        }
                    }
                    nvc.Add(matchParamDef.Groups[1].Value, matchParamDef.Groups[2].Value);
                }
            }

            if (totalResults == 0)
            {
                totalResults = pagination;
                nvc.Add("count", pagination.ToString());
            }

            NameValueCollection remoteParams = entity.GetOpenSearchParameters(entity.DefaultMimeType);

            if (remoteParams["do"] != null && nvc["do"] == null)
            {
                if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DOWNLOAD_ORIGIN")))
                {
                    nvc["do"] = Environment.GetEnvironmentVariable("DOWNLOAD_ORIGIN");
                }
                else
                {
                    nvc["do"] = Dns.GetHostName();
                }
            }

            dataModel.SetQueryParameters(nvc);

            return(nvc);
        }
        private NameValueCollection ResolveParameters(NameValueCollection nameValueCollection, IOpenSearchable entity)
        {
            string contentType = entity.DefaultMimeType;

            NameValueCollection osdParam     = entity.GetOpenSearchParameters(contentType);
            NameValueCollection osdRevParams = OpenSearchFactory.ReverseTemplateOpenSearchParameters(osdParam);
            NameValueCollection parameters   = new NameValueCollection();

            foreach (string key in nameValueCollection.AllKeys)
            {
                if (osdRevParams[key] != null)
                {
                    foreach (string id in osdRevParams.GetValues(key))
                    {
                        parameters.Set(id, nameValueCollection[key]);
                    }
                }
                else
                {
                    parameters.Set(key, nameValueCollection[key]);
                }
            }
            return(parameters);
        }
        NameValueCollection ResolveParameters(NameValueCollection nameValueCollection, IOpenSearchable entity)
        {
            string contentType = entity.DefaultMimeType;

            NameValueCollection osdParam = entity.GetOpenSearchParameters(contentType);
            NameValueCollection osdRevParams = OpenSearchFactory.ReverseTemplateOpenSearchParameters(osdParam);
            NameValueCollection parameters = new NameValueCollection();

            foreach (string key in nameValueCollection.AllKeys)
            {

                if (osdRevParams[key] != null)
                {
                    foreach (var id in osdRevParams.GetValues(key))
                        parameters.Set(id, nameValueCollection[key]);
                }
                else {
                    parameters.Set(key, nameValueCollection[key]);
                }
            }
            return parameters;
        }
        NameValueCollection PrepareQueryParameters(IOpenSearchable entity)
        {
            NameValueCollection nvc = new NameValueCollection();
            totalResults = 0;

            foreach (var parameter in parameterArgs)
            {
                Match matchParamDef = Regex.Match(parameter, @"^(.*)=(.*)$");
                // if martch is successful
                if (matchParamDef.Success)
                {
                    // TODO filter and convert query param
                    if (matchParamDef.Groups[1].Value == "count")
                    {
                        if (matchParamDef.Groups[2].Value == "unlimited")
                        {
                            nvc.Add(matchParamDef.Groups[1].Value, pagination.ToString());
                            totalResults = int.MaxValue;
                            continue;
                        }
                        totalResults = int.Parse(matchParamDef.Groups[2].Value);
                        if (totalResults > pagination)
                        {
                            nvc.Add(matchParamDef.Groups[1].Value, pagination.ToString());
                            continue;
                        }
                    }
                    nvc.Add(matchParamDef.Groups[1].Value, matchParamDef.Groups[2].Value);

                }

            }

            if (totalResults == 0)
            {
                totalResults = pagination;
                nvc.Add("count", pagination.ToString());
            }

            var remoteParams = entity.GetOpenSearchParameters(entity.DefaultMimeType);

            if (remoteParams["do"] != null && nvc["do"] == null)
            {
                nvc["do"] = Dns.GetHostName();
            }

            dataModel.SetQueryParameters(nvc);

            return nvc;
        }
 /// <summary>
 /// Gets the name of the identifier from parameter.
 /// </summary>
 /// <returns>The identifier from parameter name.</returns>
 /// <param name="entity">Entity.</param>
 /// <param name="mimeType">MIME type.</param>
 /// <param name="paramName">Parameter name.</param>
 public static string GetIdFromParamName(IOpenSearchable entity, string mimeType, string paramName)
 {
     NameValueCollection nvc = entity.GetOpenSearchParameters(mimeType);
     NameValueCollection revNvc = ReverseTemplateOpenSearchParameters(nvc);
     return revNvc[paramName];
 }
        /// <summary>
        /// Create an OpenSearchRequest based on the IOpenSearchable entity, type and parameters.
        /// </summary>
        /// <description>
        /// This method is the basic default implementation for creating OpenSearchRequest. It supports only 2 schemes:
        /// 1) file:// that will create a FileOpenSearchRequest
        /// 2) http:// that will create an HttpOpenSearchRequest
        /// <param name="entity">IOpenSearchable Entity.</param>
        /// <param name="type">MimeType of the request.</param>
        /// <param name="parameters">Parameters of the request.</param>
        public static OpenSearchRequest Create(IOpenSearchable entity, QuerySettings querySettings, NameValueCollection parameters)
        {
            OpenSearchDescription osd = entity.GetOpenSearchDescription();

            OpenSearchDescriptionUrl url = OpenSearchFactory.GetOpenSearchUrlByType(osd, querySettings.PreferredContentType);

            if (url == null) throw new InvalidOperationException(string.Format("Could not find a URL template for entity {0} with type {1}", entity.Identifier, querySettings.PreferredContentType));

            OpenSearchUrl queryUrl = OpenSearchFactory.BuildRequestUrlForTemplate(url, parameters, entity.GetOpenSearchParameters(querySettings.PreferredContentType), querySettings);

            OpenSearchRequest request = null;

            switch (queryUrl.Scheme) {
                case "http":
                case "https":
                    request = new HttpOpenSearchRequest(queryUrl, querySettings.PreferredContentType);
                    ((HttpOpenSearchRequest)request).TimeOut = 60000;
                    break;
                case "file":
                    request = new FileOpenSearchRequest(queryUrl, querySettings.PreferredContentType);
                    break;
            }

            request.OriginalParameters = parameters;

            return request;
        }