示例#1
0
 public void DeleteAttachments(string volumeName, DocIdentity identity, List <string> attachmentNames)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, identity.DocUidFilter))
     {
         attachmentNames.ForEach(attachmentName => volume.DeleteAttachment(attachmentName));
     }
 }
示例#2
0
 public void NewAttachmentFromFile(string volumeName, DocIdentity docIdentity, string filePath, string attachmentName)
 {
     using (Volume volObj = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
     {
         volObj.NewAttachmentFromFile(filePath, attachmentName);
     }
 }
示例#3
0
 public void DeleteDocument(string volumeName, DocIdentity docIdentity)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
     {
         volume.DeleteCurrentDocument();
     }
 }
示例#4
0
 public bool IsDocumentExist(string volumeName, DocIdentity docIdentity)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
     {
         return(volume.DocumentCount > 0);
     }
 }
示例#5
0
        private static Document GetDocument(Volume volume, DocIdentity identity)
        {
            Document doc = new Document(identity.CompositeId.ToString())
            {
                // read system fields
                Extension      = volume.DocumentExtension,
                Timestamp      = volume.DocumentTimestamp,
                HasAttachments = volume.DocumentHasAttachments,
                Version        = volume.DocumentVersion,
                AddTime        = volume.DocumentAddTime
            };

            int fieldIndex = 0;

            foreach (FieldInfo field in volume.Fields)
            {
                doc.Fields.Add(new Field
                {
                    Name  = field.Name,
                    Value = volume[fieldIndex]
                });
                fieldIndex++;
            }

            return(doc);
        }
示例#6
0
 public void DeleteAttachment(string volumeName, DocIdentity docIdentity, string attachmentName)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
     {
         volume.DeleteAttachment(attachmentName);
     }
 }
示例#7
0
        public DocumentsResult GetDocuments(VolumeState volumeState, int start, int count)
        {
            if (start < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(start));
            }

            Volume volume = OpenVolume(volumeState);

            List <Document> documents = new List <Document>();

            if (volume.DocumentCount == 0)
            {
                return(DocumentsResult.Empty);
            }

            int index = 0;

            volume.Move(start);
            while (index < count && !volume.IsEOF)
            {
                DocIdentity identity = new DocIdentity(volume.VolumeMemberDocId, volume.VolumeId);

                Document doc = GetDocument(volume, identity);

                documents.Add(doc);

                volume.MoveNext();
                index++;
            }

            return(new DocumentsResult(documents, volume.DocumentCount));
        }
示例#8
0
 public List <AttachmentInfo> GetAttachments(string volumeName, DocIdentity identity)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, identity.DocUidFilter))
     {
         List <string> attachments = volume.GetAttachments();
         return(attachments.Select(attName => volume.GetAttachmentInfo(attName)).ToList());
     }
 }
示例#9
0
 public AttachmentInfo RenameAttachment(string volumeName, DocIdentity docIdentity, string oldAttachmentName, string newAttachmentName)
 {
     using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
     {
         volume.RenameAttachment(oldAttachmentName, newAttachmentName);
         return(volume.GetAttachmentInfo(newAttachmentName));
     }
 }
示例#10
0
        public IActionResult GetAttachments(string volume, ulong documentId)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            DocIdentity           identity    = new DocIdentity(documentId);
            List <AttachmentInfo> attachments = session.GetAttachments(volume, identity);

            return(Ok(attachments));
        }
示例#11
0
        public IActionResult DeleteAttachment(string volume, ulong documentId, string attachmentName)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            DocIdentity identity = new DocIdentity(documentId);

            session.DeleteAttachment(volume, identity, attachmentName);
            return(NoContent());
        }
示例#12
0
        public IActionResult GetAttachment(string volume, ulong documentId, string attachmentName)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            DocIdentity identity    = new DocIdentity(documentId);
            string      filePath    = session.ExtractAttachment(volume, identity, attachmentName);
            string      contentType = MimeMapping.GetMimeMapping(filePath);

            return(PhysicalFile(filePath, contentType));
        }
示例#13
0
        public async Task <IActionResult> AddAttachment(string volume, ulong documentId, [FromForm] IFormFile file, [FromForm] string attachmentName = "")
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            if (!session.IsVolumeExist(volume))
            {
                return(NotFound(Resources.ErrorVolumeNotFound));
            }

            if (file == null)
            {
                return(BadRequest(Resources.ErrorFileIsMissing));
            }

            if (file.Length <= 0)
            {
                return(BadRequest(Resources.ErrorFileIsEmpty));
            }

            string filePath = GetFilePath(session, file);

            DocIdentity docIdentity = new DocIdentity(documentId);

            try
            {
                using (FileStream stream = new FileStream(filePath, FileMode.Create))
                {
                    await file.CopyToAsync(stream);
                }

                session.NewAttachmentFromFile(volume, docIdentity, filePath, attachmentName);
            }
            finally
            {
                System.IO.File.Delete(filePath);
            }

            if (attachmentName.IsNullOrEmpty())
            {
                attachmentName = Path.GetFileNameWithoutExtension(filePath);
            }

            return(CreatedAtRoute(
                       Routes.GetAttachment,
                       new { volume, documentId, attachmentName },
                       attachmentName
                       ));
        }
示例#14
0
        public string ExtractDocument(string volumeName, DocIdentity docIdentity)
        {
            using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
            {
                volume.MoveFirst();

                string extension = volume.DocumentExtension;
                string filePath  = Path.Combine(TempDirectory, Guid.NewGuid() + "." + extension);

                volume.ExtractDocumentToFile(filePath);

                return(filePath);
            }
        }
示例#15
0
        public IActionResult GetAttachmentToken(string volume, ulong documentId, string attachmentName)
        {
            if (!TryGetSession(User, out Session _))
            {
                return(Unauthorized());
            }

            DocIdentity identity = new DocIdentity(documentId);

            string sessionId = GetSessionId(User);
            AttachmentsSelection selection = new AttachmentsSelection(identity.CompositeId, attachmentName);

            DownloadTicket ticket = SessionManager
                                    .CreateDownloadTicket(sessionId, volume, selection);

            return(Ok(new { ticket.Token }));
        }
示例#16
0
        public string ExtractAttachment(string volumeName, DocIdentity docIdentity, string attachmentName)
        {
            using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
            {
                volume.MoveFirst();

                AttachmentInfo attInfo = volume.GetAttachmentInfo(attachmentName);

                string extension = !string.IsNullOrEmpty(attInfo.Extension)
                    ? attInfo.Extension.ToLower()
                    : "tmp";

                string filePath = Path.Combine(TempDirectory, attachmentName + "." + extension);

                volume.ExtractAttachmentToFile(attachmentName, filePath);

                return(filePath);
            }
        }
示例#17
0
        public Document UpdateDocumentFields(string volumeName, DocIdentity docIdentity, List <Field> updateFields)
        {
            using (Volume volume = Dictionary.OpenVolume(volumeName, docIdentity.DocUidFilter))
            {
                foreach (Field updateField in updateFields)
                {
                    int fieldIndex = volume.GetFieldIndex(updateField.Name);
                    if (fieldIndex > 0)
                    {
                        volume[fieldIndex] = updateField.Value;
                    }
                }

                volume.UpdateFields();

                // reload volume
                volume.Reopen(docIdentity.DocUidFilter, string.Empty);

                return(GetDocument(volume, docIdentity));
            }
        }
示例#18
0
        public IActionResult UpdateAttachment(string volume, ulong documentId, string oldName, [FromBody] AttachmentUpdate attachmentUpdate)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            if (!session.IsVolumeExist(volume))
            {
                return(NotFound(Resources.ErrorVolumeNotFound));
            }

            DocIdentity docId = new DocIdentity(documentId);

            if (!session.IsDocumentExist(volume, docId))
            {
                return(NotFound(Resources.ErrorDocumentNotFound));
            }

            AttachmentInfo updatedAttachment = session.RenameAttachment(volume, docId, oldName, attachmentUpdate.NewName);

            return(Ok(updatedAttachment));
        }
示例#19
0
        public IActionResult DeleteDocument(string volume, ulong documentId)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            if (!session.IsVolumeExist(volume))
            {
                return(NotFound(Resources.ErrorVolumeNotFound));
            }

            DocIdentity docId = new DocIdentity(documentId);

            if (!session.IsDocumentExist(volume, docId))
            {
                return(NotFound(Resources.ErrorDocumentNotFound));
            }

            session.DeleteDocument(volume, docId);

            return(NoContent());
        }
示例#20
0
        public IActionResult UpdateDocument(string volume, ulong documentId, [FromBody] List <Field> updateFields)
        {
            if (!TryGetSession(User, out Session session))
            {
                return(Unauthorized());
            }

            if (!session.IsVolumeExist(volume))
            {
                return(NotFound(Resources.ErrorVolumeNotFound));
            }

            DocIdentity docId = new DocIdentity(documentId);

            if (!session.IsDocumentExist(volume, docId))
            {
                return(NotFound(Resources.ErrorDocumentNotFound));
            }

            Document updatedDocument = session
                                       .UpdateDocumentFields(volume, docId, updateFields);

            return(Ok(updatedDocument));
        }
 /// <summary>
 /// To string
 /// </summary>
 /// <returns></returns>
 public override String ToString()
 {
     return(DocIdentity.ToString());
 }