Exemple #1
0
        private static IList <StudyHistory> FindReconcileHistories(StudyStorageLocation storageLocation, DicomMessageBase file)
        {
            var fileDesc = new ImageSetDescriptor(file.DataSet);

            var studyHistoryList = new List <StudyHistory>(
                StudyHistoryHelper.FindStudyHistories(storageLocation.StudyStorage,
                                                      new[] { StudyHistoryTypeEnum.StudyReconciled }));

            IList <StudyHistory> reconcileHistories = studyHistoryList.FindAll(
                delegate(StudyHistory item)
            {
                var desc = XmlUtils.Deserialize <ImageSetDescriptor>(item.StudyData.DocumentElement);
                return(desc.Equals(fileDesc));
            });

            if (reconcileHistories.Count == 0)
            {
                // no history found in cache... reload the list and search again one more time
                studyHistoryList = new List <StudyHistory>(
                    StudyHistoryHelper.FindStudyHistories(storageLocation.StudyStorage,
                                                          new[] { StudyHistoryTypeEnum.StudyReconciled }));

                reconcileHistories = studyHistoryList.FindAll(
                    delegate(StudyHistory item)
                {
                    var desc = XmlUtils.Deserialize <ImageSetDescriptor>(item.StudyData.DocumentElement);
                    return(desc.Equals(fileDesc));
                });
            }

            return(reconcileHistories);
        }
 private void SaveStudyHistory(string compressSyntax)
 {
     using (
         IUpdateContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
     {
         var history = StudyHistoryHelper.CreateStudyHistoryRecord(ctx, StorageLocation, StorageLocation,
                                                                   StudyHistoryTypeEnum.StudyCompress, null,
                                                                   new CompressionStudyHistory
         {
             TimeStamp = Platform.Time,
             FinalTransferSyntaxUid    = compressSyntax,
             OriginalTransferSyntaxUid =
                 StorageLocation.TransferSyntaxUid
         });
         if (history != null)
         {
             ctx.Commit();
         }
     }
 }
Exemple #3
0
        private void LogHistory()
        {
            Platform.Log(LogLevel.Debug, "Logging history record...");
            using (IUpdateContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                // create the change log based on info stored in the queue entry
                var changeLog = new ReprocessStudyChangeLog
                {
                    TimeStamp        = Platform.Time,
                    StudyInstanceUid = StorageLocation.StudyInstanceUid,
                    Reason           = _queueData.ChangeLog != null ? _queueData.ChangeLog.Reason : "N/A",
                    User             = _queueData.ChangeLog != null ? _queueData.ChangeLog.User : "******"
                };

                StudyHistory history = StudyHistoryHelper.CreateStudyHistoryRecord(ctx, StorageLocation, null, StudyHistoryTypeEnum.Reprocessed, null, changeLog);
                if (history != null)
                {
                    ctx.Commit();
                }
            }
        }
        protected override void OnExecute(CommandProcessor theProcessor, IUpdateContext updateContext)
        {
            // Check if the File is the same syntax as the
            TransferSyntax fileSyntax = _file.TransferSyntax;
            TransferSyntax dbSyntax   = TransferSyntax.GetTransferSyntax(_location.TransferSyntaxUid);

            // Check if the syntaxes match the location
            if ((!fileSyntax.Encapsulated && !dbSyntax.Encapsulated) ||
                (fileSyntax.LosslessCompressed && dbSyntax.LosslessCompressed) ||
                (fileSyntax.LossyCompressed && dbSyntax.LossyCompressed))
            {
                // no changes necessary, just return;
                return;
            }

            // Select the Server Transfer Syntax
            var syntaxCriteria = new ServerTransferSyntaxSelectCriteria();
            var syntaxBroker   = updateContext.GetBroker <IServerTransferSyntaxEntityBroker>();

            syntaxCriteria.Uid.EqualTo(fileSyntax.UidString);

            ServerTransferSyntax serverSyntax = syntaxBroker.FindOne(syntaxCriteria);

            if (serverSyntax == null)
            {
                Platform.Log(LogLevel.Error, "Unable to load ServerTransferSyntax for {0}.  Unable to update study status.", fileSyntax.Name);
                return;
            }

            // Get the FilesystemStudyStorage update broker ready
            var filesystemStudyStorageEntityBroker = updateContext.GetBroker <IFilesystemStudyStorageEntityBroker>();
            var filesystemStorageUpdate            = new FilesystemStudyStorageUpdateColumns();
            var filesystemStorageCritiera          = new FilesystemStudyStorageSelectCriteria();

            filesystemStorageUpdate.ServerTransferSyntaxKey = serverSyntax.Key;
            filesystemStorageCritiera.StudyStorageKey.EqualTo(_location.Key);

            // Save a StudyHistory record for the compression that occurred.
            StudyHistoryHelper.CreateStudyHistoryRecord(updateContext, _location, _location, StudyHistoryTypeEnum.SopCompress,
                                                        null, new CompressionStudyHistory
            {
                TimeStamp = Platform.Time,
                OriginalTransferSyntaxUid = dbSyntax.UidString,
                FinalTransferSyntaxUid    = fileSyntax.UidString
            });

            // Get the StudyStorage update broker ready
            var studyStorageBroker =
                updateContext.GetBroker <IStudyStorageEntityBroker>();
            var             studyStorageUpdate = new StudyStorageUpdateColumns();
            StudyStatusEnum statusEnum         = _location.StudyStatusEnum;

            if (fileSyntax.LossyCompressed)
            {
                studyStorageUpdate.StudyStatusEnum = statusEnum = StudyStatusEnum.OnlineLossy;
            }
            else if (fileSyntax.LosslessCompressed)
            {
                studyStorageUpdate.StudyStatusEnum = statusEnum = StudyStatusEnum.OnlineLossless;
            }

            studyStorageUpdate.LastAccessedTime = Platform.Time;

            if (!filesystemStudyStorageEntityBroker.Update(filesystemStorageCritiera, filesystemStorageUpdate))
            {
                Platform.Log(LogLevel.Error, "Unable to update FilesystemQueue row: Study {0}, Server Entity {1}",
                             _location.StudyInstanceUid, _location.ServerPartitionKey);
            }
            else if (!studyStorageBroker.Update(_location.GetKey(), studyStorageUpdate))
            {
                Platform.Log(LogLevel.Error, "Unable to update StudyStorage row: Study {0}, Server Entity {1}",
                             _location.StudyInstanceUid, _location.ServerPartitionKey);
            }
            else
            {
                // Update the location, so the next time we come in here, we don't try and update the database
                // for another sop in the study.
                _location.StudyStatusEnum         = statusEnum;
                _location.TransferSyntaxUid       = fileSyntax.UidString;
                _location.ServerTransferSyntaxKey = serverSyntax.Key;
            }
        }