public RelationFormModel(int sourceId, int targetId, RelationRule relation)
 {
     SourceId    = sourceId;
     TargetId    = targetId;
     Title       = relation.Title;
     Description = relation.Description;
     Color       = relation.Color;
     ArrowStyle  = relation.ArrowStyle;
 }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="currentMember"></param>
        /// <param name="center1"></param>
        /// <param name="center2"></param>
        /// <param name="rule"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public virtual bool ValidateCardinality(Member currentMember, Center center1, Center center2, RelationRule rule, out string message)
        {
            message = "";
            if (center1.Id <= 0 && center2.Id <= 0)
            {
                return(true);
            }

            if (rule.Cardinality == (int)Cardinalities.Peer2Peer)
            {
                if (currentMember != null && currentMember.Id != 0)
                {
                    if ((center1.Id > 0 && GetMemberships(center1.Id, (RelationTypes)rule.RelationTypeId, false, false).Any(p => p.MemberId != currentMember.Id)) ||
                        (center2.Id > 0 && GetMemberships(center2.Id, (RelationTypes)rule.RelationTypeId, false, false).Any(p => p.MemberId != currentMember.Id)))
                    {
                        message = "1:1 relationships cannot have more than 1 endpoints on neither of entities.";
                        return(false);
                    }
                }
                else
                {
                    if ((center1.Id > 0 && GetMemberships(center1.Id, (RelationTypes)rule.RelationTypeId, false, false).Any()) ||
                        (center2.Id > 0 && GetMemberships(center2.Id, (RelationTypes)rule.RelationTypeId, false, false).Any()))
                    {
                        message = "1:1 relationships cannot have more than 1 endpoints on neither of entities.";
                        return(false);
                    }
                }
            }
            else if (rule.Cardinality == (int)Cardinalities.One2Many)
            {
                if (currentMember != null && currentMember.Id != 0)
                {
                    if ((center2.Id > 0 && GetSelfMemberships(center2, (RelationTypes)rule.RelationTypeId, false).Any(p => p.Id != currentMember.Id && p.CenterId2 == center2.Id)))
                    {
                        message = "1:N relationships cannot have more than 1 endpoints on the second entity.";
                        return(false);
                    }
                }
                else
                {
                    if ((center2.Id > 0 && GetSelfMemberships(center2, (RelationTypes)rule.RelationTypeId).Any(p => p.CenterId2 == center2.Id)))
                    {
                        message = "1:N relationships cannot have more than 1 endpoints on the second entity.";
                        return(false);
                    }
                }
            }

            return(true);
        }