示例#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);
        }
        public async Task <HttpResponseMessage> ProcessRequest
        (
            IWebStoreRequest request,
            string studyInstanceUID
        )
        {
            DicomAttributeCollection bodyContent = null;


            switch (request.MediaType)
            {
            //TODO: build the response here, { Successes.Add(objectMetadata), Failures.Add(objectMetadata), Create
            case MimeMediaTypes.DICOM:
            {
                bodyContent = await GetResponseDataset(request, studyInstanceUID);
            }
            break;

            case MimeMediaTypes.xmlDicom:
            {
            }
            break;

            case MimeMediaTypes.Json:
            {
            }
            break;

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

            if (null != bodyContent)
            {
                var result = new HttpResponseMessage(HttpStatusCode.OK);


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


                    result.Content = new StringContent(converter.Convert(bodyContent), System.Text.Encoding.UTF8, MimeMediaTypes.Json);
                }
                else
                {
                    XmlDicomConverter xmlConverter = new XmlDicomConverter( );

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

                return(result);
            }
            else
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
        }
示例#3
0
        public void ConvertFromXml(string sourceXmlFile, string destinationDicomFile)
        {
            XmlDicomConverter xmlConverter = new XmlDicomConverter( );

            string xmlDataset = System.IO.File.ReadAllText(sourceXmlFile);

            DicomDataset dataset = xmlConverter.Convert(xmlDataset);

            DicomFile dsF = new DicomFile(dataset);

            dsF.Save(destinationDicomFile);
        }
示例#4
0
        public void ConvertToXml(string sourceDicomFile, string destinationXmlFile)
        {
            XmlDicomConverter xmlConverter = new XmlDicomConverter( )
            {
                WriteInlineBinary = true
            };

            DicomDataset sourceDS = DicomFile.Open(sourceDicomFile).Dataset;

            string sourceXmlDicom = xmlConverter.Convert(sourceDS);

            System.IO.File.WriteAllText(destinationXmlFile, sourceXmlDicom);
        }
示例#5
0
        public void ConvertToXml( )
        {
            var testDir      = Path.Combine(TestDirPath, "convertToXml");
            var xmlConverter = new XmlDicomConverter( )
            {
                WriteInlineBinary = true
            };


            Directory.CreateDirectory(testDir);
            //fo.DicomDataset sourceDS = Helper.GetDicomDataset ( 10 ).Clone ( fo.DicomTransferSyntax.ExplicitVRLittleEndian ) ;
            foreach (string file in Directory.GetFiles(DicomHelpers.GetSampleImagesFolder( )))
            {
                string          fullPath = Path.Combine(testDir, Path.GetFileName(file));
                fo.DicomDataset sourceDS = fo.DicomFile.Open(file).Dataset;


                var sourceXmlDicom = xmlConverter.Convert(sourceDS);

                System.IO.File.WriteAllText(fullPath + ".xml", sourceXmlDicom);

                fo.DicomDataset targetDs = xmlConverter.Convert(sourceXmlDicom);

                var dsF = new fo.DicomFile(targetDs);

                dsF.FileMetaInfo.TransferSyntax = fo.DicomTransferSyntax.Parse(targetDs.Get(fo.DicomTag.TransferSyntaxUID, targetDs.InternalTransferSyntax.ToString( )));

                dsF.Save(fullPath + ".gen.dcm");

                var destXmlDicom = xmlConverter.Convert(targetDs);

                System.IO.File.WriteAllText(fullPath + ".gen.xml", destXmlDicom);

                //private tags with private creator will cause this to fail
                //VR for OW change to OB
                Assert.AreEqual(sourceXmlDicom, destXmlDicom);
            }
        }
        public ResponseContent Convert(ConverterData data)
        {
            List <ConvertedFileInfo> convertedDcm    = new List <ConvertedFileInfo>();
            ResponseContent          responseContent = new ResponseContent( );

            if (data.Files.Count == 0)
            {
                responseContent.Status = System.Net.HttpStatusCode.NoContent;

                return(responseContent);
            }

            switch (data.Format)
            {
            case KnownFormats.JSON:
            {
                foreach (var file in data.Files)
                {
                    var converter = new JsonDicomConverter();
                    var dcmFile   = Dicom.DicomFile.Open(new MemoryStream(file.Data));

                    converter.WriteInlineBinary = true;

                    convertedDcm.Add(new ConvertedFileInfo( )
                        {
                            FileName = Path.ChangeExtension(file.FileName, KnownFormats.JSON),
                            Data     = Encoding.UTF8.GetBytes(converter.Convert(dcmFile.Dataset))
                        });
                }
            }
            break;

            case KnownFormats.XML:
            {
                foreach (var file in data.Files)
                {
                    var converter = new XmlDicomConverter();
                    var dcmFile   = Dicom.DicomFile.Open(new MemoryStream(file.Data));

                    converter.WriteInlineBinary = true;

                    convertedDcm.Add(new ConvertedFileInfo( )
                        {
                            FileName = Path.ChangeExtension(file.FileName, KnownFormats.XML),
                            Data     = Encoding.UTF8.GetBytes(converter.Convert(dcmFile.Dataset))
                        });
                }
            }
            break;

            case KnownFormats.JPG:
            {
                foreach (var file in data.Files)
                {
                    FileStorageService  storageService = new FileStorageService(Path.GetTempPath());
                    DicomMediaIdFactory mediaIdFactory = new DicomMediaIdFactory();
                    JpegMediaWriter     writers        = new JpegMediaWriter(storageService, mediaIdFactory);
                    var dcmFile   = Dicom.DicomFile.Open(new MemoryStream(file.Data));
                    var locations = writers.CreateMedia(new DicomMediaWriterParameters()
                        {
                            Dataset   = dcmFile.Dataset,
                            MediaInfo = new DicomMediaProperties()
                            {
                                MediaType = writers.MediaType
                            }
                        });
                    int count = 1;
                    foreach (var location in locations)
                    {
                        var fileName = locations.Count > 1 ? Path.ChangeExtension((Path.GetFileNameWithoutExtension(file.FileName) + count++), KnownFormats.JPG):
                                       Path.ChangeExtension(file.FileName, KnownFormats.JPG);
                        using (var stream = location.Download())
                        {
                            convertedDcm.Add(new ConvertedFileInfo( )
                                {
                                    Data = stream.ReadAllBytes(), FileName = fileName
                                });
                        }

                        location.Delete();
                    }
                }
            }
            break;

            default:
            {
                responseContent.Status = System.Net.HttpStatusCode.UnsupportedMediaType;
            }
            break;
            }

            responseContent.FileName = Path.ChangeExtension(convertedDcm.First().FileName, "zip");
            responseContent.Content  = new ByteArrayContent(ZippingService.CreateZipData(convertedDcm));
            responseContent.Status   = System.Net.HttpStatusCode.OK;
            return(responseContent);
        }
示例#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);
        }