Example #1
0
 public Partnership(IFamilyMember partner1, IFamilyMember partner2, bool isDivorced = false) : base(partner1)
 {
     Partner2 = partner2;
     partner1.Partnerships.Add(this);
     partner2.Partnerships.Add(this);
     IsDivorced = isDivorced;
 }
        //Algorithm to be implemented in derived classes
        public virtual void Execute(IFamilyTree tree, IFamilyMember source = null)
        {
            if (tree == null || tree.Root == null)
            {
                throw new ArgumentNullException("Tree cannot be null.");
            }

            this.tree = tree;

            if (source != null)
            {
                if (!tree.MemberExists(source))
                {
                    throw new NotInFamilyTreeException(source);
                }
                //prevent source from being inlaw. Inlaws do not have parents, which
                //breaks traversal.
                if (source.HasFact(FactType.InLaw))
                {
                    throw new InvalidSourceException(source);
                }

                source.AddFact(FactType.XPosition, 0);
                source.AddFact(FactType.XPosition, 0);
                this.source = source;
            }

            Execute();
        }
 private void AddMember(IFamilyMember member)
 {
     if (MemberExists(member))
     {
         throw new DuplicateMemberException(member);
     }
     members.Add(member.Id, member);
 }
 public virtual int CalculateDiscount(IFamilyMember familyMember)
 {
     if (familyMember.FirstName.StartsWith("A", StringComparison.CurrentCultureIgnoreCase))
     {
         return(10);
     }
     return(0);
 }
        public ChildSubResolver_Unit()
        {
            successorMock = new Mock <INieceNephewSubResolver>();
            resolver      = new ChildSubResolver(successorMock.Object);

            sourceMock = new Mock <IFamilyMember>();
            sourceMock.Setup(x => x.GetFactValue <int>(FactType.XPosition)).Returns(0);
            sourceMock.Setup(x => x.GetFactValue <int>(FactType.YPosition)).Returns(0);
            source = sourceMock.Object;
        }
Example #6
0
        public SpouseSubResolver_Unit()
        {
            successorMock = new Mock <ISiblingSubResolver>();
            resolver      = new SpouseSubResolver(successorMock.Object);

            sourceMock = new Mock <IFamilyMember>();
            sourceMock.Setup(x => x.GetFactValue <int>(FactType.XPosition)).Returns(0);
            sourceMock.Setup(x => x.GetFactValue <int>(FactType.YPosition)).Returns(0);
            source = sourceMock.Object;
        }
Example #7
0
        private static void DisplayMemberWithFacts(IFamilyMember fm)
        {
            string facts = "";

            foreach (var f in fm.GetFacts())
            {
                facts += string.Format("{0}: {1}; ", f.Type, f.Value);
            }
            Console.WriteLine(fm.Name + " - " + facts);
        }
Example #8
0
 public override string Handle(IFamilyMember source, IFamilyMember target)
 {
     if (target.GetFactValue <int>(FactType.YPosition) == -1 && target.HasFact(FactType.Ancestor))
     {
         return(RelationshipType.Parent.ToString());
     }
     else
     {
         return(successor.Handle(source, target));
     }
 }
Example #9
0
 public IFamilyMember OtherPartner(IFamilyMember member)
 {
     if (member == Partner1)
     {
         return(Partner2);
     }
     else
     {
         return(Partner1);
     }
 }
Example #10
0
        public ParentSubResolver_Unit()
        {
            successorMock = new Mock <IAuntUncleSubResolver>();
            resolver      = new ParentSubResolver(successorMock.Object);

            var sourceMock = new Mock <IFamilyMember>();

            sourceMock.Setup(x => x.GetFactValue <int>(FactType.XPosition)).Returns(0);
            sourceMock.Setup(x => x.GetFactValue <int>(FactType.YPosition)).Returns(0);
            source = sourceMock.Object;
        }
 public override string Handle(IFamilyMember source, IFamilyMember target)
 {
     if (target.GetFactValue <int>(FactType.YPosition) == 1 && !target.HasFact(FactType.Ancestor))
     {
         return(target.Gender == Gender.Female ? RelationshipType.Niece.ToString() : RelationshipType.Nephew.ToString());
     }
     else
     {
         return(successor.Handle(source, target));
     }
 }
 public override string Handle(IFamilyMember source, IFamilyMember target)
 {
     if (target.GetFactValue <int>(FactType.YPosition) < -1 && !target.HasFact(FactType.Ancestor))
     {
         return(string.Format("{0}{1}",
                              GetGreatness(target.GetFactValue <int>(FactType.YPosition)),
                              target.Gender == Gender.Female ? RelationshipType.Aunt.ToString() : RelationshipType.Uncle.ToString()));
     }
     else
     {
         return(successor.Handle(source, target));
     }
 }
Example #13
0
        public override string Handle(IFamilyMember source, IFamilyMember target)
        {
            var isEx = source.IsDivorcedFrom(target);

            if (target.GetFactValue <int>(FactType.YPosition) == 0 && !source.IsMarriedTo(target) && !isEx)
            {
                return(RelationshipType.Sibling.ToString());
            }
            else
            {
                return(successor.Handle(source, target));
            }
        }
 public override string Handle(IFamilyMember source, IFamilyMember target)
 {
     if (target.GetFactValue <int>(FactType.YPosition) > 1 && target.HasFact(FactType.Ancestor))
     {
         return(string.Format("{0}{1}",
                              GetGreatness(target.GetFactValue <int>(FactType.YPosition)),
                              RelationshipType.Grandchild));
     }
     else
     {
         return(successor.Handle(source, target));
     }
 }
        public static void AddToFamily(this IFamilyMember item, IFamilyRegister register, bool isMale, string name)
        {
            IFamily family = null;

            if (PreferExistingFamilyToNew)
            {
                IEnumerable <IFamily> candidateFamilies = register.Families.AsEnumerable().Where(fam => fam.Name == name);
                if (PreferCreatingParentToChild)
                {
                    if (isMale)
                    {
                        family = candidateFamilies.Where(fam => fam.Father == null).FirstOrDefault();
                    }
                    else
                    {
                        family = candidateFamilies.Where(fam => fam.Mother == null).FirstOrDefault();
                    }
                }
                family = family ?? candidateFamilies.FirstOrDefault();
            }
            if (family == null)
            {
                family = new Family {
                    Name = name
                };
                register.Families.Add(family);
            }
            if (isMale)
            {
                if (family.Father == null && PreferCreatingParentToChild)
                {
                    family.Father = item;
                }
                else
                {
                    family.Sons.Add(item);
                }
            }
            else
            {
                if (family.Mother == null && PreferCreatingParentToChild)
                {
                    family.Mother = item;
                }
                else
                {
                    family.Daughters.Add(item);
                }
            }
        }
        public static void SetFullName(this IFamilyMember member, string newName)
        {
            var family    = member.Parent as IFamily;
            var separator = newName.IndexOf(", ");
            var lastName  = newName.Substring(0, separator);
            var firstName = newName.Substring(separator + 2);

            member.Name = firstName;
            if (family != null && family.Name != lastName)
            {
                var isMale = member.FatherInverse != null || member.SonsInverse != null;
                member.AddToFamily(family.FamiliesInverse, isMale, lastName);
            }
        }
Example #17
0
 public void Process(IFamilyTree tree, IFamilyMember source)
 {
     try
     {
         foreach (var alg in algorithms)
         {
             alg.Execute(tree, source);
         }
     }
     catch (Exception)
     {
         tree.ClearMemberFacts();
         throw;
     }
 }
Example #18
0
        public override string Handle(IFamilyMember source, IFamilyMember target)
        {
            var isEx = source.IsDivorcedFrom(target);

            if (target.GetFactValue <int>(FactType.YPosition) == 0 && (source.IsMarriedTo(target) || isEx))
            {
                return(string.Format("{0}{1}",
                                     isEx ? (RelationshipModifier.Ex.ToString() + "-") : string.Empty,
                                     RelationshipType.Spouse.ToString()));
            }
            else
            {
                return(successor.Handle(source, target));
            }
        }
 private IBenefitDeductionItem CreateBenefitItem(IFamilyMember familyMember)
 {
     return(new BenefitDeductionItem()
     {
         EmployeeId = _Employee.EmployeeId,
         FamilyMemberId = familyMember.FamilyMemberId,
         FirstName = familyMember.FirstName,
         MiddleName = familyMember.MiddleName,
         LastName = familyMember.LastName,
         NumberOfPayPeriod = _Salary.NumberOfPayPeriod,
         AnnualCostGross = 500.00m,
         IsSpouse = familyMember.IsSpouse,
         IsChild = familyMember.IsChild,
         AnnualDiscountPerentage = CalculateDiscount(familyMember)
     });
 }
        public void AddNonPartnershipChild(IFamilyMember parent, IFamilyMember child)
        {
            if (!MemberExists(parent))
            {
                throw new NotInFamilyTreeException(parent);
            }
            if (child.Parents != null)
            {
                throw new ExistingParentsReferenceException(child);
            }

            child.AddFact(FactType.HasSingleParent, true);
            child.AddFact(FactType.Depth, (int)parent.Facts[FactType.Depth].Value + 1);
            AddMember(child);
            parent.NonPartnership.Children.Add(child);
            child.Parents = parent.NonPartnership;
        }
        private static FamilyMemberDto Convert(IFamilyMember aFamilyMember)
        {
            if (aFamilyMember == null)
            {
                return(null);
            }

            var MapperConfig = new MapperConfiguration(cfg => {
                cfg.CreateMap <IFamilyMember, FamilyMemberDto>();
            });

            IMapper iMapper = MapperConfig.CreateMapper();

            var Results = iMapper.Map <IFamilyMember, FamilyMemberDto>(aFamilyMember);

            return(Results);
        }
Example #22
0
        private void Above(IChildBearingBase n, int x, int y)
        {
            // MarkedChildBearingBases.Add(n);
            if (n is IParentship)
            {
                IFamilyMember nextParent = ((IParentship)n).Partner1;
                //set relative position
                nextParent.AddFact(FactType.XPosition, x);
                nextParent.AddFact(FactType.YPosition, y);
                nextParent.AddFact(FactType.Ancestor, true);

                MarkedMembers.Add(nextParent);
                //ensure that we recurse over non-inlaw partner
                if (n is IPartnership)
                {
                    var partnership  = n as IPartnership;
                    var otherPartner = partnership.OtherPartner(nextParent);
                    //set relative position
                    otherPartner.AddFact(FactType.XPosition, x);
                    otherPartner.AddFact(FactType.YPosition, y);
                    otherPartner.AddFact(FactType.Ancestor, true);

                    MarkedMembers.Add(otherPartner);
                    if (nextParent.HasFact(FactType.InLaw))
                    {
                        nextParent = otherPartner;
                    }
                }

                //recurse through nextParent parentships/partnerships
                foreach (IChildBearingBase p in nextParent)
                {
                    if (!MarkedChildBearingBases.Contains(p))
                    {
                        Below(p, x, y + 1, y);
                    }
                }

                //move up
                if (!MarkedChildBearingBases.Contains(nextParent.Parents))
                {
                    Above(nextParent.Parents, x, y - 1);
                }
            }
        }
        public void SetRoot(IPartnership root, IFamilyMember inlaw)
        {
            this.Root = root;
            if (root.Partner1 != null)
            {
                root.Partner1.AddFact(FactType.Depth, 0);
                AddMember(root.Partner1);
            }
            if (root.Partner2 != null)
            {
                root.Partner2.AddFact(FactType.Depth, 0);
                AddMember(root.Partner2);
            }

            inlaw.AddFact(FactType.InLaw, true);

            AddPartnership(root);
        }
        public void AddChild(IPartnership partnership, IFamilyMember child)
        {
            if (partnership != null && !PartnershipExists(partnership))
            {
                throw new InvalidPartnershipException("Cannot add children to a partnership that does not exist.");
            }
            if (child.Parents != null)
            {
                throw new ExistingParentsReferenceException(child);
            }

            AddMember(child);

            child.Parents = partnership;
            partnership.Children.Add(child);

            //Determine depth based on parents
            int depth = (int)(partnership.Partner1.Facts[FactType.Depth]?.Value ?? partnership.Partner2.Facts[FactType.Depth]?.Value) + 1;

            child.AddFact(FactType.Depth, depth);
        }
        public IPartnership AddPartnership(IFamilyMember partner1, IFamilyMember partner2, bool isDivorced = false)
        {
            var p1Exists = MemberExists(partner1);
            var p2Exists = MemberExists(partner2);

            if (!p1Exists || !p2Exists)
            {
                throw new NotInFamilyTreeException(!p1Exists ? partner1 : partner2);
            }

            var partnership = FamilyTreeFactory.CreatePartnership(partner1, partner2, isDivorced);

            IFamilyMember blood = null,
                          inlaw = null;

            inlaw = partner1.HasFact(FactType.InLaw) ? partner1 : partner2;
            blood = partnership.OtherPartner(inlaw);
            inlaw.AddFact(FactType.Depth, blood.Facts[FactType.Depth].Value);

            AddPartnership(partnership);

            return(partnership);
        }
Example #26
0
 static void Family(IFamilyMember pobj)
 {
     pobj.Sorrow();
     pobj.JoyOrLaughter();
 }
 public abstract string Handle(IFamilyMember source, IFamilyMember target);
Example #28
0
 public bool IsMarriedTo(IFamilyMember member)
 {
     return(Partnerships.Exists(x => x.OtherPartner(this) == member && x.IsDivorced == false));
 }
Example #29
0
 public abstract string Execute(IFamilyMember source, IFamilyMember target);
Example #30
0
 public bool IsDivorcedFrom(IFamilyMember member)
 {
     return(Partnerships.Exists(x => x.OtherPartner(this) == member && x.IsDivorced == true));
 }