Exemplo n.º 1
0
        private void StartComposing
        (
            CompositeInstanceDataSet dicomInstances,
            IDicomMediaProfileProcessor profileProcessor,
            DirectoryInfo mediaDirectory

        )
        {
            __MediaDirectory = mediaDirectory;

            profileProcessor.CopyDirectory += new EventHandler <CopyEventArgs> (profileProcessor_CopyDirectory);
            profileProcessor.CopyFile      += new EventHandler <CopyEventArgs> (profileProcessor_CopyFile);

            try
            {
                long size;


                size = CreateDicomDirectory(dicomInstances, __MediaDirectory, profileProcessor);

                if (size > profileProcessor.GetProfileMediaSize( ) ||
                    profileProcessor.CalculateRemainingDataSize(size) < 0)
                {
                    MediaObject.ExecutionStatus.ExecutionStatus     = ExecutionStatus.Failure;
                    MediaObject.ExecutionStatus.ExecutionStatusInfo = ExecutionStatusInfo.SET_OVERSIZED;

                    throw new InvalidOperationException("Not enough media size to complete the request.");
                }

                if (null == MediaObject.IncludeDisplayApplication ||
                    MediaObject.IncludeDisplayApplication.Value == YesNo.Undefined ||
                    MediaObject.IncludeDisplayApplication.Value == YesNo.Yes)
                {
                    profileProcessor.IncludeDisplayApplication( );
                }

                if (null == MediaObject.AllowNonDicomObjects ||
                    MediaObject.AllowNonDicomObjects.Value == IncludeNonDicomObjects.Undefined)
                {
                    profileProcessor.IncludeNonDicomObjects(IncludeNonDicomObjects.Undefined);
                }
                else if (MediaObject.AllowNonDicomObjects.Value != IncludeNonDicomObjects.No)
                {
                    profileProcessor.IncludeNonDicomObjects(MediaObject.AllowNonDicomObjects.Value);
                }
            }
            finally
            {
                profileProcessor.CopyDirectory -= new EventHandler <CopyEventArgs> (profileProcessor_CopyDirectory);
                profileProcessor.CopyFile      -= new EventHandler <CopyEventArgs> (profileProcessor_CopyFile);

                __MediaDirectory = null;
            }
        }
Exemplo n.º 2
0
        private long CreateDicomDirectory
        (
            CompositeInstanceDataSet dicomInstances,
            DirectoryInfo mediaDirectory,
            IDicomMediaProfileProcessor profileProcessor
        )
        {
            using (DicomDir dicomDir = new DicomDir(mediaDirectory.FullName))
            {
                List <string> createdFiles;


                createdFiles = ProcessDicomDir(mediaDirectory,
                                               dicomInstances,
                                               dicomDir,
                                               profileProcessor);

                dicomDir.SetFileSetId(mediaDirectory.Name);

                if (!string.IsNullOrEmpty(DescriptorFile))
                {
                    string descriptorFile;


                    descriptorFile = CopyDescriptorFile(mediaDirectory.FullName);

                    dicomDir.SetDescriptorFile(descriptorFile, DescriptorFileCharacterSet);

                    createdFiles.Add(descriptorFile);
                }

                profileProcessor.OnDicomDirCompleted(dicomDir.DataSet);

                dicomDir.Save( );

                createdFiles.Add(Path.Combine(mediaDirectory.FullName, "DICOMDIR"));

                return(GetFilesSize(createdFiles));
            }
        }
Exemplo n.º 3
0
        private List <string> ProcessDicomDir
        (
            DirectoryInfo mediaDirectory,
            CompositeInstanceDataSet dicomInstances,
            DicomDir dicomDir,
            IDicomMediaProfileProcessor profileProcessor
        )
        {
            string        rootKey;
            List <string> createdFiles;
            int           patientIndex;
            bool          allowLossyCompression;

            rootKey      = "DICOM";
            createdFiles = new List <string> (dicomInstances.Instance.Count);
            patientIndex = 0;

            allowLossyCompression = (MediaObject.AllowLossyCompression == null ||
                                     MediaObject.AllowLossyCompression.Value != YesNo.No);

            foreach (CompositeInstanceDataSet.PatientRow patient in dicomInstances.Patient)
            {
                string patientKey;
                int    studyIndex;


                patientIndex++;

                patientKey = "PATIENT" + patientIndex.ToString( );
                studyIndex = 0;

                foreach (CompositeInstanceDataSet.StudyRow study in patient.GetStudyRows( ))
                {
                    string studyKey;
                    int    seriesIndex;

                    studyIndex++;

                    studyKey    = "STUDY" + studyIndex.ToString( );
                    seriesIndex = 0;

                    foreach (CompositeInstanceDataSet.SeriesRow series in study.GetSeriesRows( ))
                    {
                        string seriesKey;
                        int    instanceIndex;

                        seriesIndex++;

                        seriesKey     = "SERIES" + seriesIndex.ToString( );
                        instanceIndex = 0;

                        foreach (CompositeInstanceDataSet.InstanceRow instance in series.GetInstanceRows( ))
                        {
                            string instanceKey;
                            string instancePath;

                            instanceIndex++;

                            instanceKey = instanceIndex.ToString( );

                            instancePath = GetInstancePath(mediaDirectory, rootKey, patientKey, studyKey, seriesKey, instanceKey);

                            if (!Directory.Exists(Path.GetDirectoryName(instancePath)))
                            {
                                Directory.CreateDirectory(Path.GetDirectoryName(instancePath));
                            }

                            File.Copy(instance.ReferencedFile, instancePath, true);

                            profileProcessor.BeforeAddingToDicomDir(instancePath, instance, allowLossyCompression);

                            dicomDir.InsertFile(instancePath);

                            profileProcessor.AfterAddingToDicomDir(instancePath, instance, dicomDir.DataSet);

                            createdFiles.Add(instancePath);
                        }
                    }
                }
            }

            return(createdFiles);
        }