Ejemplo n.º 1
0
        private void LoadMetadata(IBuilder oBuilder)
        {
            if (InvokeRequired)
                this.Invoke(new LoadMetadataDelegate(LoadMetadata), new Object[] { oBuilder });
            else
            {
                try
                {
                    XmlDocument oDoc = new XmlDocument();
                    oDoc.AppendChild(oDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes"));
                    XmlNode oNode = null;
                    string strStyleSheet = null;

                    if ((oBuilder is AsyncBuilder) && (oBuilder as AsyncBuilder).LoadingErrorOccurred)
                    {
                        DisplayMetadataMessage("The selected object failed to load.");
                        return;
                    }
                    else if (oBuilder.SupportsMetaData)
                    {
                        oNode = oBuilder.GetMetaData(oDoc);
                        if (oNode == null)
                        {
                            DisplayMetadataMessage("You do not have permission to view the metadata for this data layer.");
                            return;
                        }
                        strStyleSheet = oBuilder.StyleSheetName;
                        DisplayMetadataMessage("Loading metadata for layer " + oBuilder.Title + "...");
                    }
                    else if (!String.IsNullOrEmpty(oBuilder.MetadataDisplayMessage))
                    {
                        DisplayMetadataMessage(oBuilder.MetadataDisplayMessage);
                        return;
                    }
                    else
                    {
                        DisplayMetadataMessage("Metadata for the selected object is unsupported.");
                        return;
                    }

                    if (oNode is XmlDocument)
                    {
                        oDoc = oNode as XmlDocument;
                    }
                    else if (oNode is XmlElement)
                    {
                        oDoc.AppendChild(oNode);
                    }
                    if (strStyleSheet != null)
                    {
                        XmlNode oRef = oDoc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='" + Path.Combine(this.metaviewerDir, strStyleSheet) + "'");
                        oDoc.InsertBefore(oRef, oDoc.DocumentElement);
                    }

                    string filePath = Path.Combine(this.metaviewerDir, Path.GetRandomFileName());
                    filePath = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath) + ".xml");
                    oDoc.Save(filePath);
                    DisplayMetadataDocument(filePath);
                }
                catch (Exception e)
                {
                    DisplayMetadataMessage("An error occurred while accessing metadata: " + e.Message);
                }
            }
        }