using System; using System.Collections.Generic; using System.Text; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Utilities; using Org.BouncyCastle.Utilities.Collections; namespace Org.BouncyCastle.Pkix { /// /// Summary description for PkixPolicyNode. /// public class PkixPolicyNode // : IPolicyNode { protected IList mChildren; protected int mDepth; protected ISet mExpectedPolicies; protected PkixPolicyNode mParent; protected ISet mPolicyQualifiers; protected string mValidPolicy; protected bool mCritical; public virtual int Depth { get { return this.mDepth; } } public virtual IEnumerable Children { get { return CollectionUtilities.Proxy(mChildren); } } public virtual bool IsCritical { get { return this.mCritical; } set { this.mCritical = value; } } public virtual ISet PolicyQualifiers { get { return new HashSet(this.mPolicyQualifiers); } } public virtual string ValidPolicy { get { return this.mValidPolicy; } } public virtual bool HasChildren { get { return mChildren.Count != 0; } } public virtual ISet ExpectedPolicies { get { return new HashSet(this.mExpectedPolicies); } set { this.mExpectedPolicies = new HashSet(value); } } public virtual PkixPolicyNode Parent { get { return this.mParent; } set { this.mParent = value; } } /// Constructors public PkixPolicyNode( IEnumerable children, int depth, ISet expectedPolicies, PkixPolicyNode parent, ISet policyQualifiers, string validPolicy, bool critical) { if (children == null) { this.mChildren = new List(); } else { this.mChildren = new List(children); } this.mDepth = depth; this.mExpectedPolicies = expectedPolicies; this.mParent = parent; this.mPolicyQualifiers = policyQualifiers; this.mValidPolicy = validPolicy; this.mCritical = critical; } public virtual void AddChild( PkixPolicyNode child) { child.Parent = this; mChildren.Add(child); } public virtual void RemoveChild( PkixPolicyNode child) { mChildren.Remove(child); } public override string ToString() { return ToString(""); } public virtual string ToString(string indent) { StringBuilder buf = new StringBuilder(); buf.Append(indent); buf.Append(mValidPolicy); buf.AppendLine(" {"); foreach (PkixPolicyNode child in mChildren) { buf.Append(child.ToString(indent + " ")); } buf.Append(indent); buf.AppendLine("}"); return buf.ToString(); } public virtual object Clone() { return Copy(); } public virtual PkixPolicyNode Copy() { PkixPolicyNode node = new PkixPolicyNode( new List(), mDepth, new HashSet(mExpectedPolicies), null, new HashSet(mPolicyQualifiers), mValidPolicy, mCritical); foreach (PkixPolicyNode child in mChildren) { PkixPolicyNode copy = child.Copy(); copy.Parent = node; node.AddChild(copy); } return node; } } }