Ejemplo n.º 1
0
        internal void RemoveRole(DynamicObject association, IDynamicRoleType roleType, DynamicObject role)
        {
            IDynamicAssociationType associationType = roleType.AssociationType;

            this.GetAssociation(role, associationType, out object previousAssociation);

            this.GetRole(association, roleType, out object previousRole);
            if (previousRole != null)
            {
                // Role
                var changedRoleByAssociation = this.ChangedRoleByAssociation(roleType);
                changedRoleByAssociation[association] = NullableArraySet.Remove(previousRole, role);

                // Association
                var changedAssociationByRole = this.ChangedAssociationByRole(associationType);
                if (associationType.IsOne)
                {
                    // One to Many
                    changedAssociationByRole[role] = null;
                }
                else
                {
                    // Many to Many
                    changedAssociationByRole[role] = NullableArraySet.Add(previousAssociation, association);
                }
            }
        }
Ejemplo n.º 2
0
        internal void AddRole(DynamicObject association, IDynamicRoleType roleType, DynamicObject role)
        {
            IDynamicAssociationType associationType = roleType.AssociationType;

            this.GetAssociation(role, associationType, out object previousAssociation);

            // Role
            var changedRoleByAssociation = this.ChangedRoleByAssociation(roleType);

            this.GetRole(association, roleType, out object previousRole);
            DynamicObject[] roleArray = (DynamicObject[])previousRole;
            roleArray = NullableArraySet.Add(roleArray, role);
            changedRoleByAssociation[association] = roleArray;

            // Association
            var changedAssociationByRole = this.ChangedAssociationByRole(associationType);

            if (associationType.IsOne)
            {
                // One to Many
                DynamicObject previousAssociationObject = (DynamicObject)previousAssociation;
                if (previousAssociationObject != null)
                {
                    this.GetRole(previousAssociationObject, roleType, out object previousAssociationRole);
                    changedRoleByAssociation[previousAssociationObject] = NullableArraySet.Remove(previousAssociationRole, role);
                }

                changedAssociationByRole[role] = association;
            }
            else
            {
                // Many to Many
                changedAssociationByRole[role] = NullableArraySet.Add(previousAssociation, association);
            }
        }
Ejemplo n.º 3
0
        private void AddAssociationType(IDynamicAssociationType associationType)
        {
            this.CheckNames(associationType.SingularName, associationType.PluralName);

            this.assignedAssociationTypeByName.Add(associationType.SingularName, associationType);
            this.assignedAssociationTypeByName.Add(associationType.PluralName, associationType);
        }
Ejemplo n.º 4
0
        private Dictionary <DynamicObject, object> ChangedAssociationByRole(IDynamicAssociationType associationType)
        {
            if (!this.changedAssociationByRoleByAssociationType.TryGetValue(associationType, out Dictionary <DynamicObject, object> changedAssociationByRole))
            {
                changedAssociationByRole = new Dictionary <DynamicObject, object>();
                this.changedAssociationByRoleByAssociationType[associationType] = changedAssociationByRole;
            }

            return(changedAssociationByRole);
        }
Ejemplo n.º 5
0
        private Dictionary <DynamicObject, object> AssociationByRole(IDynamicAssociationType asscociationType)
        {
            if (!this.associationByRoleByAssociationType.TryGetValue(asscociationType, out Dictionary <DynamicObject, object> associationByRole))
            {
                associationByRole = new Dictionary <DynamicObject, object>();
                this.associationByRoleByAssociationType[asscociationType] = associationByRole;
            }

            return(associationByRole);
        }
Ejemplo n.º 6
0
        internal void GetAssociation(DynamicObject role, IDynamicAssociationType associationType, out object association)
        {
            if (this.changedAssociationByRoleByAssociationType.TryGetValue(associationType, out var changedAssociationByRole) &&
                changedAssociationByRole.TryGetValue(role, out association))
            {
                return;
            }

            this.AssociationByRole(associationType).TryGetValue(role, out association);
        }
Ejemplo n.º 7
0
        private bool TryGetAssociation(IDynamicAssociationType associationType, out object result)
        {
            result = this.Population.GetAssociation(this, associationType);
            if (result == null && associationType.IsMany)
            {
                result = associationType.ObjectType.EmptyArray;
            }

            return(true);
        }
Ejemplo n.º 8
0
 public object GetAssociation(DynamicObject obj, IDynamicAssociationType associationType)
 {
     this.database.GetAssociation(obj, associationType, out var result);
     return(result);
 }