Пример #1
0
        private HttpContent CreateResponseContent
        (
            WebStoreRequest request,
            WadoStoreResponse storeResult
        )
        {
            HttpContent content;

            //this is not taking the "q" parameter
            if (new MimeMediaType(MimeMediaTypes.Json).IsIn(request.AcceptHeader))
            {
                IJsonDicomConverter converter = GetJsonConverter();

                content = new StringContent(converter.Convert(storeResult.GetResponseContent()),
                                            System.Text.Encoding.UTF8,
                                            MimeMediaTypes.Json);
            }
            else
            {
                IXmlDicomConverter xmlConverter = GetXmlConverter();

                content = new StringContent(xmlConverter.Convert(storeResult.GetResponseContent()),
                                            System.Text.Encoding.UTF8,
                                            MimeMediaTypes.xmlDicom);
            }

            return(content);
        }
Пример #2
0
        public virtual async Task <HttpResponseMessage> Store
        (
            WebStoreRequest request,
            string studyInstanceUID
        )
        {
            GetDicomHandler getDicomDelegate = CreateDatasetParser(request);

            if (null != getDicomDelegate)
            {
                var storeResult = await StoreStudy(request, studyInstanceUID, getDicomDelegate);

                var result = new HttpResponseMessage(storeResult.HttpStatus);


                if (!string.IsNullOrWhiteSpace(storeResult.StatusMessage))
                {
                    result.ReasonPhrase = storeResult.StatusMessage;
                }

                result.Content = CreateResponseContent(request, storeResult);

                return(result);
            }
            else
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
        }
Пример #3
0
        private async Task <WadoStoreResponse> StoreStudy(WebStoreRequest request, string studyInstanceUID, GetDicomHandler getDicom)
        {
            WadoStoreResponse response = new WadoStoreResponse(studyInstanceUID);

            foreach (var mediaContent in request.Contents)
            {
                Stream dicomStream = await mediaContent.ReadAsStreamAsync();

                var dicomDs = getDicom(dicomStream);

                PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessingMessage(request, dicomDs));

                try
                {
                    var result = _storageService.StoreDicom(dicomDs, CreateObjectMetadata(dicomDs, request));


                    response.AddResult(dicomDs);

                    PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessedMessage(request, dicomDs));
                }
                catch (Exception ex)
                {
                    response.AddResult(dicomDs, ex);

                    PublisherSubscriberFactory.Instance.Publish(this, new WebStoreDatasetProcessingFailureMessage(request, dicomDs, ex));
                }
            }

            return(response);
        }
Пример #4
0
        public async Task <HttpResponseMessage> Post(string StudyInstanceUID = null)
        {
            WebStoreRequest webStoreRequest = new WebStoreRequest(Request);

            if (!Request.Content.IsMimeMultipartContent("related"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            await Request.Content.ReadAsMultipartAsync(webStoreRequest);

            return(await StorageService.Store(webStoreRequest, StudyInstanceUID));
        }
Пример #5
0
        private GetDicomHandler CreateDatasetParser(WebStoreRequest request)
        {
            GetDicomHandler getDicomDelegate = null;


            switch (request.MediaType)
            {
            case MimeMediaTypes.DICOM:
            {
                getDicomDelegate = GetDicom;
            }
            break;

            case MimeMediaTypes.xmlDicom:
            {
                getDicomDelegate = new GetDicomHandler(delegate(Stream stream)
                    {
                        StreamReader reader = new StreamReader(stream);
                        string xmlString    = reader.ReadToEnd();


                        return(GetXmlConverter().Convert(xmlString));
                    });
            }
            break;

            case MimeMediaTypes.Json:
            {
                getDicomDelegate = new GetDicomHandler(delegate(Stream stream)
                    {
                        StreamReader reader = new StreamReader(stream);
                        string jsonString   = reader.ReadToEnd();


                        return(GetJsonConverter().Convert(jsonString));
                    });
            }
            break;

            default:
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            }

            return(getDicomDelegate);
        }
Пример #6
0
        public async Task Web_Storage_Simple( )
        {
            DicomDataset[] storeDs = new DicomDataset[]
            {
                DicomHelper.GetDicomDataset(0),
                DicomHelper.GetDicomDataset(1),
                DicomHelper.GetDicomDataset(2)
            };

            var             request         = new HttpRequestMessage();
            WebStoreRequest webStoreRequest = new WebStoreRequest(request);

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(MimeMediaTypes.Json));

            webStoreRequest.MediaType = MimeMediaTypes.DICOM;

            var mimeType     = "application/dicom";
            var multiContent = new MultipartContent("related", "DICOM DATA BOUNDARY");

            multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + mimeType + "\""));

            foreach (var ds in storeDs)
            {
                DicomFile    dicomFile = new DicomFile(ds);
                MemoryStream ms        = new MemoryStream();

                dicomFile.Save(ms);
                ms.Position = 0;

                StreamContent sContent = new StreamContent(ms);

                sContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(mimeType);

                multiContent.Add(sContent);
                webStoreRequest.Request.Content = multiContent;
                webStoreRequest.Contents.Add(sContent);
            }

            var storeResult = await WebStoreService.Store(webStoreRequest);

            Assert.IsNotNull(storeResult);
            Assert.IsTrue(storeResult.IsSuccessStatusCode);

            ValidateStoredMatchQuery(storeDs);

            Pacs_Delete_Simple( );
        }
Пример #7
0
        public virtual async Task <HttpResponseMessage> Store
        (
            WebStoreRequest request,
            string studyInstanceUID
        )
        {
            GetDicomHandler getDicomDelegate = CreateDatasetParser(request);

            if (null != getDicomDelegate)
            {
                var storeResult = await StoreStudy(request, studyInstanceUID, getDicomDelegate);

                var result = new HttpResponseMessage(storeResult.HttpStatus);


                //this is not taking the "q" parameter
                if (new MimeMediaType(MimeMediaTypes.Json).IsIn(request.AcceptHeader))
                {
                    IJsonDicomConverter converter = GetJsonConverter();

                    result.Content = new StringContent(converter.Convert(storeResult.GetResponseContent()),
                                                       System.Text.Encoding.UTF8,
                                                       MimeMediaTypes.Json);
                }
                else
                {
                    IXmlDicomConverter xmlConverter = GetXmlConverter();

                    result.Content = new StringContent(xmlConverter.Convert(storeResult.GetResponseContent()),
                                                       System.Text.Encoding.UTF8,
                                                       MimeMediaTypes.xmlDicom);
                }

                return(result);
            }
            else
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
        }
Пример #8
0
        public async Task <HttpResponseMessage> Post(string studyInstanceUID = null)
        {
            WebStoreRequest webStoreRequest = new WebStoreRequest(Request);
            IStudyId        studyId         = null;


            if (!string.IsNullOrWhiteSpace(studyInstanceUID))
            {
                studyId = new ObjectId( )
                {
                    StudyInstanceUID = studyInstanceUID
                };
            }

            if (!Request.Content.IsMimeMultipartContent("related"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            await Request.Content.ReadAsMultipartAsync(webStoreRequest);

            return(await StorageService.Store(webStoreRequest, studyId));
        }
 public WebStoreDatasetMessage(WebStoreRequest request, DicomDataset dataset)
 {
     Request = request;
     Dataset = dataset;
 }
Пример #10
0
 protected virtual InstanceMetadata CreateObjectMetadata(fo.DicomDataset dataset, WebStoreRequest request)
 {
     return(new InstanceMetadata( )
     {
     });
 }
 public WebStoreDatasetProcessingMessage(WebStoreRequest request, DicomDataset dataset)
     : base(request, dataset)
 {
 }
 public WebStoreDatasetProcessingFailureMessage(WebStoreRequest request, DicomDataset dataset, Exception error)
     : base(request, dataset)
 {
     Error = error;
 }