/// <summary> /// Loads the catalog details from configuration file. /// </summary> /// <remarks> /// The catalog details are loaded in the collection. /// Duplicate or invalid catalog are ignored. /// Invalid catalog includes catalogs with profiles information /// not present in profiles collection. /// </remarks> /// <param name="param1">the catalog configuration file</param> /// <param name="param2">the profiles collection</param> public void loadCatalogfromConfig(string filename, CswProfiles profileList) { try { XmlDocument doc = new XmlDocument(); doc.Load(filename); XmlNodeList xmlnodes = doc.GetElementsByTagName("CSWCatalog"); foreach (XmlNode xmlnode in xmlnodes) { String url = XmlDatatoString(xmlnode.SelectSingleNode("URL").InnerText); String name = XmlDatatoString(xmlnode.SelectSingleNode("Name").InnerText); String profileID = xmlnode.SelectSingleNode("CSWProfile").InnerText; if (profileList.ContainsKey(profileID)) { CswProfile profile = (CswProfile)profileList[profileID]; CswCatalog catalog = new CswCatalog(url, name, profile); this.AddCatalog(catalog.ID, catalog); } } } catch (Exception ex) { throw ex; } }
/// <summary> /// Add a key value pair to profile collection. /// </summary> /// <remarks> /// Add to profile collection. /// </remarks> /// <param name="param1">The key which is the url hashcode for the profile</param> /// <param name="param2">The profile object</param> public void AddProfile(object key, CswProfile profile) { base.Add(key, profile); }
public void SetServiceProps(DcList references) { // determine the service url, name and type LinkedList <String> schemeVals = references.get(DcList.getScheme(DcList.Scheme.SERVER)); if (schemeVals.Count > 0) { mapServerURL = chkStr(schemeVals.First.Value); } if (mapServerURL == null) { mapServerURL = String.Empty; } ; schemeVals = references.get(DcList.getScheme(DcList.Scheme.SERVICE)); if (schemeVals.Count > 0) { serviceName = chkStr(schemeVals.First.Value); } schemeVals = references.get(DcList.getScheme(DcList.Scheme.SERVICE_TYPE)); if (schemeVals.Count > 0) { this.Protocol = (schemeVals.First.Value); } if ((mapServerURL.Length > 0) && (this.Protocol == null)) { this.Protocol = CswProfile.DeduceProtocolFromURL(mapServerURL); } // handle the case where an ArcIMS service has been specified with // server/service/this.Protocol parameters if ((mapServerURL.Length > 0) && (this.Protocol.Equals("image", StringComparison.CurrentCultureIgnoreCase) || this.Protocol.Equals("feature") || this.Protocol.Equals("metadata"))) { if ((serviceName.Length > 0)) { String esrimap = "servlet/com.esri.esrimap.Esrimap"; if (mapServerURL.IndexOf("esrimap") == -1) { if (mapServerURL.IndexOf("?") == -1) { if (!mapServerURL.EndsWith("/")) { mapServerURL += "/"; } mapServerURL = mapServerURL + esrimap + "?ServiceName=" + serviceName; } } else { if (mapServerURL.IndexOf("?") == -1) { mapServerURL = mapServerURL + "?ServiceName=" + serviceName; } else if (mapServerURL.IndexOf("ServiceName=") == -1) { mapServerURL = mapServerURL + "&ServiceName=" + serviceName; } } } if (this.Protocol.Equals("image")) { this.Protocol = "aims"; } } // if the resource url has not been directly specified through a "scheme" attribute, // then attempt to pick the best fit for the collection of references if (mapServerURL.Length == 0) { foreach (DcList.Value reference in references) { if (reference != null) { String url = reference.getValue(); String type = CswProfile.DeduceProtocolFromURL(url); if (type.Length > 0) { mapServerURL = url; this.Protocol = type; break; } } } } }
/// <summary> /// Update the name of an exsisting Catalog. /// </summary> /// <remarks> /// The catalog name is updated from the collection. /// The catalog name is also updated from the configuration file. /// </remarks> /// <param name="catalog">CswCatalog</param> /// <param name="name">The string display name</param> /// <param name="url">The string url</param> /// <param name="name">The profile</param> public void updateCatalog(CswCatalog catalog, String displayname, String url, CswProfile profile) { if (!isUserCatalogExists()) { createUserCatalogFile(); } catalogList.updateCatalogNameinConfig(catalog, displayname, url, profile, USER_CATALOGFILE); }
/// <summary> /// Search CSW catalog using the provided criteria. Search result can be accessed by calling GetResponse(). /// </summary> public void Search() { try { _response = new CswSearchResponse(); StringBuilder sb = new StringBuilder(); if (_criteria == null) { sb.AppendLine(DateTime.Now + " Criteria not specified."); throw new NullReferenceException("Criteria not specified."); } if (_catalog == null) { sb.AppendLine(DateTime.Now + " Catalog not specified."); throw new NullReferenceException("Catalog not specified."); } if (_catalog.URL == null || _catalog.URL.Length == 0) { sb.AppendLine(DateTime.Now + " Catalog URL not specified."); throw new NullReferenceException("Catalog URL not specified."); } if (_catalog.Profile == null) { sb.AppendLine(DateTime.Now + " Catalog profile not specified."); throw new NullReferenceException("Catalog profile not specified."); } CswProfile profile = _catalog.Profile; // generate getRecords query string requestUrl = _catalog.Capabilities.GetRecords_PostURL; //Set Breakpoint to see transformed request (use xml viewer on tooltip variable) string requestQuery = profile.GenerateCSWGetRecordsRequest(_criteria); sb.AppendLine("Untransformed Request Query : " + profile.LastUntransformedGetRecordsRequest.InnerXml); // requestQuery = "<csw:GetCapabilities xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" request=\"GetCapabilities\" service=\"CSW\" version=\"2.0.2\"/>"; requestQuery = requestQuery.Replace("utf-16", "utf-8"); requestQuery = requestQuery.Replace("UTF-16", "UTF-8"); // submit search query if (_cswClient == null) { _cswClient = new CswClient(); } string responseText; sb.AppendLine(DateTime.Now + " Sending CSW GetRecords request to endpoint : " + requestUrl); sb.AppendLine("Request Query : " + requestQuery); if (!_catalog.Capabilities.GetRecords_IsSoapEndPoint) { responseText = _cswClient.SubmitHttpRequest("POST", requestUrl, requestQuery); } else { responseText = _cswClient.SubmitHttpRequest("SOAP", requestUrl, requestQuery); } // parse out csw search records CswRecords records = new CswRecords(); sb.AppendLine(DateTime.Now + " Response received : " + responseText); profile.ReadCSWGetRecordsResponse(responseText, records); sb.AppendLine(DateTime.Now + " Parsed GetRecords response."); // populate CSW response _response.ResponseXML = responseText; _response.Records = records; writeLogMessage(sb.ToString()); } catch (Exception e) { writeLogMessage(DateTime.Now + " " + e.ToString()); } }
// Get Add to map information public void GetAddToMapInfoByID(string DocID) { _response = new CswSearchResponse(); StringBuilder sb = new StringBuilder(); if (DocID == null || DocID == "") { throw new ArgumentNullException(); } if (_catalog == null) { throw new NullReferenceException("Catalog not specified."); } if (_catalog.Capabilities == null) { throw new NullReferenceException("Catalog capabilities not initialized."); } if (_catalog.Profile == null) { throw new NullReferenceException("Catalog profile not specified."); } if (_catalog.Capabilities.GetRecordByID_GetURL == null || _catalog.Capabilities.GetRecordByID_GetURL.Length == 0) { sb.AppendLine(DateTime.Now + " GetRecordByID URL not specified for the catalog capabilities."); throw new NullReferenceException("GetRecordByID URL not specified for the catalog capabilities."); } CswProfile profile = _catalog.Profile; // generate request url string getRecordByIDBaseUrl = _catalog.Capabilities.GetRecordByID_GetURL; string requestUrl = profile.GenerateCSWGetMetadataByIDRequestURL(getRecordByIDBaseUrl, DocID); sb.AppendLine(DateTime.Now + " GetRecordsById request URL : " + requestUrl); if (_cswClient == null) { _cswClient = new CswClient(); } string responseText = _cswClient.SubmitHttpRequest("GET", requestUrl, ""); _response.ResponseXML = responseText; sb.AppendLine(DateTime.Now + " GetRecordsById response xml : " + responseText); CswRecord record = new CswRecord(DocID); profile.ReadCSWGetMetadataByIDResponse(responseText, record); if (record.MetadataResourceURL != null && record.MetadataResourceURL.Equals("") && profile.Name.Equals("terra catalog CSW 2.0.2 AP ISO")) { record.FullMetadata = responseText; } if (record == null) { throw new NullReferenceException("Record not populated."); } // check if full metadata or resourceURL has been returned bool hasFullMetadata = !(record.FullMetadata == null || record.FullMetadata == ""); bool hasResourceUrl = !(record.MetadataResourceURL == null || record.MetadataResourceURL == ""); if (!hasFullMetadata && !hasResourceUrl) { // throw new InvalidOperationException("Neither full metadata nor metadata resource URL was found for the CSW record."); } else if (!hasFullMetadata && record.MetadataResourceURL != null) { // need to load metadata from resource URL responseText = _cswClient.SubmitHttpRequest("GET", record.MetadataResourceURL, "", "", ""); record.FullMetadata = responseText; } // add record to the response CswRecords records = new CswRecords(); if (record != null) { records.Add(record.ID, record); } _response.Records = records; _mapServerUrl = record.MapServerURL; if (_mapServerUrl != null) { sb.AppendLine(DateTime.Now + " Map Server Url : " + _mapServerUrl); } writeLogMessage(sb.ToString()); }
/// <summary> /// Retrieve metadata from CSW service by its ID /// </summary> /// <param name="DocID">Metadata document ID</param> public bool GetMetadataByID(string DocID, bool bApplyTransform) { _response = new CswSearchResponse(); StringBuilder sb = new StringBuilder(); if (DocID == null || DocID == "") { throw new ArgumentNullException(); } if (_catalog == null) { throw new NullReferenceException("Catalog not specified."); } if (_catalog.Capabilities == null) { throw new NullReferenceException("Catalog capabilities not initialized."); } if (_catalog.Profile == null) { throw new NullReferenceException("Catalog profile not specified."); } if (_catalog.Capabilities.GetRecordByID_GetURL == null || _catalog.Capabilities.GetRecordByID_GetURL.Length == 0) { throw new NullReferenceException("GetRecordByID URL not specified for the catalog capabilities."); } CswProfile profile = _catalog.Profile; // generate request url string getRecordByIDBaseUrl = _catalog.Capabilities.GetRecordByID_GetURL; string requestUrl = profile.GenerateCSWGetMetadataByIDRequestURL(getRecordByIDBaseUrl, DocID); sb.AppendLine(DateTime.Now + " GetRecordsById request URL : " + requestUrl); if (_cswClient == null) { _cswClient = new CswClient(); } string responseText = _cswClient.SubmitHttpRequest("GET", requestUrl, ""); _response.ResponseXML = responseText; sb.AppendLine(DateTime.Now + " GetRecordsById response xml : " + responseText); CswRecord record = new CswRecord(DocID); bool isTransformed = false; if (bApplyTransform) { isTransformed = profile.TransformCSWGetMetadataByIDResponse(responseText, record); if (isTransformed) { sb.AppendLine(DateTime.Now + " Transformed xml : " + record.FullMetadata); } } else { record.FullMetadata = responseText; } /*if (!isTransformed) * { * XmlDocument responseXml = new XmlDocument(); * try { responseXml.LoadXml(responseText); } * catch (XmlException xmlEx) * { * throw new XmlException("Error occurred \r\n" + xmlEx.Message); * } * record.FullMetadata = responseXml.FirstChild.InnerText ; * }*/ // add record to the response CswRecords records = new CswRecords(); if (record != null) { records.Add(record.ID, record); } _response.Records = records; _mapServerUrl = record.MapServerURL; if (_mapServerUrl != null) { sb.AppendLine(DateTime.Now + " Map Server Url : " + _mapServerUrl); } writeLogMessage(sb.ToString()); return(isTransformed); }
/// <summary> /// Update the name of an exsisting Catalog. /// The name is also updated in the configuration file. /// </summary> /// <remarks> /// The catalog name is updated from the collection. /// The catalog name is also updated from the configuration file. /// </remarks> /// <param name="param1">CswCatalog</param> /// <param name="param2">The string name</param> /// <param name="param2">The string updated url</param> /// <param name="param2">The string name</param> /// <param name="param3">the catalog configuration file</param> public void updateCatalogNameinConfig(CswCatalog catalog, string displayname, string surl,CswProfile profile,string filename) { try { CswCatalog updatedcatalog = (CswCatalog)this[catalog.ID.ToString()]; updatedcatalog.Name = displayname; updatedcatalog.URL =surl; updatedcatalog.Profile = profile; updatetoFile(filename); } catch (Exception ex) { throw ex; } }
public CswCatalog(String surl, String sname, CswProfile oprofile) { id = "catalog" + IDCounter.ToString(); IDCounter++; URL = surl; Profile = oprofile; Name = sname; Locking = false; }
/// <summary> /// Add a key value pair to profile collection. /// </summary> /// <remarks> /// Add to profile collection. /// </remarks> /// <param name="param1">The key which is the url hashcode for the profile</param> /// <param name="param2">The profile object</param> public void AddProfile(object key, CswProfile profile) { base.Add(key,profile); }
/// <summary> /// Update the name of an exsisting Catalog. /// The name is also updated in the configuration file. /// </summary> /// <remarks> /// The catalog name is updated from the collection. /// The catalog name is also updated from the configuration file. /// </remarks> /// <param name="param1">CswCatalog</param> /// <param name="param2">The string name</param> /// <param name="param2">The string updated url</param> /// <param name="param2">The string name</param> /// <param name="param3">the catalog configuration file</param> public void updateCatalogNameinConfig(CswCatalog catalog, string displayname, string surl, CswProfile profile, string filename) { try { CswCatalog updatedcatalog = (CswCatalog)this[catalog.ID.ToString()]; updatedcatalog.Name = displayname; updatedcatalog.URL = surl; updatedcatalog.Profile = profile; updatetoFile(filename); } catch (Exception ex) { throw ex; } }