namespace OrganizationData
{
public class Organization
{
#region Load Helpers
private BindingList<Composite> GetChildren(XElement node)
{
var q =
from child in node.Elements()
where child.HasElements
select GetComposite(child);
return new BindingList<Composite>(q.ToList());
}
private Composite GetComposite(XElement node)
{
switch (node.Name.LocalName)
{
case "Department":
return new Department
{
Name = (string)node.Attribute("Name"),
Budget = double.Parse((string)node.Element("Budget")),
Children = GetChildren(node)
};
case "Employee":
return new Employee
{
Name = (string)node.Attribute("Name"),
Salary = Int32.Parse((string)node.Element("Salary")),
Role = (string)node.Element("Role"),
Children = GetChildren(node)
};
case "Manager":
return new Manager
{
Name = (string)node.Attribute("Name"),
Salary = Int32.Parse((string)node.Element("Salary")),
Role = (string)node.Element("Role"),
Children = GetChildren(node)
};
}
return null;
}
#endregion
#region Public
public Composite Root { get; set; }
public Organization()
{
XDocument doc = XDocument.Load("Data/Organization.xml");
Root = GetComposite(doc.Root);
}
#endregion
}
}