public void Delete(string documentId, string name)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.DELETE, null)) ||
                DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentDELETE, name)))
            {
                return; // no-op
            }
            if (DocumentsById.TryGetValue(documentId, out DocumentInfo documentInfo) &&
                DeletedEntities.Contains(documentInfo.Entity))
            {
                return; // no-op
            }
            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentPUT, name)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "delete", "create");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentMOVE, name)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "delete", "rename");
            }

            Defer(new DeleteAttachmentCommandData(documentId, name, null));
        }
        public void Store(string documentId, string name, Stream stream, string contentType = null)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.DELETE, null)))
            {
                throw new InvalidOperationException($"Can't store attachment {name} of document {documentId}, there is a deferred command registered for this document to be deleted.");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentPUT, name)))
            {
                throw new InvalidOperationException($"Can't store attachment {name} of document {documentId}, there is a deferred command registered to create an attachment with the same name.");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentDELETE, name)))
            {
                throw new InvalidOperationException($"Can't store attachment {name} of document {documentId}, there is a deferred command registered to delete an attachment with the same name.");
            }

            if (DocumentsById.TryGetValue(documentId, out DocumentInfo documentInfo) &&
                DeletedEntities.Contains(documentInfo.Entity))
            {
                throw new InvalidOperationException($"Can't store attachment {name} of document {documentId}, the document was already deleted in this session.");
            }

            Defer(new PutAttachmentCommandData(documentId, name, stream, contentType, null));
        }
        public void Delete(string documentId, string name)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.DELETE, null)) ||
                DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentDELETE, name)))
            {
                return; // no-op
            }
            if (DocumentsById.TryGetValue(documentId, out DocumentInfo documentInfo) &&
                DeletedEntities.Contains(documentInfo.Entity))
            {
                return; // no-op
            }
            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentPUT, name)))
            {
                throw new InvalidOperationException($"Can't delete attachment {name} of document {documentId}, there is a deferred command registered to create an attachment with the same name.");
            }

            Defer(new DeleteAttachmentCommandData(documentId, name, null));
        }
Esempio n. 4
0
        public virtual Entity UseRetrieve(string entityName, Guid id, ColumnSet columnSet)
        {
            if (DeletedEntities.Contains(id))
            {
                throw new Exception("The record was previously removed");
            }

            var entity = Entities.FirstOrDefault(e => e.Id == id);

            if (entity == null)
            {
                throw new Exception($"Record \"{entityName}\" with ID = {id} is not found");
            }
            return(entity);
        }
        public void Store(string documentId, string name, Stream stream, string contentType = null)
        {
            if (string.IsNullOrWhiteSpace(documentId))
            {
                throw new ArgumentNullException(nameof(documentId));
            }
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.DELETE, null)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "store", "delete");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentPUT, name)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "store", "create");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentDELETE, name)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "store", "delete");
            }

            if (DeferredCommandsDictionary.ContainsKey((documentId, CommandType.AttachmentMOVE, name)))
            {
                ThrowOtherDeferredCommandException(documentId, name, "store", "rename");
            }

            if (DocumentsById.TryGetValue(documentId, out DocumentInfo documentInfo) &&
                DeletedEntities.Contains(documentInfo.Entity))
            {
                ThrowDocumentAlreadyDeleted(documentId, name, "store", null, documentId);
            }

            Defer(new PutAttachmentCommandData(documentId, name, stream, contentType, null));
        }
        public void Copy(string sourceDocumentId, string sourceName, string destinationDocumentId, string destinationName)
        {
            if (string.IsNullOrWhiteSpace(sourceDocumentId))
            {
                throw new ArgumentNullException(nameof(sourceDocumentId));
            }
            if (string.IsNullOrWhiteSpace(sourceName))
            {
                throw new ArgumentNullException(nameof(sourceName));
            }
            if (string.IsNullOrWhiteSpace(destinationDocumentId))
            {
                throw new ArgumentNullException(nameof(destinationDocumentId));
            }
            if (string.IsNullOrWhiteSpace(destinationName))
            {
                throw new ArgumentNullException(nameof(destinationName));
            }

            if (string.Equals(sourceDocumentId, destinationDocumentId, StringComparison.OrdinalIgnoreCase) &&
                string.Equals(sourceName, destinationName))
            {
                return; // no-op
            }
            if (DocumentsById.TryGetValue(sourceDocumentId, out DocumentInfo sourceDocument) && DeletedEntities.Contains(sourceDocument.Entity))
            {
                ThrowDocumentAlreadyDeleted(sourceDocumentId, sourceName, "copy", destinationDocumentId, sourceDocumentId);
            }

            if (DocumentsById.TryGetValue(destinationDocumentId, out DocumentInfo destinationDocument) && DeletedEntities.Contains(destinationDocument.Entity))
            {
                ThrowDocumentAlreadyDeleted(sourceDocumentId, sourceName, "copy", destinationDocumentId, destinationDocumentId);
            }

            if (DeferredCommandsDictionary.ContainsKey((sourceDocumentId, CommandType.AttachmentDELETE, sourceName)))
            {
                ThrowOtherDeferredCommandException(sourceDocumentId, sourceName, "copy", "delete");
            }

            if (DeferredCommandsDictionary.ContainsKey((sourceDocumentId, CommandType.AttachmentMOVE, sourceName)))
            {
                ThrowOtherDeferredCommandException(sourceDocumentId, sourceName, "copy", "rename");
            }

            if (DeferredCommandsDictionary.ContainsKey((destinationDocumentId, CommandType.AttachmentDELETE, destinationName)))
            {
                ThrowOtherDeferredCommandException(destinationDocumentId, destinationName, "copy", "delete");
            }

            if (DeferredCommandsDictionary.ContainsKey((destinationDocumentId, CommandType.AttachmentMOVE, destinationName)))
            {
                ThrowOtherDeferredCommandException(destinationDocumentId, destinationName, "copy", "rename");
            }

            Defer(new CopyAttachmentCommandData(sourceDocumentId, sourceName, destinationDocumentId, destinationName, null));
        }