protected internal UriBuilder BuildApiUrl(string facet, string signature, long expires, Authentication authentication, string guidString = null, string app = null, bool paging = false, string next = null)
        {
            ProviderSettings providerSettings = new ProviderSettings();
            string           url            = providerSettings.getConfigValue("API_URL");
            string           queryString    = string.Empty;
            UriBuilder       requestBuilder = new UriBuilder(url);

            queryString = FormQueryString(facet, providerSettings, guidString, app, paging, next, url);

            requestBuilder.Query = string.Format(queryString +
                                                 "&partner.id={0}&auth.signature={1}&auth.expires={2}&user.id={3}",
                                                 WebUtility.UrlEncode(authentication.partnerID),
                                                 WebUtility.UrlEncode(signature),
                                                 expires,
                                                 WebUtility.UrlEncode(authentication.userId.ToString())
                                                 );

            return(requestBuilder);
        }
        protected string FormQueryString(string facet, ProviderSettings providerSettings, string guidString = null, string app = null, bool paging = false, string next = null, string url = null)
        {
            string queryString = string.Empty;

            if (facet == "document.publication.regions" || string.IsNullOrEmpty(facet))
            {
                queryString = providerSettings.getConfigValue("COUNTRY_QUERY");
            }
            else
            {
                if (facet == "document.publication.authorities")
                {
                    queryString = providerSettings.getConfigValue("AUTHORITIES_QUERY");
                }
                else if (facet == "document.publication")
                {
                    queryString = providerSettings.getConfigValue("PUBLICATION_QUERY");
                }
                else if (facet == "document")
                {
                    queryString = providerSettings.getConfigValue("DOCUMENT_QUERY");
                }
                else if (facet == "section")
                {
                    queryString = providerSettings.getConfigValue("SECTION_QUERY");
                }
                else if (facet == "standardsetsummary")
                {
                    queryString = providerSettings.getConfigValue("SUMMARY_QUERY");
                }
                else if (facet == "disciplines.subjects")
                {
                    queryString = providerSettings.getConfigValue("SUBJECT_QUERY");
                }
                else if (facet == "grid")
                {
                    queryString = providerSettings.getConfigValue("GRID_QUERY");
                }
                else if (facet == "standardset")
                {
                    if (!string.IsNullOrEmpty(app))
                    {
                        if (app == "webcms")
                        {
                            queryString = providerSettings.getConfigValue("STANDARD_QUERY_WEBCMS");
                        }
                    }
                    else
                    {
                        queryString = providerSettings.getConfigValue("STANDARD_QUERY");
                    }

                    //if paging then append offset value
                    if (paging)
                    {
                        queryString = next.Replace(url + "?", "").Replace("&user.id=+", "");
                    }
                }
                else
                {
                    queryString = string.Empty;
                    guidString  = null;
                }

                if (queryString.Contains("@Guid"))
                {
                    guidString  = '\'' + guidString + '\'';
                    queryString = queryString.Replace("@Guid", guidString);
                }
            }
            return(queryString);
        }