1 // System.Security.Policy.CodeGroup
4 // Nick Drochak (ndrochak@gol.com)
6 // (C) 2001 Nick Drochak, All rights reserved.
8 using System.Security.Policy;
9 using System.Security.Permissions;
\r
10 using System.Collections;
11 using System; // for MonoTODO attribute
13 namespace System.Security.Policy
16 public abstract class CodeGroup
18 PolicyStatement m_policy = null;
19 IMembershipCondition m_membershipCondition = null;
20 string m_description = null;
22 ArrayList m_children = new ArrayList();
25 public CodeGroup(IMembershipCondition membershipCondition,
26 PolicyStatement policy)
28 if (null == membershipCondition)
29 throw new ArgumentNullException("Value cannot be null.");
31 m_membershipCondition = membershipCondition;
34 public abstract CodeGroup Copy();
35 public abstract string MergeLogic {get;}
36 public abstract PolicyStatement Resolve( Evidence evidence);
37 public abstract CodeGroup ResolveMatchingCodeGroups(Evidence evidence);
39 public PolicyStatement PolicyStatement
51 public string Description
59 m_description = value;
63 public IMembershipCondition MembershipCondition
67 return m_membershipCondition;
72 throw new ArgumentException("Value cannot be null");
73 m_membershipCondition = value;
98 throw new ArgumentException("Value cannot be null");
99 m_children = new ArrayList(value);
103 public virtual string AttributeString
107 if (null != m_policy)
108 return m_policy.AttributeString;
114 public virtual string PermissionSetName
118 if (m_policy.PermissionSet is Security.NamedPermissionSet)
119 return ((NamedPermissionSet)(m_policy.PermissionSet)).Name;
125 public void AddChild(CodeGroup group)
128 throw new ArgumentNullException("The group parameter cannot be null");
129 m_children.Add(group);
132 public override bool Equals(object o)
134 if (!(o is CodeGroup))
137 return Equals((CodeGroup)o, false);
140 public bool Equals(CodeGroup cg, bool compareChildren)
142 if (cg.Name != this.Name)
145 if (cg.Description != this.Description)
148 if (cg.MembershipCondition != this.MembershipCondition)
153 int childCount = cg.Children.Count;
154 if (this.Children.Count != childCount)
157 for (int index = 0; index < childCount; index++)
159 // LAMESPEC: are we supposed to check child equality recursively?
160 // The docs imply 'no' but it seems natural to do a 'deep' compare.
161 // Will check the children's children, and so-on unless we find out that
163 if (!((CodeGroup)(this.Children[index])).Equals((CodeGroup)(cg.Children[index]), true))
172 public void RemoveChild(CodeGroup group)
174 if (!m_children.Contains(group))
175 throw new ArgumentException();
177 m_children.Remove(group);
181 public override int GetHashCode()
186 public void FromXml(SecurityElement e)
188 FromXml(e, (PolicyLevel)null);
192 public void FromXml(SecurityElement e, PolicyLevel level )
195 throw new ArgumentNullException("e");
197 // Not sure what might be serialized in this XML, so just do the strings for now
198 // and null's for everything else
201 m_membershipCondition = null;
203 m_name = e.Attribute("Name");
204 m_description = e.Attribute("Description");
206 // seems like we might need this to Resolve() in subclasses
212 protected virtual void ParseXml(SecurityElement e, PolicyLevel level)
216 public SecurityElement ToXml()
221 [MonoTODO("Not sure what to do with PolicyLevel parameter")]
222 public SecurityElement ToXml(PolicyLevel level)
\r
224 SecurityElement e = new SecurityElement("CodeGroup");
225 e.AddAttribute("class", this.GetType().AssemblyQualifiedName);
226 e.AddAttribute("version", "1");
229 e.AddAttribute("Name", Name);
231 if (null != Description)
232 e.AddAttribute("Description", Description);
234 if (null != MembershipCondition)
235 e.AddChild(MembershipCondition.ToXml());
237 if (null != PolicyStatement)
238 e.AddChild(PolicyStatement.PermissionSet.ToXml());
240 foreach (CodeGroup child in Children)
241 e.AddChild(child.ToXml());
247 protected virtual void CreateXml(SecurityElement element, PolicyLevel level)
250 } // public abstract class CodeGroup
252 } // namespace System.Security.Policy