static Document ReadDocument(DatabaseApi couchApi, TextReader reader)
 {
     using (reader)
         return new Document(reader)
                {
                    DatabaseApiReference = new DatabaseApiReference(couchApi)
                };
 }
			private SaveDocumentTask(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates)
			{
				this.parent = parent;
				this.document = document;
				if (overwriteConcurrentUpdates)
				{
					conflictAction = ReturnDefault;
					completionSource = new TaskCompletionSource<DocumentInfo>();
				}
				else conflictAction = ThrowConflict;
			}
		static async Task<Document> ReadMultipart(DatabaseApi couchApi, HttpContent content)
		{
			var multipart = (await content.ReadAsMultipartAsync()).ToArray();
			var jsonPart = multipart.FirstOrDefault(
				part => part.Headers.ContentType != null && part.Headers.ContentType.MediaType == MediaType.Json);
			if (jsonPart == null)
				return null;

			var document = ReadDocument(
				couchApi, await jsonPart.ReadAsUtf8TextReaderAsync());
			PrefillAttachmentDataGetters(multipart, document);
			return document;
		}
Beispiel #4
0
 private SaveDocumentTask(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates)
 {
     this.parent   = parent;
     this.document = document;
     if (overwriteConcurrentUpdates)
     {
         conflictAction   = ReturnDefault;
         completionSource = new TaskCompletionSource <DocumentInfo>();
     }
     else
     {
         conflictAction = ThrowConflict;
     }
 }
        static async Task <Document> ReadMultipart(DatabaseApi couchApi, HttpContent content)
        {
            var multipart = (await content.ReadAsMultipartAsync()).ToArray();
            var jsonPart  = multipart.FirstOrDefault(
                part => part.Headers.ContentType != null && part.Headers.ContentType.MediaType == MediaType.Json);

            if (jsonPart == null)
            {
                return(null);
            }

            var document = ReadDocument(
                couchApi, await jsonPart.ReadAsUtf8TextReaderAsync());

            PrefillAttachmentDataGetters(multipart, document);
            return(document);
        }
        public static async Task <Document> Start(
            DbUriConstructor uriConstructor,
            DatabaseApi databaseApi,
            CouchApi couchApi,
            string documentId,
            string revision,
            AdditionalDocumentProperty additionalProperties)
        {
            var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties);
            var request     = new HttpRequestMessage(HttpMethod.Get, documentUri);

            var response = await couchApi.RequestCouchDb(request);

            if (!response.IsSuccessStatusCode)
            {
                var error = new CouchError(couchApi.Settings.Serializer, response);
                error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor);
                if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    return(null);
                }
                error.ThrowCouchCommunicationException();
            }

            var content   = response.Content;
            var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>";

            switch (mediaType)
            {
            case MediaType.Json:
                return(ReadDocument(
                           databaseApi,
                           await content.ReadAsUtf8TextReaderAsync()
                           ));

            case MediaType.Multipart:
                return(await ReadMultipart(databaseApi, content));

            default:
                throw new CouchCommunicationException(
                          "Unexpected media type response recived requesting CouchDB document: {0}", mediaType);
            }
        }
		public static async Task<Document> Start(
			DbUriConstructor uriConstructor,
			DatabaseApi databaseApi,
			CouchApi couchApi,
			string documentId, 
			string revision, 
			AdditionalDocumentProperty additionalProperties)
		{
			var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties);
			var request = new HttpRequestMessage(HttpMethod.Get, documentUri);

			var response = await couchApi.RequestCouchDb(request);
			if (!response.IsSuccessStatusCode)
			{
				var error = new CouchError(couchApi.Settings.Serializer, response);
				error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor);
				if (response.StatusCode == HttpStatusCode.NotFound)
					return null;
				error.ThrowCouchCommunicationException();
			}

			var content = response.Content;
			var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>";
			switch (mediaType)
			{
				case MediaType.Json:
					return ReadDocument(
						databaseApi, 
						await content.ReadAsUtf8TextReaderAsync()
					);
				case MediaType.Multipart:
					return await ReadMultipart(databaseApi, content);
				default:
					throw new CouchCommunicationException(
						"Unexpected media type response recived requesting CouchDB document: {0}", mediaType);
			}
		}
		static Document ReadDocument(DatabaseApi couchApi, TextReader reader)
		{
			using (reader)
				return new Document(reader) { DatabaseApiReference = new DatabaseApiReference(couchApi) };
		}
Beispiel #9
0
            public static Task <DocumentInfo> Start(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates)
            {
                var saver = new SaveDocumentTask(parent, document, overwriteConcurrentUpdates);

                return(overwriteConcurrentUpdates ? saver.SaveOverriding() : saver.Save());
            }
			public static Task<DocumentInfo> Start(DatabaseApi parent, Document document, bool overwriteConcurrentUpdates)
			{
				var saver = new SaveDocumentTask(parent, document, overwriteConcurrentUpdates);
				return overwriteConcurrentUpdates ? saver.SaveOverriding() : saver.Save();
			}