Ejemplo n.º 1
0
        public void SetCompositeRole(IRelationType relationType, IObject role)
        {
            this.AssertNotDeleted();

            if (role == null)
            {
                this.RemoveCompositeRole(relationType);
                return;
            }

            RoleAssertions.CompositeRoleChecks(this, relationType.RoleType, role);

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

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

            default:
                throw new Exception("Unsupported multiplicity " + relationType.Multiplicity);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        public virtual void RemoveCompositeRole(IRelationType relationType)
        {
            this.AssertExist();

            RoleAssertions.CompositeRoleChecks(this, relationType.RoleType);

            this.Roles.RemoveCompositeRole(relationType.RoleType);
        }
Ejemplo n.º 4
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);
            }
        }
Ejemplo n.º 5
0
        public virtual void RemoveCompositeRoles(IRelationType relationType)
        {
            this.AssertExist();

            RoleAssertions.CompositeRoleChecks(this, relationType.RoleType);

            var previousRoles = this.Roles.GetCompositesRole(relationType.RoleType);

            foreach (var previousRole in previousRoles)
            {
                this.Roles.RemoveCompositeRole(relationType.RoleType, this.Session.State.GetOrCreateReferenceForExistingObject(previousRole, this.Session).Strategy);
            }
        }
Ejemplo n.º 6
0
        public void SetUnitRole(IRelationType relationType, object unit)
        {
            if (unit == null)
            {
                this.RemoveUnitRole(relationType);
                return;
            }

            this.AssertNotDeleted();

            RoleAssertions.UnitRoleChecks(this, relationType.RoleType);
            unit = relationType.RoleType.Normalize(unit);
            this.session.SetUnitRole(this.objectId, relationType.RoleType, unit);
        }
Ejemplo n.º 7
0
        public virtual void RemoveCompositeRoles(IRelationType relationType)
        {
            this.AssertExist();

            var roleType = relationType.RoleType;

            RoleAssertions.CompositeRoleChecks(this, roleType);

            var previousRoles = this.Roles.GetCompositeRoles(roleType);

            foreach (var previousRole in previousRoles)
            {
                this.Roles.RemoveCompositeRole(roleType, this.SqlSession.GetOrCreateAssociationForExistingObject(previousRole).Strategy);
            }
        }
Ejemplo n.º 8
0
        public virtual void SetCompositeRole(IRelationType relationType, IObject newRoleObject)
        {
            if (newRoleObject == null)
            {
                this.RemoveCompositeRole(relationType);
                return;
            }

            this.AssertExist();

            RoleAssertions.CompositeRoleChecks(this, relationType.RoleType, newRoleObject);

            var newRoleObjectId = (Strategy)newRoleObject.Strategy;

            this.Roles.SetCompositeRole(relationType.RoleType, newRoleObjectId);
        }
Ejemplo n.º 9
0
        public virtual void SetUnitRole(IRelationType relationType, object role)
        {
            this.AssertExist();

            RoleAssertions.UnitRoleChecks(this, relationType.RoleType);

            if (role != null)
            {
                role = relationType.RoleType.Normalize(role);
            }

            var oldUnit = this.GetUnitRole(relationType);

            if (!Equals(oldUnit, role))
            {
                this.Roles.SetUnitRole(relationType.RoleType, role);
            }
        }
Ejemplo n.º 10
0
        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);
            }
        }
Ejemplo n.º 11
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);
                    }
                }
            }
        }
Ejemplo n.º 12
0
        public void AddCompositeRole(IRoleType roleType, IObject role)
        {
            if (role == null)
            {
                return;
            }

            this.AssertNotDeleted();
            RoleAssertions.CompositeRolesChecks(this, roleType, role);

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

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

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