public List <IRelationship> getRelationshipsOfType(ERelationshipType relationshipType)
        {
            switch (relationshipType)
            {
            case ERelationshipType.aegtefaelle: return(aegtefaelle());

            case ERelationshipType.boern: return(boern());

            case ERelationshipType.bopaelssamling: return(bopaelssamling());

            case ERelationshipType.erstatingAf: return(erstatingAf());

            case ERelationshipType.erstatingFor: return(erstatingFor());

            case ERelationshipType.fader: return(fader());

            case ERelationshipType.foraeldremydighedsboern: return(foraeldremydighedsboern());

            case ERelationshipType.foraeldremyndighedsindehaver: return(foraeldremyndighedsindehaver());

            case ERelationshipType.moder: return(moder());

            case ERelationshipType.registreretPartner: return(registreretPartner());

            case ERelationshipType.retligHandleevneVaergeForPersonen: return(retligHandleevneVaergeForPersonen());

            case ERelationshipType.retligHandleevneVaergemaalsindehaver: return(retligHandleevneVaergemaalsindehaver());

            default: throw new ArgumentException();     //If ERelationshipType is modified it will be caught
            }
        }
            /**
             * helper method to make the class immutable
             * @param referencedValues IRelationship representations of Relationships
             * @return  of a copy of the referencedValues
             */
            private List <IRelationship> defensiveCopyOfValues(
                List <IRelationship> referencedValues,
                ERelationshipType referencedType)
            {
                // null check
                if (referencedValues == null)
                {
                    return(null);
                }

                // make defensive copy
                List <IRelationship> copy = new List <IRelationship>();

                foreach (IRelationship relationship in referencedValues)
                {
                    if (isCorrectRelationshipType(relationship, referencedType))
                    {
                        copy.Add(relationship);
                    }
                    else
                    {
                        throw new ArgumentException();
                    }
                }

                return(copy);
            }
 /**
  * helper method to help check if the relationship is of the correct type
  * @param relationship IRelationship to be checked
  * @param shouldBeType ERelationshipType that the relationship parameter should be
  * @return Boolean value of the check if relationship is of shouldBeType
  */
 private Boolean isCorrectRelationshipType(IRelationship relationship, ERelationshipType shouldBeType)
 {
     if (relationship.relationshipType() == shouldBeType)
     {
         return(true);
     }
     return(false);
 }
 private Relationship(Builder builder)
 {
     _comment       = builder._comment;
     _referenceUrn  = builder._referenceUrn;
     _referenceUuid = builder._referenceUuid;
     _effect        = builder._effect;
     _type          = builder._type;
 }
        public Dependent(string employeeId, Name name, Document document, EDependentType depedentType, ERelationshipType relationshipType, decimal percent)
        {
            EmployeeId       = employeeId;
            Name             = name;
            Document         = document;
            DepedentType     = depedentType;
            RelationshipType = relationshipType;
            Percent          = percent;

            AddNotifications(name, document);
        }
            public Builder selectTheRightRelationship(List <IRelationship> newRelationship)
            {
                // guard check
                if (newRelationship == null || newRelationship.Count == 0)
                {
                    return(null);
                }

                ERelationshipType _type = newRelationship[0].relationshipType();

                switch (_type)
                {
                case ERelationshipType.aegtefaelle:     // spouse
                    aegtefaelle(newRelationship);
                    break;

                case ERelationshipType.boern:     // children
                    boern(newRelationship);
                    break;

                case ERelationshipType.bopaelssamling:
                    bopaelssamling(newRelationship);
                    break;

                case ERelationshipType.erstatingAf:
                    erstatingAf(newRelationship);
                    break;

                case ERelationshipType.erstatingFor:
                    erstatingFor(newRelationship);
                    break;

                case ERelationshipType.fader:     // father
                    fader(newRelationship);
                    break;

                case ERelationshipType.foraeldremydighedsboern:
                    foraeldremydighedsboern(newRelationship);
                    break;

                case ERelationshipType.foraeldremyndighedsindehaver:     //
                    foraeldremyndighedsindehaver(newRelationship);
                    break;

                case ERelationshipType.moder:     // mother
                    moder(newRelationship);
                    break;

                case ERelationshipType.registreretPartner:     // registered partner
                    registreretPartner(newRelationship);
                    break;

                case ERelationshipType.retligHandleevneVaergeForPersonen:     // legal guardian
                    retligHandleevneVaergeForPersonen(newRelationship);
                    break;

                case ERelationshipType.retligHandleevneVaergemaalsindehaver:
                    retligHandleevneVaergemaalsindehaver(newRelationship);
                    break;

                default:
                    throw new ArgumentException();     //If ERelationshipType is modified it will be caught
                }
                return(this);
            }
 public Builder type(ERelationshipType newType)
 {
     _type = newType; return(this);
 }