private DataSet QueryCurrentPatient(string patientID) { MatchingParameterCollection matchingCollection; MatchingParameterList matchingList; Patient patient; matchingCollection = new MatchingParameterCollection(); matchingList = new MatchingParameterList(); patient = new Patient(patientID); matchingList.Add(patient); matchingCollection.Add(matchingList); return(_DataAccessAgent.QueryCompositeInstances(matchingCollection)); }
private void backgroundworker_DoWork(object sender, DoWorkEventArgs e) { try { int nPercentComplete = 0; backgroundWorker.ReportProgress(nPercentComplete); IStorageDataAccessAgent db = GetDataAccessAgent(); if (db == null) { e.Result = 0.0; backgroundWorker.ReportProgress(100); return; } // This takes a long time DataSet compositeInstance = db.QueryCompositeInstances(_mpc);; long totalBytes = 0; int count = compositeInstance.Tables[DataTableHelper.InstanceTableName].Rows.Count; int i = 0; while (!backgroundWorker.CancellationPending && i < count) { string sFile = RegisteredDataRows.InstanceInfo.ReferencedFile(compositeInstance.Tables[DataTableHelper.InstanceTableName].Rows[0]); FileInfo fi = new FileInfo(sFile); if (fi.Exists) { totalBytes += fi.Length; nPercentComplete = 100 * (i + 1) / count; } backgroundWorker.ReportProgress(nPercentComplete); i++; } if (backgroundWorker.CancellationPending) { e.Cancel = true; } else { double dTotalMBytes = ((double)totalBytes / (1024.0 * 1024.0)); e.Result = dTotalMBytes; backgroundWorker.ReportProgress(100); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
internal static string FindReferencedFile( #if LEADTOOLS_V19_OR_LATER IExternalStoreDataAccessAgent externalStoreAgent, #endif // #if LEADTOOLS_V19_OR_LATER string sopInstanceUID) { MatchingParameterCollection mpc = new MatchingParameterCollection(); MatchingParameterList mpl = new MatchingParameterList(); DataSet /*CompositeInstanceDataSet*/ instanceData; IStorageDataAccessAgent agent = null; string referencedFile = string.Empty; if (DataAccessServices.IsDataAccessServiceRegistered <IStorageDataAccessAgent>()) { agent = DataAccessServices.GetDataAccessService <IStorageDataAccessAgent>(); } if (agent != null) { ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(sopInstanceUID); mpl.Add(instanceEntity); mpc.Add(mpl); instanceData = agent.QueryCompositeInstances(mpc); if (instanceData.Tables[DataTableHelper.InstanceTableName].Rows.Count == 1) { DataRow row = instanceData.Tables[DataTableHelper.InstanceTableName].Rows[0]; referencedFile = RegisteredDataRows.InstanceInfo.ReferencedFile(row); #if (LEADTOOLS_V19_OR_LATER_MEDICAL_EXTERNAL_STORE) || (LEADTOOLS_V19_OR_LATER) if (string.IsNullOrEmpty(referencedFile)) { // If empty, it might be on the cloud // Use DicomInstanceRetrieveExternalStoreCommand with cache set to true to copy it locally if (externalStoreAgent == null) { if (DataAccessServices.IsDataAccessServiceRegistered <IExternalStoreDataAccessAgent>()) { externalStoreAgent = DataAccessServices.GetDataAccessService <IExternalStoreDataAccessAgent>(); } } DicomInstanceRetrieveExternalStoreCommand c = new DicomInstanceRetrieveExternalStoreCommand(agent, externalStoreAgent, AddInsSession.ServiceDirectory, true); DicomDataSet ds = c.GetDicomDataSet(row, out referencedFile); } #endif // (LEADTOOLS_V19_OR_LATER_MEDICAL_EXTERNAL_STORE) || (LEADTOOLS_V19_OR_LATER) } } return(referencedFile); }
private static DicomDataSet GetFirstReferencedInstanceDataSet ( IStorageDataAccessAgent dataAccess, MediaCreationManagement mediaObject) { MatchingParameterCollection matchingCollection; MatchingParameterList matchingList; CompositeInstanceDataSet compositeInstance; matchingCollection = new MatchingParameterCollection( ); matchingList = new MatchingParameterList( ); // Instance instance = new Instance ( mediaObject.ReferencedSopSequence [ 0 ].SopInstance.ReferencedSopInstanceUid ) ; ICatalogEntity instance = RegisteredEntities.GetInstanceEntity(mediaObject.ReferencedSopSequence [0].SopInstance.ReferencedSopInstanceUid); matchingCollection.Add(matchingList); matchingList.Add(instance); compositeInstance = dataAccess.QueryCompositeInstances(matchingCollection).ToCompositeInstanceDataSet(); if (compositeInstance.Instance.Count > 0) { DicomDataSet ds; ds = new DicomDataSet( ); ds.Load(compositeInstance.Instance [0].ReferencedFile, DicomDataSetLoadFlags.None); return(ds); } else { return(null); } }
private void SendCopy(AutoCopyItem item) { AeInfoExtended[] aes = _aeManagementAgent.GetRelatedAeTitles(item.SourceAE, Module.AUTOCOPY_RELATION); StoreScu store = new StoreScu(); Module.InitializeDicomSecurity(false); StoreScu storeSecure = null; DicomOpenSslVersion dicomOpenSslVersion = DicomNet.GetOpenSslVersion(); if (dicomOpenSslVersion.IsAvailable) { storeSecure = new StoreScu(Module._Server.TemporaryDirectory, DicomNetSecurityMode.Tls, Module._openSslOptions); Module.SetCiphers(storeSecure); } DicomScp scp = null; string[] sopInstances = item.Datasets.ToArray(); if (aes == null || aes.Length == 0) { return; } string clientAe = Module.Options.UseCustomAE ? Module.Options.AutoCopyAE : item.ClientAE; AddEventHandlers(store, clientAe); AddEventHandlers(storeSecure, clientAe); foreach (AeInfoExtended ae in aes) { #if LEADTOOLS_V20_OR_LATER // Update dbo.AeInfo.LastAccessDate to Date.Now ae.LastAccessDate = DateTime.Now; _aeManagementAgent.Update(ae.AETitle, ae); #endif bool useTls = ae.ClientPortUsage == ClientPortUsageType.Secure || ((ae.ClientPortUsage == ClientPortUsageType.SameAsServer) && (Module._Server.Secure)); useTls = (useTls && dicomOpenSslVersion.IsAvailable); foreach (string sopInstance in sopInstances) { MatchingParameterCollection mpc = new MatchingParameterCollection(); MatchingParameterList mpl = new MatchingParameterList(); ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(sopInstance); mpl.Add(instanceEntity); mpc.Add(mpl); DataSet instanceData = _StorageAgent.QueryCompositeInstances(mpc); // if (instanceData.Instance.Rows.Count == 1) if (instanceData.Tables[DataTableHelper.InstanceTableName].Rows.Count == 1) { // string file = instanceData.Instance[0].ReferencedFile; DataRow instanceRow = instanceData.Tables[DataTableHelper.InstanceTableName].Rows[0]; string file = RegisteredDataRows.InstanceInfo.ReferencedFile(instanceRow); scp = new DicomScp(IPAddress.Parse(ae.Address), ae.AETitle, ae.Port); try { if (useTls) { storeSecure.Store(scp, file); } else { store.Store(scp, file); } } catch (ClientAssociationException ce) { string message = string.Format("[Auto Copy] Failed to establish association with server: {0}.", ce.Reason); LogEvent(LogType.Error, MessageDirection.None, message, DicomCommandType.Undefined, null, store, null); } catch (DicomException de) { string message = string.Format("[Auto Copy] Error: {0}.", de.Message); LogEvent(LogType.Error, MessageDirection.Input, message, DicomCommandType.Undefined, null, store, null); } catch (Exception e) { string message = "[Auto Copy] " + e.Message; Logger.Global.Log(string.Empty, string.Empty, -1, string.Empty, string.Empty, -1, DicomCommandType.Undefined, DateTime.Now, LogType.Error, MessageDirection.None, message, null, null); } } } } RemoveEventHandlers(store); RemoveEventHandlers(storeSecure); foreach (string sopInstance in sopInstances) { item.Datasets.Remove(sopInstance); } }
public void RunThread(IExternalStoreDataAccessAgent externalStoreAgent, IStorageDataAccessAgent storageAgent, DateRange range) { DicomUtilities.DebugString(DebugStringOptions.ShowCounter, "RestoreProcess.Run"); lock (_restoreLock) { ExternalStoreInstance[] instances = externalStoreAgent.GetRestoreList(range); string message = string.Format("{0} {1} found to restore", instances.Length, "dataset(s)"); MatchingParameterCollection mpc = new MatchingParameterCollection(); Logger.Global.SystemMessage(LogType.Information, message, _serviceName); CStoreCommandConfiguration storeConfig = new CStoreCommandConfiguration(); storeConfig.DicomFileExtension = _storageAddinsConfiguration.StoreAddIn.StoreFileExtension; FillStoreCommandDefaultSettings(storeConfig, _storageAddinsConfiguration); foreach (ExternalStoreInstance instance in instances) { if (_cancelRestore) { _cancelRestore = false; Logger.Global.SystemMessage(LogType.Information, "Cancelling Restore Process", _serviceName); break; } MatchingParameterList mpl = new MatchingParameterList(); ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(instance.SOPInstanceUID); mpl.Add(instanceEntity); mpc.Add(mpl); try { DataSet ds = storageAgent.QueryCompositeInstances(mpc); DataRow[] rows = ds.Tables[DataTableHelper.InstanceTableName].Select(); foreach (DataRow row in rows) { // Get the ICrud that the file was originally stored with ICrud crud = DataAccessServiceLocator.Retrieve <ICrud>(instance.ExternalStoreGuid); if (crud != null) { DicomDataSet dicomDataSet = null; Exception ex = crud.RetrieveDicom(row, DicomDataSetLoadFlags.None, out dicomDataSet); if (ex == null) { string storageLocation = CStoreCommand.GetStorageLocation(storeConfig, dicomDataSet); string dicomInstancePath = Path.Combine(storageLocation, instance.SOPInstanceUID) + "." + storeConfig.DicomFileExtension; ex = crud.RetrieveFile(row, dicomInstancePath); if (ex != null) { throw ex; } externalStoreAgent.SetReferencedFile(instance.SOPInstanceUID, dicomInstancePath); Logger.Global.SystemMessage(LogType.Information, string.Format("File Restored: {0} ", dicomInstancePath), _serviceName); } } else { Logger.Global.SystemMessage(LogType.Information, string.Format("Error: File Not Restored -- Store Token: {0}. The Addin that for ExternalStoreGuid '{1}' cannot be found.", instance.StoreToken, instance.ExternalStoreGuid), _serviceName); } } } catch (Exception e) { message = string.Format("Error ({0}) restoring instance: {1}", e.Message, instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Error, message, _serviceName); } finally { mpc.Clear(); } } } }
public void RunThread(IForwardDataAccessAgent forwardAgent, IStorageDataAccessAgent storageAgent) { lock (cleanLock) { ForwardInstance[] instances = forwardAgent.GetCleanList(); StorageAddInsConfiguration storageSettings = Module.StorageConfigManager.GetStorageAddInsSettings(); string message = string.Format("[Forwarder] {0} {1} found to clean", instances.Length, instances.Length == 1 ? "dataset" : "datasets"); DicomFileDeleter deleter = new DicomFileDeleter(); MatchingParameterCollection mpc = new MatchingParameterCollection(); deleter.DicomFileDeleted += new EventHandler<Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleted); deleter.DicomFileDeleteFailed += new EventHandler<Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleteFailed); if (storageSettings != null) { deleter.DeleteFilesOnDatabaseDelete = storageSettings.StoreAddIn.DeleteFiles; deleter.BackupFilesOnDatabaseDelete = storageSettings.StoreAddIn.BackupFilesOnDelete; deleter.BackupFilesOnDeleteFolder = storageSettings.StoreAddIn.DeleteBackupLocation; } Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE); foreach (ForwardInstance instance in instances) { #if LEADTOOLS_V18_OR_LATER if (_cancelClean) { _cancelClean = false; Logger.Global.SystemMessage(LogType.Information, string.Format("Cancelling Clean Process"), _ServerAE); break; } #endif // #if LEADTOOLS_V18_OR_LATER MatchingParameterList mpl = new MatchingParameterList(); ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(instance.SOPInstanceUID); mpl.Add(instanceEntity); mpc.Add(mpl); try { DataSet ds = storageAgent.QueryCompositeInstances(mpc); // // Find the instance to delete // storageAgent.DeleteInstance(GetMatchingParameters(instance.SOPInstanceUID)); if (ds != null) { deleter.Delete(null, ds.Tables[DataTableHelper.InstanceTableName].Select()); } } catch (Exception e) { message = string.Format("[Forwarder] Error ({0}) deleting instance: {1}", e.Message, instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Error, message, _ServerAE); } finally { mpc.Clear(); } } deleter.DicomFileDeleted -= deleter_DicomFileDeleted; deleter.DicomFileDeleteFailed -= deleter_DicomFileDeleteFailed; } }
public void Run(IExternalStoreDataAccessAgent externalStoreAgent, IStorageDataAccessAgent storageAgent, int expirationDays) { DicomUtilities.DebugString(DebugStringOptions.ShowCounter, "CleanProcess.Run"); lock (cleanLock) { ExternalStoreInstance[] instances = externalStoreAgent.GetClearList(expirationDays); // StorageAddInsConfiguration storageSettings = Module.StorageConfigManager.GetStorageAddInsSettings(); if (instances.Length > 0) { string message = string.Format("{0} {1} found to clear", instances.Length, "local dataset(s)"); Logger.Global.SystemMessage(LogType.Information, message, _serviceName); DicomFileDeleter deleter = new DicomFileDeleter(); MatchingParameterCollection mpc = new MatchingParameterCollection(); deleter.DicomFileDeleted += new EventHandler <Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleted); deleter.DicomFileDeleteFailed += new EventHandler <Leadtools.Medical.Winforms.EventBrokerArgs.DicomFileDeletedEventArgs>(deleter_DicomFileDeleteFailed); if (_storageSettings != null) { deleter.DeleteFilesOnDatabaseDelete = _storageSettings.StoreAddIn.DeleteFiles; deleter.BackupFilesOnDatabaseDelete = _storageSettings.StoreAddIn.BackupFilesOnDelete; deleter.BackupFilesOnDeleteFolder = _storageSettings.StoreAddIn.DeleteBackupLocation; deleter.DeleteAnnotationsOnImageDelete = false; deleter.DeleteReferencedImagesOnImageDelete = false; } foreach (ExternalStoreInstance instance in instances) { MatchingParameterList mpl = new MatchingParameterList(); ICatalogEntity instanceEntity = RegisteredEntities.GetInstanceEntity(instance.SOPInstanceUID); mpl.Add(instanceEntity); mpc.Add(mpl); try { DataSet ds = storageAgent.QueryCompositeInstances(mpc); // // Find the instance to delete //// deleter.Delete(null, ds.Tables[DataTableHelper.InstanceTableName].Select()); externalStoreAgent.SetReferencedFile(instance.SOPInstanceUID, string.Empty); } catch (Exception e) { message = string.Format("Error ({0}) deleting instance: {1}", e.Message, instance.SOPInstanceUID); Logger.Global.SystemMessage(LogType.Error, message, _serviceName); } finally { mpc.Clear(); } } deleter.DicomFileDeleted -= deleter_DicomFileDeleted; deleter.DicomFileDeleteFailed -= deleter_DicomFileDeleteFailed; } } }