Exemple #1
0
        /// <summary>
        /// Sets types for relations of expert.
        /// </summary>
        /// <param name="relationTuple">Plain object, that contains id of relation and flags of existence any relations.</param>
        /// <param name="expertName">Expert name.</param>
        /// <param name="sessionOfExperts">Session of experts.</param>
        public virtual void RelationTypes(
            [NotNull] RelationTupleDto relationTuple,
            [NotNull] string expertName,
            [NotNull] SessionOfExperts sessionOfExperts)
        {
            if (relationTuple == null)
            {
                throw new ArgumentNullException(nameof(relationTuple));
            }
            if (expertName == null)
            {
                throw new ArgumentNullException(nameof(expertName));
            }
            if (sessionOfExperts == null)
            {
                throw new ArgumentNullException(nameof(sessionOfExperts));
            }

            var expert = GetExpertByNameAndSession(expertName, sessionOfExperts, ExpertFetch.Relations);

            IfExpertDoesNotExistThrow(expert, expertName, sessionOfExperts);

            var straightRelationTypes = new List <RelationType>();
            var reverseRelationTypes  = new List <RelationType>();

            if (relationTuple.DoesRelationExist)
            {
                var generalType  = _relationTypeRepository.GetGeneralType();
                var taxonomyType = _relationTypeRepository.GetTaxonomyType();
                var meronomyType = _relationTypeRepository.GetMeronomyType();

                straightRelationTypes.Add(generalType);
                reverseRelationTypes.Add(generalType);

                if (relationTuple.IsStraightTaxonym)
                {
                    straightRelationTypes.Add(taxonomyType);
                }
                if (relationTuple.IsStraightMeronym)
                {
                    straightRelationTypes.Add(meronomyType);
                }
                if (relationTuple.IsReverseTaxonym)
                {
                    reverseRelationTypes.Add(taxonomyType);
                }
                if (relationTuple.IsReverseMeronym)
                {
                    reverseRelationTypes.Add(meronomyType);
                }
            }

            // ReSharper disable once PossibleNullReferenceException
            expert.SetTypesForRelation(relationTuple.StraightRelationId, straightRelationTypes, null);
            expert.SetTypesForRelation(relationTuple.ReverseRelationId, reverseRelationTypes, null);
            _expertRepository.AddOrUpdate(expert);
        }