public void SetCompositeRoles(IRelationType relationType, Extent roles)
        {
            if (roles == null || roles.Count == 0)
            {
                this.RemoveCompositeRoles(relationType);
                return;
            }

            this.AssertNotDeleted();

            var roleObjectIds = new List <long>();

            foreach (IObject role in roles)
            {
                if (role != null)
                {
                    RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, role);
                    roleObjectIds.Add(role.Id);
                }
            }

            switch (relationType.Multiplicity)
            {
            case Multiplicity.OneToMany:
                this.session.SetCompositeRoleOneToMany(this.objectId, relationType.RoleType, roleObjectIds.ToArray());
                return;

            case Multiplicity.ManyToMany:
                this.session.SetCompositeRoleManyToMany(this.objectId, relationType.RoleType, roleObjectIds.ToArray());
                return;

            default:
                throw new Exception("Unsupported multiplicity " + relationType.Multiplicity);
            }
        }
Exemple #2
0
        public virtual void RemoveCompositeRole(IRelationType relationType, IObject roleObject)
        {
            this.AssertExist();

            if (roleObject != null)
            {
                RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, roleObject);

                var role = (Strategy)roleObject.Strategy;
                this.Roles.RemoveCompositeRole(relationType.RoleType, role);
            }
        }
        public void RemoveCompositeRoles(IRelationType relationType)
        {
            this.AssertNotDeleted();
            RoleAssertions.CompositeRolesChecks(this, relationType.RoleType);

            switch (relationType.Multiplicity)
            {
            case Multiplicity.OneToMany:
                this.session.RemoveCompositeRolesOneToMany(this.objectId, relationType.RoleType);
                return;

            case Multiplicity.ManyToMany:
                this.session.RemoveCompositeRolesManyToMany(this.objectId, relationType.RoleType);
                return;

            default:
                throw new Exception("Unsupported multiplicity " + relationType.Multiplicity);
            }
        }
Exemple #4
0
        public virtual void SetCompositeRoles(IRelationType relationType, Allors.Extent roleObjects)
        {
            if (roleObjects == null || roleObjects.Count == 0)
            {
                this.RemoveCompositeRoles(relationType);
            }
            else
            {
                this.AssertExist();
                var roleType = relationType.RoleType;

                // TODO: use CompositeRoles
                var previousRoles = new List <long>(this.Roles.GetCompositeRoles(roleType));
                var newRoles      = new HashSet <long>();

                foreach (IObject roleObject in roleObjects)
                {
                    if (roleObject != null)
                    {
                        RoleAssertions.CompositeRolesChecks(this, roleType, roleObject);
                        var role = (Strategy)roleObject.Strategy;

                        if (!previousRoles.Contains(role.ObjectId))
                        {
                            this.Roles.AddCompositeRole(roleType, role);
                        }

                        newRoles.Add(role.ObjectId);
                    }
                }

                foreach (var previousRole in previousRoles)
                {
                    if (!newRoles.Contains(previousRole))
                    {
                        this.Roles.RemoveCompositeRole(roleType, this.SqlSession.GetOrCreateAssociationForExistingObject(previousRole).Strategy);
                    }
                }
            }
        }
        public void AddCompositeRole(IRelationType relationType, IObject role)
        {
            if (role == null)
            {
                return;
            }

            this.AssertNotDeleted();
            RoleAssertions.CompositeRolesChecks(this, relationType.RoleType, role);

            switch (relationType.Multiplicity)
            {
            case Multiplicity.OneToMany:
                this.session.AddCompositeRoleOneToMany(this.objectId, relationType.RoleType, role.Id);
                return;

            case Multiplicity.ManyToMany:
                this.session.AddCompositeRoleManyToMany(this.objectId, relationType.RoleType, role.Id);
                return;

            default:
                throw new Exception("Unsupported multiplicity " + relationType.Multiplicity);
            }
        }