Esempio n. 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);
        }
Esempio n. 2
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);
        }
Esempio n. 3
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);
        }