/// <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); }
/// <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); }