/// <summary>
        /// Makes footprint envelope for a metadata record
        /// </summary>
        /// <param name="record">CswRecord object</param>
        /// <returns>envelope polygon</returns>
        private AGXG.Polygon makeFootPrint(CswRecord record)
        {

            AGXG.Envelope envelope = new AGXG.Envelope();
            try
            {
                envelope.XMax = record.BoundingBox.Maxx;
                envelope.YMax = record.BoundingBox.Maxy;
                envelope.XMin = record.BoundingBox.Minx;
                envelope.YMin = record.BoundingBox.Miny;
            }
            catch (System.ArgumentException e)
            {
                try
                {
                    envelope.XMax = record.BoundingBox.Minx;
                    envelope.YMax = record.BoundingBox.Maxy;
                    envelope.XMin = record.BoundingBox.Maxx;
                    envelope.YMin = record.BoundingBox.Miny;
                }
                catch (System.ArgumentException e1)
                {
                    try
                    {
                        envelope.XMax = record.BoundingBox.Minx;
                        envelope.YMax = record.BoundingBox.Miny;
                        envelope.XMin = record.BoundingBox.Maxx;
                        envelope.YMin = record.BoundingBox.Maxy;
                    }
                    catch (System.ArgumentException e2)
                    {
                        envelope.XMax = record.BoundingBox.Maxx;
                        envelope.YMax = record.BoundingBox.Miny;
                        envelope.XMin = record.BoundingBox.Minx;
                        envelope.YMin = record.BoundingBox.Maxy;
                    }
                }

            }

            AGXG.Point p1 = new AGXG.Point();
            p1.SetCoordinates(record.BoundingBox.Maxx, record.BoundingBox.Maxy);

            AGXG.Point p2 = new AGXG.Point();
            p2.SetCoordinates(record.BoundingBox.Maxx, record.BoundingBox.Miny);

            AGXG.Point p3 = new AGXG.Point();
            p3.SetCoordinates(record.BoundingBox.Minx, record.BoundingBox.Miny);

            AGXG.Point p4 = new AGXG.Point();
            p4.SetCoordinates(record.BoundingBox.Minx, record.BoundingBox.Maxy);

            AGXG.Polygon footPrint = new AGXG.Polygon();
            footPrint.AddPoint(p1);
            footPrint.AddPoint(p2);
            footPrint.AddPoint(p3);
            footPrint.AddPoint(p4);
            footPrint.AddPoint(p1);

            return footPrint;
        }
        /// <summary>
        /// Makes graphic to display footprint
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        private AGXM.Graphic makeFootPrintGraphic(CswRecord record)
        {

            AGXG.Polygon footPrint = makeFootPrint(record);

            //Turn the Polygon in to a Graphic
            AGXM.Graphic graphic = new AGXM.Graphic(footPrint);

            //Set the Graphic's symbol
            // graphic.Symbol = AGXM.Symbol.Fill.Outline.Yellow;
            graphic.Symbol.OutlineColor = Color.Yellow;
            graphic.Symbol.Color = Color.Transparent;
            // graphic.Symbol.Size = 100;
            return graphic;
        }
Example #3
0
        /// <summary>
        /// Transform a CSW metadata response. 
        /// </summary>
        /// <remarks>
        /// The CSW metadata response is read.
        /// The CSw record is updated with the metadata
        /// </remarks>
        /// <param name="param1">The metadata response string</param>
        /// <param name="param2">The CSW record for the record</param>
        public bool TransformCSWGetMetadataByIDResponse(string response, CswRecord record)
        {
            if (displayResponseXslt == null || displayResponseXslt.Equals(""))
            {
                record.FullMetadata = response;
                record.MetadataResourceURL = "";
                return false;
            }
            else
            {
                //create the output stream
                StringWriter writer = new StringWriter();

                TextReader textreader = new StringReader(response);
                XmlTextReader xmltextreader = new XmlTextReader(textreader);
                //load the Xml doc
                XPathDocument xpathDoc = new XPathDocument(xmltextreader);
                if (displayResponseXsltObj == null)
                {
                    displayResponseXsltObj = new XslCompiledTransform();
                    //enable document() support
                    XsltSettings settings = new XsltSettings(true, true);
                    displayResponseXsltObj.Load(displayResponseXslt, settings, new XmlUrlResolver());

                }

                //do the actual transform of Xml
                displayResponseXsltObj.Transform(xpathDoc, null, writer);

                writer.Close();

                // full metadata or resource url
                String outputStr = writer.ToString();
                record.MapServerURL = "";
                record.MetadataResourceURL = "";
                record.FullMetadata = outputStr;

                return true;
            }
        }
Example #4
0
        /// <summary>
        /// Determins resource urls
        /// </summary>
        /// <param name="cswRecord">CswRecord object</param>
        /// <param name="references">List of references</param>
        private void determineResourceUrl(CswRecord cswRecord, DcList references)
        {
            // initialize
            String resourceUrl = "";
            String serviceType = "";
            String serviceName = "";

            // determine the service url, name and type
            LinkedList<String> schemeVals = references.get(DcList.getScheme(DcList.Scheme.SERVER));
            if (schemeVals.Count > 0)
            {
                resourceUrl = chkStr(schemeVals.First.Value);
            }

            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)
            {
                serviceType = (schemeVals.First.Value);
            }
            if ((resourceUrl.Length > 0) && (serviceType.Length == 0))
            {
                serviceType = getServiceType(resourceUrl);
            }

            // handle the case where an ArcIMS service has been specified with
            // server/service/serviceType parameters
            if ((resourceUrl.Length > 0) &&
                (serviceType.Equals("image", StringComparison.CurrentCultureIgnoreCase) ||
                 serviceType.Equals("feature") ||
                 serviceType.Equals("metadata")))
            {

                if ((serviceName.Length > 0))
                {
                    String esrimap = "servlet/com.esri.esrimap.Esrimap";
                    if (resourceUrl.IndexOf("esrimap") == -1)
                    {
                        if (resourceUrl.IndexOf("?") == -1)
                        {
                            if (!resourceUrl.EndsWith("/")) resourceUrl += "/";
                            resourceUrl = resourceUrl + esrimap + "?ServiceName=" + serviceName;
                        }
                    }
                    else
                    {
                        if (resourceUrl.IndexOf("?") == -1)
                        {
                            resourceUrl = resourceUrl + "?ServiceName=" + serviceName;
                        }
                        else if (resourceUrl.IndexOf("ServiceName=") == -1)
                        {
                            resourceUrl = resourceUrl + "&ServiceName=" + serviceName;
                        }
                    }
                }

                if (serviceType.Equals("image"))
                {
                    serviceType = "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 (resourceUrl.Length == 0)
            {
                foreach (DcList.Value reference in references)
                {
                    if (reference != null)
                    {
                        String url = reference.getValue();
                        String type = getServiceType(url);
                        if (type.Length > 0)
                        {
                            resourceUrl = url;
                            serviceType = type;
                            break;
                        }
                    }
                }

            }

            // update the record
            cswRecord.MapServerURL = resourceUrl;
            cswRecord.ServiceName = serviceName;
            cswRecord.ServiceType = serviceType;
        }
Example #5
0
        /// <summary>
        /// Read a CSW metadata response. 
        /// </summary>
        /// <remarks>
        /// The CSW metadata response is read.
        /// The CSw record is updated with the metadata
        /// </remarks>
        /// <param name="param1">The metadata response string</param>
        /// <param name="param2">The CSW record for the record</param>
        public void ReadCSWGetMetadataByIDResponse(string response, CswRecord record)
        {
            if (metadataxslt == null || metadataxslt.Equals(""))
            {
                record.FullMetadata = response;
                record.MetadataResourceURL = "";
            }
            else
            {
                //create the output stream
                StringWriter writer = new StringWriter();

                TextReader textreader = new StringReader(response);
                XmlTextReader xmltextreader = new XmlTextReader(textreader);
                //load the Xml doc
                XPathDocument xpathDoc = new XPathDocument(xmltextreader);
                if (metadataxsltobj == null)
                {
                    metadataxsltobj = new XslCompiledTransform();
                    //enable document() support
                    XsltSettings settings = new XsltSettings(true, true);
                    metadataxsltobj.Load(metadataxslt, settings, new XmlUrlResolver());
                }

                //do the actual transform of Xml
                metadataxsltobj.Transform(xpathDoc, null, writer);

                writer.Close();

                // full metadata or resource url
                String outputStr = writer.ToString();

                if (IsUrl(outputStr))
                {
                    if (outputStr.Contains("\u2715"))
                    {
                        DcList list = new DcList();
                        list.add(outputStr);

                        LinkedList<String> serverList = list.get(DcList.getScheme(DcList.Scheme.SERVER));
                        LinkedList<String> documentList = list.get(DcList.getScheme(DcList.Scheme.METADATA_DOCUMENT));

                        if (serverList.Count > 0)
                        {
                            String serviceType = getServiceType(serverList.First.Value);
                            if (serviceType.Equals("aims") || serviceType.Equals("ags") || serviceType.Equals("wms") || serviceType.Equals("wcs"))
                            {
                                record.MapServerURL = serverList.First.Value;
                            }
                        }
                        else
                            record.MapServerURL = "";

                        if (documentList.Count > 0)
                            record.MetadataResourceURL = documentList.First.Value;

                    }
                    else
                    {
                        if (getServiceType(response).Equals("ags"))
                        {

                            outputStr = outputStr.Replace("http", "|http");
                            string[] s = outputStr.Split('|');
                            for (int i = 0; i < s.Length; i++)
                            {
                                if (s[i].ToString().Contains("MapServer"))
                                    record.MapServerURL = s[i];
                                else
                                    record.MetadataResourceURL = s[i];
                            }
                        }
                        else
                        {
                            record.MapServerURL = "";
                            record.MetadataResourceURL = outputStr;
                        }
                    }

                    record.FullMetadata = "";

                }
                else
                {
                    record.MapServerURL = "";
                    record.MetadataResourceURL = "";
                    record.FullMetadata = outputStr;
                }
            }
        }
Example #6
0
        /// <summary>
        /// Parse a CSW response. 
        /// </summary>
        /// <remarks>
        /// The CSW response is parsed and the records collection is populated
        /// with the result.The reponse is parsed based on the response xslt.
        /// </remarks>
        /// <param name="param1">The string response</param>
        /// <param name="param2">The recordlist which needs to be populated</param>
        public void ReadCSWGetRecordsResponse(string responsestring, CswRecords recordslist)
        {
            try
            {
                TextReader textreader = new StringReader(responsestring);
                XmlTextReader xmltextreader = new XmlTextReader(textreader);
                //load the Xml doc
                XPathDocument xPathDoc = new XPathDocument(xmltextreader);
                if (responsexsltobj == null)
                {
                    responsexsltobj = new XslCompiledTransform();
                    XsltSettings settings = new XsltSettings(true, true);
                    responsexsltobj.Load(responsexslt, settings, new XmlUrlResolver());
                }
                //create the output stream
                StringWriter writer = new StringWriter();
                //do the actual transform of Xml
                responsexsltobj.Transform(xPathDoc, null, writer);
                writer.Close();
                //populate CswRecords
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(writer.ToString());
                XmlNodeList xmlnodes = doc.GetElementsByTagName("Record");
                foreach (XmlNode xmlnode in xmlnodes)
                {
                    CswRecord record = new CswRecord();
                    record.ID = xmlnode.SelectSingleNode("ID").InnerText;
                    record.Title = xmlnode.SelectSingleNode("Title").InnerText;
                    record.Abstract = xmlnode.SelectSingleNode("Abstract").InnerText;
                    String lowercorner = "";
                    if (this.SupportSpatialBoundary)
                    {
                        lowercorner = xmlnode.SelectSingleNode("LowerCorner").InnerText;
                    }
                    String uppercorner = "";
                    if (this.SupportSpatialBoundary)
                    {
                        uppercorner = xmlnode.SelectSingleNode("UpperCorner").InnerText;
                    }
                    if ((lowercorner.Length > 0 && uppercorner.Length > 0))
                    {
                        /*  record.BoundingBox.Maxx = Double.Parse(lowercorner.Substring(0, lowercorner.IndexOf(' ')));
                            record.BoundingBox.Miny = Double.Parse(lowercorner.Substring(lowercorner.IndexOf(' ') + 1));
                            record.BoundingBox.Minx = Double.Parse(uppercorner.Substring(0, uppercorner.IndexOf(' ')));
                            record.BoundingBox.Maxy = Double.Parse(uppercorner.Substring(uppercorner.IndexOf(' ') + 1));*/
                        Boolean parseFlag = false;
                        CultureInfo cultureInfo = new CultureInfo("en-us");
                        double pareseResult = 0.0;
                        parseFlag = Double.TryParse(lowercorner.Substring(0, lowercorner.IndexOf(' ')), NumberStyles.Number, cultureInfo, out pareseResult);
                        record.BoundingBox.Minx = pareseResult;
                        parseFlag = Double.TryParse(lowercorner.Substring(lowercorner.IndexOf(' ') + 1), NumberStyles.Number, cultureInfo, out pareseResult);
                        record.BoundingBox.Miny = pareseResult;
                        parseFlag = Double.TryParse(uppercorner.Substring(0, uppercorner.IndexOf(' ')), NumberStyles.Number, cultureInfo, out pareseResult);
                        record.BoundingBox.Maxx = pareseResult;
                        parseFlag = Double.TryParse(uppercorner.Substring(uppercorner.IndexOf(' ') + 1), NumberStyles.Number, cultureInfo, out pareseResult);
                        record.BoundingBox.Maxy = pareseResult;
                        if (parseFlag == false)
                        {
                            throw new Exception("Number format error");
                        }

                    }
                    else
                    {
                        record.BoundingBox.Maxx = 500.00;
                        record.BoundingBox.Miny = 500.00;
                        record.BoundingBox.Minx = 500.00;
                        record.BoundingBox.Maxy = 500.00;
                    }
                    XmlNode node = xmlnode.SelectSingleNode("Type");
                    if (node != null)
                    {
                        record.IsLiveDataOrMap = node.InnerText.Equals("liveData", StringComparison.OrdinalIgnoreCase);
                        if (!record.IsLiveDataOrMap)
                        {
                            record.IsLiveDataOrMap = node.InnerText.Equals("downloadableData", StringComparison.OrdinalIgnoreCase);
                        }
                    }
                    else
                    {
                        record.IsLiveDataOrMap = false;
                    }

                    XmlNode referencesNode = xmlnode.SelectSingleNode("References");
                    if (referencesNode != null)
                    {
                        String references = referencesNode.InnerText;

                        DcList list = new DcList();
                        list.add(references);
                        determineResourceUrl(record, list);

                        /*  LinkedList<String> serverList = list.get(DcList.getScheme(DcList.Scheme.SERVER));
                          if (serverList.Count > 0)
                          {
                              String serviceType = getServiceType(serverList.First.Value);
                              if (serviceType.Equals("aims") || serviceType.Equals("ags") || serviceType.Equals("wms") || serviceType.Equals("wcs"))
                              {
                                  record.MapServerURL = serverList.First.Value;
                              }
                          }*/
                    }
                    else
                        record.MapServerURL = "";

                    recordslist.AddRecord(record.ID.GetHashCode(), record);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            //return recordslist;
        }
        /// <summary>
        /// Get Add to map information
        /// </summary>
        /// <param name="DocID">document identifier</param>
        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>
        /// draw footprints on the map
        /// </summary>
        /// <param name="record">Record for which the footprint needs to be drwan</param>
        /// <param name="refreshview">Indicates if the view is refreshed or not after the element is drawn</param>
        /// <param name="deleteelements">Indicates if the element can be deleted or not</param>
        private void drawfootprint(CswRecord record, bool refreshview, bool deleteelements)
        {
            //create the triangle outline symbol
            ISimpleLineSymbol lineSymbol = new SimpleLineSymbolClass();
            lineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
            lineSymbol.Width = 2.0;

            //create the triangle's fill symbol
             ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();
            simpleFillSymbol.Outline = (ILineSymbol)lineSymbol;
            simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross;

            IMxDocument mxDoc;
            mxDoc = (IMxDocument)m_application.Document;

            //the original projection system
            ISpatialReference spatialReference;
            IGeographicCoordinateSystem geographicCoordinateSystem;
            SpatialReferenceEnvironmentClass spatialReferenceEnviorment = new SpatialReferenceEnvironmentClass();
            geographicCoordinateSystem = spatialReferenceEnviorment.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            spatialReference = (ISpatialReference)geographicCoordinateSystem;

            //set the geometry of the element
            IPoint point = new ESRI.ArcGIS.Geometry.PointClass();
            point.SpatialReference = spatialReference;
            point.PutCoords(record.BoundingBox.Minx, record.BoundingBox.Miny);

            IPoint point1 = new ESRI.ArcGIS.Geometry.PointClass();
            point1.SpatialReference = spatialReference;
            point1.PutCoords(record.BoundingBox.Minx, record.BoundingBox.Maxy);

            IPoint point2 = new ESRI.ArcGIS.Geometry.PointClass();
            point2.SpatialReference = spatialReference;
            point2.PutCoords(record.BoundingBox.Maxx, record.BoundingBox.Maxy);

            IPoint point3 = new ESRI.ArcGIS.Geometry.PointClass();

               point3.SpatialReference = spatialReference;
               point3.PutCoords(record.BoundingBox.Maxx, record.BoundingBox.Miny);

            IPointCollection pointCollection;
            pointCollection = new ESRI.ArcGIS.Geometry.PolygonClass();

            object x = Type.Missing;
            object y = Type.Missing;

            pointCollection.AddPoint(point, ref x, ref y);
            pointCollection.AddPoint(point1, ref x, ref y);
            pointCollection.AddPoint(point2, ref x, ref y);
            pointCollection.AddPoint(point3, ref x, ref y);

            PolygonElementClass element = new PolygonElementClass();
            element.Symbol = simpleFillSymbol;
            element.SpatialReference = spatialReference;
            element.Geometry.SpatialReference = spatialReference;
            element.Geometry = (IGeometry)pointCollection;
            element.Geometry.Project(mxDoc.ActiveView.Extent.SpatialReference);

            //add the graphics element to the map
            IGraphicsContainer graphicsContainer;
            graphicsContainer = (IGraphicsContainer)mxDoc.FocusMap;
            if (deleteelements) {
                graphicsContainer.DeleteAllElements();
            }
            graphicsContainer.AddElement(element, 0);
            if (refreshview) {
                mxDoc.ActiveView.Extent = element.Geometry.Envelope;
                mxDoc.ActiveView.Refresh();
            }
        }
        /// <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;

            writeLogMessage(" Csw profile used : " + profile.Name);
            // 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);
        }
Example #10
0
 /// <summary>
 /// Added record to records object collection
 /// </summary>
 /// <param name="key"></param>
 /// <param name="record"></param>
 public void AddRecord(object key, CswRecord record)
 {
     base.Add(key, record);
 }
Example #11
0
 /// <summary>
 /// Added record to records object collection
 /// </summary>
 /// <param name="key"></param>
 /// <param name="record"></param>
 public void AddRecord(object key, CswRecord record) {
     base.Add(key, record);
 }
Example #12
0
        /// <summary>
        /// Get Add to map information
        /// </summary>
        /// <param name="DocID">document identifier</param>
        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());
    }
Example #13
0
        /// <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;
            writeLogMessage(" Csw profile used : " + profile.Name);
            // 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;

        }