コード例 #1
0
        /// <summary>
        /// Store an image into the cache.
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="association"></param>
        /// <param name="message"></param>
        /// <param name="syntax"></param>
        /// <param name="studyInstanceUid"></param>
        /// <param name="seriesInstanceUid"></param>
        /// <param name="sopInstanceUid"></param>
        /// <param name="patientName"></param>
        public static void AddToCache(
            ListenerConfigurationInstance configuration,
            ServerAssociationParameters association,
            DicomMessage message,
            TransferSyntax syntax,
            string studyInstanceUid,
            string seriesInstanceUid,
            string sopInstanceUid,
            string patientName
            )
        {
            var path = CachePathFactory.CreatePath(configuration.Root, configuration.StorageStrategy, message);

            log.Info(string.Format("Cache destination path {0}", path));

            if (File.Exists(path) && !configuration.StorageStrategy.File.Overwrite)
            {
                log.Info("Cache destination exists and storage strategy says don't overwrite!");
                return;
            }

            Directory.CreateDirectory(Path.GetDirectoryName(path));

            var dicomFile = new DicomFile(message, path.ToString())
            {
                TransferSyntaxUid            = syntax.UidString,
                MediaStorageSopInstanceUid   = sopInstanceUid,
                ImplementationClassUid       = DicomImplementation.ClassUID.UID,
                ImplementationVersionName    = DicomImplementation.Version,
                SourceApplicationEntityTitle = association.CallingAE,
                MediaStorageSopClassUid      = message.SopClass.Uid
            };

            // Retrieve a modalityRule action and apply it.
            ModalityRuleFactory.Create(message, configuration).Process(dicomFile);

            log.Info("Saving file");
            dicomFile.Save(DicomWriteOptions.None);
        }
コード例 #2
0
        /// <summary>
        /// Factory method
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static IModalityRule Create(DicomMessage message, ListenerConfigurationInstance config)
        {
            IModalityRule result = new ModalityRules.DefaultModalityRule();

            // Apply the modality rules here.
            var modality = message.MetaInfo[DicomTags.Modality];

            log.Info(string.Format("Creating a modality rule for modality {0}", modality));

            var modalityConfig = config.ModalityRules.ModalityRules.FirstOrDefault(mr => mr.Modality == modality);

            if (modalityConfig == null)
            {
                log.Info("Could not find a matching modality rule ... looking for the 'all' rule");
                modalityConfig = config.ModalityRules.ModalityRules.FirstOrDefault(mr => mr.Modality == "all");
            }

            if (modalityConfig != null)
            {
                if (modalityConfig.Action == "compress")
                {
                    result = new ModalityRules.CompressorModalityRule()
                    {
                        Ratio = modalityConfig.Ratio,
                        OutputTransferSyntax = modalityConfig.OutputTransferSyntax
                    };
                }
                else if (modalityConfig.Action == "decompress")
                {
                    result = new ModalityRules.DecompressorModalityRule()
                    {
                        OutputTransferSyntax = modalityConfig.OutputTransferSyntax
                    };
                }
            }

            return(result);
        }