public XmlDocument Serialize
{
get
{
if(xmldoc == null)
{
xmldoc = new XmlDocument();
// RootNode
XmlNode ownerNode = xmldoc.CreateNode(XmlNodeType.Element,"Owner", null);
// Attributes
XmlAttribute att = xmldoc.CreateAttribute("Path");
att.Value = this.Path;
ownerNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("CommonName");
att.Value = this.CommonName;
ownerNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ObjectType");
att.Value = this.ObjectType;
ownerNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ID");
att.Value = this.ID;
ownerNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("Login");
att.Value = this.Login;
ownerNode.Attributes.Append(att);
xmldoc.AppendChild(ownerNode);
XmlNode PermissionsNode = xmldoc.CreateNode(XmlNodeType.Element, "Permissions", null);
ownerNode.AppendChild(PermissionsNode);
XmlNode DirectReportsNode = xmldoc.CreateNode(XmlNodeType.Element,"DirectReports",null);
PermissionsNode.AppendChild(DirectReportsNode);
XmlNode GroupsNode = xmldoc.CreateNode(XmlNodeType.Element,"Groups",null);
PermissionsNode.AppendChild(GroupsNode);
XmlNode MembersNode = xmldoc.CreateNode(XmlNodeType.Element,"Members",null);
PermissionsNode.AppendChild(MembersNode);
XmlNode ManagerNode = xmldoc.CreateNode(XmlNodeType.Element,"Manager",null);
PermissionsNode.AppendChild(ManagerNode);
XmlNode PeerNode = xmldoc.CreateNode(XmlNodeType.Element,"Peer",null);
XmlNode MngrNode = xmldoc.CreateNode(XmlNodeType.Element,"Manager",null);
XmlNode ReportsNode = xmldoc.CreateNode(XmlNodeType.Element,"Reports",null);
if(this.DirectReports.Count > 0)
{
GetUserNodes(DirectReports,DirectReportsNode);
}
if(this.Groups.Count > 0)
{
GetGroupNodes(Groups,GroupsNode);
}
if(this.Members.Count > 0)
{
GetUserNodes(Members,MembersNode);
}
if(this.Manager != null)
{
ManagerNode.AppendChild(GetManagerNode(this.Manager));
}
}
return xmldoc;
}
}
private void GetUserNodes(UserCollection uc, XmlNode parentNode)
{
XmlNode xNode;
XmlAttribute att;
foreach(User user in uc)
{
xNode = xmldoc.CreateNode(XmlNodeType.Element,"User",null);
att = xmldoc.CreateAttribute("Path");
att.Value = user.Path;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("UserName");
att.Value = user.UserName;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ID");
att.Value = user.ID;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("Login");
att.Value = user.Login;
xNode.Attributes.Append(att);
if(user.Groups.Count > 0)
{
XmlNode GroupsNode = xmldoc.CreateNode(XmlNodeType.Element,"Groups",null);
GetGroupNodes(user.Groups,GroupsNode);
xNode.AppendChild(GroupsNode);
}
if(user.DirectReports.Count > 0)
{
XmlNode DRsNode = xmldoc.CreateNode(XmlNodeType.Element,"DirectReports",null);
GetUserNodes(user.DirectReports,DRsNode);
xNode.AppendChild(DRsNode);
}
parentNode.AppendChild(xNode);
}
}
private void GetGroupNodes(GroupCollection gc, XmlNode parentNode)
{
XmlNode xNode;
XmlAttribute att;
foreach(Group group in gc)
{
xNode = xmldoc.CreateNode(XmlNodeType.Element,"Group",null);
att = xmldoc.CreateAttribute("Path");
att.Value = group.Path;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("GroupName");
att.Value = group.GroupName;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ID");
att.Value = group.ID;
xNode.Attributes.Append(att);
if(group.Users.Count > 0)
{
XmlNode UsersNode = xmldoc.CreateNode(XmlNodeType.Element,"Users",null);
GetUserNodes(group.Users,UsersNode);
xNode.AppendChild(UsersNode);
}
parentNode.AppendChild(xNode);
}
}
private XmlNode GetManagerNode(ManagerObject mgrObj)
{
XmlAttribute att;
XmlNode xNode = xmldoc.CreateNode(XmlNodeType.Element,"Manager",null);
att = xmldoc.CreateAttribute("Path");
att.Value = mgrObj.Path;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ManagerName");
att.Value = mgrObj.ManagerName;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("ID");
att.Value = mgrObj.ID;
xNode.Attributes.Append(att);
att = xmldoc.CreateAttribute("Login");
att.Value = mgrObj.Login;
xNode.Attributes.Append(att);
if(mgrObj.Manager != null)
{
xNode.AppendChild(GetManagerNode(mgrObj.Manager));
}
return xNode;
}