Exemple #1
0
        /// <summary>
        /// Restores a hierarchy of annotation replies
        /// </summary>
        /// <param name="connectionId">Socket connection identifier to validate user permissions for</param>
        /// <param name="fileId">The document path to update the reply text for</param>
        /// <param name="annotationGuid">The annotation global unique identifier</param>
        /// <param name="replies">The list of annotation replies to restore</param>
        /// <returns>An instance of an object containing the operation result</returns>
        public RestoreRepliesResult RestoreAnnotationReplies(string connectionId, string fileId, string annotationGuid, AnnotationReplyInfo[] replies)
        {
            var reviewer = _annotationBroadcaster.GetConnectionUser(connectionId);

            if (reviewer == null)
            {
                throw new AnnotatorException("There is no such reviewer.");
            }
            var user     = _userSvc.GetUserByGuid(reviewer.Value.UserGuid);
            var document = GetDocument(fileId, user.Id);

            _annotator.CheckReviewerPermissions(user.Id, document.Id, AnnotationReviewerRights.CanAnnotate);

            if (replies == null || replies.Length == 0)
            {
                return(new RestoreRepliesResult {
                    AnnotationGuid = annotationGuid, ReplyIds = new string[0]
                });
            }

            var idsMap = new StringDictionary();
            var result = new RestoreRepliesResult {
                AnnotationGuid = annotationGuid, ReplyIds = new string[replies.Length]
            };
            var annotation = _mapper.Map <CreateAnnotationResult>(_annotator.GetAnnotation(annotationGuid, document.Id, user.Id));

            for (var i = 0; i < replies.Length; i++)
            {
                var r          = replies[i];
                var parentGuid = (!string.IsNullOrEmpty(r.ParentReplyGuid) && idsMap.ContainsKey(r.ParentReplyGuid) ?
                                  idsMap[r.ParentReplyGuid] : r.ParentReplyGuid);
                var replyResult = _annotator.CreateAnnotationReply(annotation.Id, r.Message, parentGuid, document.Id, user.Id);

                idsMap[r.Guid]     = replyResult.ReplyGuid;
                result.ReplyIds[i] = replyResult.ReplyGuid;
            }

            return(result);
        }