/// <summary> /// Performs the business logic for adding the Spousal relationship between the person and /// the spouse. /// </summary> public static void AddSpouse(PeopleCollection family, Person person, Person spouse, SpouseModifier modifier) { // Assume the spouse's gender based on the counterpart of the person's gender if (person.Gender == Gender.Male) { spouse.Gender = Gender.Female; } else { spouse.Gender = Gender.Male; } if (person.Spouses != null) { switch (person.Spouses.Count) { // No existing spouse case 0: family.AddSpouse(person, spouse, modifier); // Add any of the children as the child of the spouse. if (person.Children != null || person.Children.Count > 0) { foreach (Person child in person.Children) { family.AddChild(spouse, child, ParentChildModifier.Natural); } } break; // Existing spouse(s) default: // If specifying a new married spouse, make existing spouses former. if (modifier == SpouseModifier.Current) { foreach (Relationship relationship in person.Relationships) { if (relationship.RelationshipType == RelationshipType.Spouse) { ((SpouseRelationship)relationship).SpouseModifier = SpouseModifier.Former; } } } family.AddSpouse(person, spouse, modifier); break; } // Setter for property change notification person.HasSpouse = true; } }
/// <summary> /// Performs the business logic for adding the Parent relationship between the person and the parent. /// </summary> public static void AddParent(PeopleCollection family, Person person, Person parent) { // A person can only have 2 parents, do nothing if (person.Parents.Count == 2) { return; } // Add the parent to the main collection of people. family.Add(parent); switch (person.Parents.Count) { // No exisitng parents case 0: family.AddChild(parent, person, ParentChildModifier.Natural); break; // An existing parent case 1: family.AddChild(parent, person, ParentChildModifier.Natural); family.AddSpouse(parent, person.Parents[0], SpouseModifier.Current); break; } // Handle siblings if (person.Siblings.Count > 0) { // Make siblings the child of the new parent foreach (Person sibling in person.Siblings) { family.AddChild(parent, sibling, ParentChildModifier.Natural); } } // Setter for property change notification person.HasParents = true; }