File: system\security\cryptography\xml\dataobject.cs
Project: ndp\clr\src\managedlibraries\security\System.Security.csproj (System.Security)
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
// <OWNER>Microsoft</OWNER>
// 
 
//
// DataObject.cs
//
// 21 Microsoft 2000
// 
 
namespace System.Security.Cryptography.Xml
{
    using System;
    using System.IO;
    using System.Xml;
 
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public class DataObject {
        private string m_id;
        private string m_mimeType;
        private string m_encoding;
        private CanonicalXmlNodeList m_elData;
        private XmlElement m_cachedXml;
 
        //
        // public constructors
        //
 
        public DataObject () {
            m_cachedXml = null;
            m_elData = new CanonicalXmlNodeList();
        }
 
        public DataObject (string id, string mimeType, string encoding, XmlElement data) {
            if (data == null) 
                throw new ArgumentNullException("data");
 
            m_id = id;
            m_mimeType = mimeType;
            m_encoding = encoding;
            m_elData = new CanonicalXmlNodeList();
            m_elData.Add(data);
            m_cachedXml = null;
        }
 
        //
        // public properties
        //
 
        public string Id {
            get { return m_id; }
            set { 
                m_id = value;
                m_cachedXml = null;
            }
        }
 
        public string MimeType {
            get { return m_mimeType; }
            set {
                m_mimeType = value; 
                m_cachedXml = null;
            }
        }
 
        public string Encoding {
            get { return m_encoding; }
            set {
                m_encoding = value;
                m_cachedXml = null;
            }
        }
 
        public XmlNodeList Data {
            get { return m_elData; }
            set {
                if (value == null)
                    throw new ArgumentNullException("value");
 
                // Reset the node list
                m_elData = new CanonicalXmlNodeList();
                foreach (XmlNode node in value) {
                    m_elData.Add(node);
                }
                m_cachedXml = null;
            }
        }
 
        private bool CacheValid {
            get { 
                return(m_cachedXml != null);
            }
        }
 
        //
        // public methods
        //
 
        public XmlElement GetXml() {
            if (CacheValid) return(m_cachedXml);
 
            XmlDocument document = new XmlDocument();
            document.PreserveWhitespace = true;
            return GetXml(document);
        }
 
        internal XmlElement GetXml (XmlDocument document) {
            XmlElement objectElement = document.CreateElement("Object", SignedXml.XmlDsigNamespaceUrl);
 
            if (!String.IsNullOrEmpty(m_id))
                objectElement.SetAttribute("Id", m_id);
            if (!String.IsNullOrEmpty(m_mimeType))
                objectElement.SetAttribute("MimeType", m_mimeType);
            if (!String.IsNullOrEmpty(m_encoding))
                objectElement.SetAttribute("Encoding", m_encoding);
 
            if (m_elData != null) {
                foreach (XmlNode node in m_elData) {
                    objectElement.AppendChild(document.ImportNode(node, true));
                }
            }
 
            return objectElement;
        }
 
        public void LoadXml (XmlElement value) {
            if (value == null)
                throw new ArgumentNullException("value");
 
            m_id = Utils.GetAttribute(value, "Id", SignedXml.XmlDsigNamespaceUrl);
            m_mimeType = Utils.GetAttribute(value, "MimeType", SignedXml.XmlDsigNamespaceUrl);
            m_encoding = Utils.GetAttribute(value, "Encoding", SignedXml.XmlDsigNamespaceUrl);
 
            foreach (XmlNode node in value.ChildNodes) {
                m_elData.Add(node);
            }
 
            // Save away the cached value
            m_cachedXml = value;
        }
    }
}