public AutoDiscoverFromQueryUrl ( OpenSearchUrl url ) : |
||
url | OpenSearchUrl | URL. |
return |
/// <summary> /// Finds the open search description. /// </summary> /// <returns>The open search description.</returns> /// <param name="baseUrl">Base URL.</param> public static IOpenSearchable FindOpenSearchable(OpenSearchEngine ose, Uri baseUrl, string mimeType = null, bool soft = false) { OpenSearchUrl url = new OpenSearchUrl(baseUrl); OpenSearchDescription openSearchDescription = null; UrlBasedOpenSearchableFactory urlBasedOpenSearchableFactory; IOpenSearchable result; try { openSearchDescription = OpenSearchFactory.LoadOpenSearchDescriptionDocument(url); OpenSearchDescriptionUrl openSearchDescriptionUrl; if (mimeType == null) { openSearchDescriptionUrl = openSearchDescription.Url.First<OpenSearchDescriptionUrl>(); } else { openSearchDescriptionUrl = openSearchDescription.Url.FirstOrDefault((OpenSearchDescriptionUrl u) => u.Type == mimeType); } if (openSearchDescriptionUrl == null) { throw new InvalidOperationException("Impossible to find an OpenSearchable link for the type " + mimeType); } openSearchDescription.DefaultUrl = openSearchDescriptionUrl; } catch (InvalidOperationException ex) { if (!(ex.InnerException is FileNotFoundException) && !(ex.InnerException is SecurityException) && !(ex.InnerException is UriFormatException)) { openSearchDescription = ose.AutoDiscoverFromQueryUrl(new OpenSearchUrl(baseUrl)); urlBasedOpenSearchableFactory = new UrlBasedOpenSearchableFactory(ose, soft); result = urlBasedOpenSearchableFactory.Create(url); if (string.IsNullOrEmpty(mimeType)) return result; var murl = openSearchDescription.Url.FirstOrDefault((OpenSearchDescriptionUrl u) => u.Type == mimeType); if (murl != null) result.GetOpenSearchDescription().DefaultUrl = murl; return result; } try { url = new OpenSearchUrl(new Uri(baseUrl, "/description")); openSearchDescription = OpenSearchFactory.LoadOpenSearchDescriptionDocument(url); } catch { try { url = new OpenSearchUrl(new Uri(baseUrl, "/OSDD")); openSearchDescription = OpenSearchFactory.LoadOpenSearchDescriptionDocument(url); } catch { throw new EntryPointNotFoundException(string.Format("No OpenSearch description found around {0}", baseUrl)); } } } if (openSearchDescription == null) { throw new EntryPointNotFoundException(string.Format("No OpenSearch description found around {0}", baseUrl)); } urlBasedOpenSearchableFactory = new UrlBasedOpenSearchableFactory(ose, soft); result = urlBasedOpenSearchableFactory.Create(openSearchDescription); return result; }
/// <summary> /// Initializes a new instance of the <see cref="Terradue.OpenSearch.GenericOpenSearchable"/> class from a quaery Url /// </summary> /// <param name="url">The query URL</param> /// <param name="ose">An OpenSearchEngine instance, preferably with registered extensions able to read the query url</param> public GenericOpenSearchable(OpenSearchUrl url, OpenSearchEngine ose) { this.url = url; this.ose = ose; this.osd = ose.AutoDiscoverFromQueryUrl(url); }