Example #1
0
        private static HttpResponseMessage CreateMultipartResponse(IQidoRequestModel request, IEnumerable <DicomDataset> results)
        {
            HttpResponseMessage response;


            if (MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( )) == MimeMediaTypes.xmlDicom)
            {
                MultipartContent multiContent;


                response     = new HttpResponseMessage( );
                multiContent = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary);

                response.Content = multiContent;

                foreach (var result in results)
                {
                    XmlDicomConverter converter = new XmlDicomConverter( );

                    MultipartResponseHelper.AddMultipartContent(multiContent,
                                                                new WadoResponse(new MemoryStream(Encoding.ASCII.GetBytes(converter.Convert(result))),
                                                                                 MimeMediaTypes.xmlDicom));
                }

                multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type",
                                                                                                                 "\"" + MimeMediaTypes.xmlDicom + "\""));
            }
            else
            {
                response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);
            }

            return(response);
        }
Example #2
0
        /// <Examples>
        /// Accept: multipart/related; type="image/jpx"; transfer-syntax=1.2.840.10008.1.2.4.92,
        /// Accept: multipart/related; type="image/jpx"; transfer-syntax=1.2.840.10008.1.2.4.93
        /// Accept: multipart/related; type="image/jpeg"
        /// </Examples>
        protected virtual IEnumerable <IWadoRsResponse> ProcessMultipartRequest
        (
            IObjectId objectID,
            MediaTypeWithQualityHeaderValue mediaTypeHeader

        )
        {
            string subMediaType;
            IEnumerable <string> transferSyntaxes;
            string defaultTransfer = null;
            bool   instancesFound  = false;

            subMediaType = MultipartResponseHelper.GetSubMediaType(mediaTypeHeader);

            DefaultMediaTransferSyntax.Instance.TryGetValue(subMediaType, out defaultTransfer);

            transferSyntaxes = MultipartResponseHelper.GetRequestedTransferSyntax(mediaTypeHeader, defaultTransfer);

            foreach (var result in FindLocations(objectID, subMediaType, transferSyntaxes, defaultTransfer))
            {
                instancesFound = true;

                yield return(new WadoResponse(result.Location.GetReadStream( ), subMediaType)
                {
                    TransferSyntax = result.TransferSyntax
                });
            }

            if (!instancesFound)
            {
                string defaultDicomTransfer;


                DefaultMediaTransferSyntax.Instance.TryGetValue(MimeMediaTypes.DICOM, out defaultDicomTransfer);


                foreach (var result in RetrieveService.GetTransformedSopInstances(objectID, MimeMediaTypes.DICOM, defaultDicomTransfer, subMediaType, transferSyntaxes.FirstOrDefault( )))
                {
                    yield return(new WadoResponse(result.Location.GetReadStream( ), subMediaType)
                    {
                        TransferSyntax = result.TransferSyntax
                    });
                }
            }
        }
Example #3
0
        public virtual HttpResponseMessage RetrieveInstanceMetadata(IWadoRsInstanceRequest request)
        {
            if (IsMultiPartRequest(request))
            {
                var subMediaHeader = MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( ));

                if (null == subMediaHeader || subMediaHeader != MimeMediaTypes.xmlDicom)
                {
                    return(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest));
                }

                return(RetrieveMultipartInstance(request, request));    //should be an XML request!
            }
            else //must be json, or just return json anyway (*/*)
            {
                return(ProcessJsonRequest(request, request));
            }
        }
Example #4
0
        private HttpResponseMessage SearchForDicomEntity
        (
            IQidoRequestModel request,
            DicomDataset dicomSource,
            DoQueryDelegate doQuery
        )
        {
            if (null != request.Query)
            {
                HttpResponseMessage response = null;
                var matchingParams           = request.Query.MatchingElements;
                var includeParams            = request.Query.IncludeElements;

                foreach (var returnParam in includeParams)
                {
                    InsertDicomElement(dicomSource, returnParam, "");
                }

                foreach (var queryParam in matchingParams)
                {
                    string paramValue = queryParam.Value;


                    InsertDicomElement(dicomSource, queryParam.Key, paramValue);
                }

                var results = doQuery(QueryService, dicomSource, request); //TODO: move configuration params into their own object

                if (MultipartResponseHelper.IsMultiPartRequest(request))
                {
                    response = CreateMultipartResponse(request, results.Result);
                }
                else
                {
                    response = CreateJsonResponse(results.Result);
                }

                AddResponseHeaders(request, dicomSource, response, results);

                return(response);
            }

            return(null);
        }
Example #5
0
        public virtual HttpResponseMessage RetrieveMultipartInstance(IWadoRequestHeader header, IObjectId request)
        {
            HttpResponseMessage             response;
            MultipartContent                multiContent;
            MediaTypeWithQualityHeaderValue selectedMediaTypeHeader;


            if (!IsMultiPartRequest(header))
            {
                return(new HttpResponseMessage(System.Net.HttpStatusCode.NotAcceptable));     //TODO: check error code in standard
            }

            response                = new HttpResponseMessage( );
            multiContent            = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary);
            selectedMediaTypeHeader = null;

            response.Content = multiContent;

            foreach (var mediaTypeHeader in header.AcceptHeader)
            {
                if (request is IWadoRsFramesRequest)
                {
                    var frames = ((IWadoRsFramesRequest)request).Frames;
                    foreach (int frame in frames)
                    {
                        request.Frame = frame;

                        foreach (var wadoResponse in ProcessMultipartRequest(request, mediaTypeHeader))
                        {
                            MultipartResponseHelper.AddMultipartContent(multiContent, wadoResponse);

                            selectedMediaTypeHeader = mediaTypeHeader;
                        }
                    }
                }
                else
                {
                    foreach (var wadoResponse in ProcessMultipartRequest(request, mediaTypeHeader))
                    {
                        MultipartResponseHelper.AddMultipartContent(multiContent, wadoResponse);

                        selectedMediaTypeHeader = mediaTypeHeader;
                    }
                }

                if (selectedMediaTypeHeader != null)
                {
                    break;
                }
            }



            if (selectedMediaTypeHeader != null)
            {
                multiContent.Headers.ContentType.Parameters.Add(new System.Net.Http.Headers.NameValueHeaderValue("type", "\"" + MultipartResponseHelper.GetSubMediaType(selectedMediaTypeHeader) + "\""));
            }
            else
            {
                response.StatusCode = System.Net.HttpStatusCode.NotFound; //check error code
            }


            return(response);
        }
Example #6
0
 protected virtual bool IsMultiPartRequest(IWadoRequestHeader header)
 {
     return(MultipartResponseHelper.IsMultiPartRequest(header));
 }
Example #7
0
        private HttpResponseMessage SearchForDicomEntity
        (
            IQidoRequestModel request,
            fo.DicomDataset dicomSource,
            DoQueryDelegate doQuery
        )
        {
            if (null != request.Query)
            {
                var matchingParams = request.Query.MatchingElements;
                var includeParams  = request.Query.IncludeElements;

                foreach (var returnParam in includeParams)
                {
                    InsertDicomElement(dicomSource, returnParam, "");
                }

                foreach (var queryParam in  matchingParams)
                {
                    string paramValue = queryParam.Value;


                    InsertDicomElement(dicomSource, queryParam.Key, paramValue);
                }

                ICollection <fo.DicomDataset> results = doQuery(QueryService, dicomSource, request);  //TODO: move configuration params into their own object

                if (MultipartResponseHelper.IsMultiPartRequest(request))
                {
                    if (MultipartResponseHelper.GetSubMediaType(request.AcceptHeader.FirstOrDefault( )) == MimeMediaTypes.xmlDicom)
                    {
                        HttpResponseMessage response;
                        MultipartContent    multiContent;


                        response     = new HttpResponseMessage( );
                        multiContent = new MultipartContent("related", MultipartResponseHelper.DicomDataBoundary);

                        response.Content = multiContent;

                        foreach (var result in results)
                        {
                            XmlDicomConverter converter = new XmlDicomConverter( );

                            MultipartResponseHelper.AddMultipartContent(multiContent,
                                                                        new WadoResponse(new MemoryStream(Encoding.ASCII.GetBytes(converter.Convert(result))),
                                                                                         MimeMediaTypes.xmlDicom));
                        }

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

                        return(response);
                    }
                    else
                    {
                        return(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest));
                    }
                }
                else
                {
                    StringBuilder jsonReturn = new StringBuilder("[");

                    JsonDicomConverter converter = new JsonDicomConverter( )
                    {
                        IncludeEmptyElements = true
                    };

                    foreach (var response in results)
                    {
                        jsonReturn.AppendLine(converter.Convert(response));

                        jsonReturn.Append(",");
                    }

                    if (results.Count > 0)
                    {
                        jsonReturn.Remove(jsonReturn.Length - 1, 1);
                    }

                    jsonReturn.Append("]");

                    return(new HttpResponseMessage(System.Net.HttpStatusCode.OK)
                    {
                        Content = new StringContent(jsonReturn.ToString( ),
                                                    Encoding.UTF8,
                                                    MimeMediaTypes.Json)
                    });
                }
            }

            return(null);
        }