Esempio n. 1
0
 public JobManager(ForwardOptions options, IForwardDataAccessAgent fagent, IAeManagementDataAccessAgent aagent, IStorageDataAccessAgent sagent)
 {
     _Options      = options;
     _forwardAgent = fagent;
     _aeAgent      = aagent;
     _storageAgent = sagent;
 }
Esempio n. 2
0
        public override void AddServices( )
        {
            Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(ServiceDirectory);
            DicomServer   server        = ServiceLocator.Retrieve <DicomServer>();
            string        serviceName   = server.Name;

            if (!DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent> ( ))
            {
                IForwardDataAccessAgent dataAccess = DataAccessFactory.GetInstance(new ForwardDataAccessConfigurationView(configuration, null, serviceName)).CreateDataAccessAgent <IForwardDataAccessAgent>();

                DataAccessServices.RegisterDataAccessService <IForwardDataAccessAgent> (dataAccess);
            }

            RegisterGatewayServer( );

            RegisterForwardService( );

            SettingsChangedNotifier settingsChanged;

            if (!ServiceLocator.IsRegistered <SettingsChangedNotifier> ( ))
            {
                settingsChanged = new SettingsChangedNotifier(__Settings);

                ServiceLocator.Register <SettingsChangedNotifier> (settingsChanged);
            }
            else
            {
                settingsChanged = ServiceLocator.Retrieve <SettingsChangedNotifier> (  );
            }

            settingsChanged.SettingsChanged += new EventHandler(settingsChanged_SettingsChanged);

            settingsChanged.Enabled = true;
        }
Esempio n. 3
0
        public bool CanAccessDatabase(out string error)
        {
            error = string.Empty;
            try
            {
                System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(Module.ServiceDirectory);

                IForwardDataAccessAgent      forwardAgent      = GetAgent <IForwardDataAccessAgent>(configuration, new ForwardDataAccessConfigurationView(configuration, null, Module.ServiceName));
                IStorageDataAccessAgent      storageAgent      = GetAgent <IStorageDataAccessAgent>(configuration, new StorageDataAccessConfigurationView(configuration, null, Module.ServiceName));
                IAeManagementDataAccessAgent aeManagementAgent = GetAgent <IAeManagementDataAccessAgent>(configuration, new AeManagementDataAccessConfigurationView(configuration, null, Module.ServiceName));

                bool bContinue = true;
                if (forwardAgent == null)
                {
                    error     = string.Format("{0} {1}", AssemblyName, "Cannot create IForwardDataAccessAgent");
                    bContinue = false;
                }

                if (bContinue)
                {
                    if (storageAgent == null)
                    {
                        error     = string.Format("{0} {1}", AssemblyName, "Cannot create IStorageDataAccessAgent");
                        bContinue = false;
                    }
                }

                if (bContinue)
                {
                    if (aeManagementAgent == null)
                    {
                        error     = string.Format("{0} {1}", AssemblyName, "Cannot create IAeManagementDataAccessAgent");
                        bContinue = false;
                    }
                }

                if (bContinue)
                {
                    forwardAgent.IsForwarded("notUsed");

                    storageAgent.MaxQueryResults = 10;
                    storageAgent.IsPatientsExists("patientIdNotUsed");

                    aeManagementAgent.GetAeTitle("notUsed");
                }
            }
            catch (Exception e)
            {
                error = string.Format("{0} {1}", AssemblyName, e.Message);
            }

            bool ret = string.IsNullOrEmpty(error);

            return(ret);
        }
Esempio n. 4
0
 public void RunThread(DicomScp scp, IForwardDataAccessAgent forwardAgent)
 {
     // int threadId = Thread.CurrentThread.ManagedThreadId;
     try
     {
         // Logger.Global.SystemMessage(LogType.Information, string.Format("[Forwarder] [{0:X8}] +++ InternalRunThread starting", threadId), _ServerAE);
         InternalRunThread(scp, forwardAgent);
     }
     finally
     {
         // Logger.Global.SystemMessage(LogType.Information, string.Format("[Forwarder]  [{0:X8}] --- InternalRunThread ending", threadId), _ServerAE);
     }
 }
Esempio n. 5
0
        public void Run(IForwardDataAccessAgent forwardAgent, DateRange range)
        {
            lock (resetLock)
            {
                long   count   = forwardAgent.GetResetCount(range);
                string message = string.Format("[Forwarder] {0} {1} found to reset forward date", count, count == 1 ? "dataset" : "datasets");

                Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE);
                if (count > 0)
                {
                    forwardAgent.Reset(range);
                    message = string.Format("[Forwarder] {0} {1} forward date successfully reset", count, count == 1 ? "dataset" : "datasets");
                    Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE);
                }
            }
        }
Esempio n. 6
0
        public void Run(DicomScp scp, IForwardDataAccessAgent forwardAgent)
        {
            if (_serviceShuttingDown)
            {
                return;
            }

            AeInfoExtended aeInfoExtended = Module._aeManagementAgent.GetAeTitle(scp.AETitle);

            if (aeInfoExtended != null)
            {
                _useTls = aeInfoExtended.ClientPortUsage == ClientPortUsageType.Secure || ((aeInfoExtended.ClientPortUsage == ClientPortUsageType.SameAsServer) && (Module._Server.Secure));
            }

            Thread thread = new Thread(() => RunThread(scp, forwardAgent));

            thread.Start();
        }
Esempio n. 7
0
        public bool CanAccessDatabase(out string error)
        {
            error = string.Empty;
            bool ret = false;

            try
            {
                System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsAddinsConfiguration(GatewaySession.ServiceDirectory);

                IForwardDataAccessAgent forwardAgent = GetAgent <IForwardDataAccessAgent>(configuration, new ForwardDataAccessConfigurationView(configuration, null, GatewaySession.ServiceName));
                IOptionsDataAccessAgent optionsAgent = GetAgent <IOptionsDataAccessAgent>(configuration, new OptionsDataAccessConfigurationView(configuration, null, GatewaySession.ServiceName));

                bool bContinue = true;
                if (forwardAgent == null)
                {
                    error     = string.Format("{0} {1}", AssemblyName, "Cannot create IForwardDataAccessAgent");
                    bContinue = false;
                }

                if (bContinue)
                {
                    if (optionsAgent == null)
                    {
                        error     = string.Format("{0} {1}", AssemblyName, "Cannot create IOptionsDataAccessAgent");
                        bContinue = false;
                    }
                }

                if (bContinue)
                {
                    forwardAgent.IsForwarded("notUsed");
                    optionsAgent.GetDefaultOptions();
                }
            }
            catch (Exception e)
            {
                error = string.Format("{0} {1}", AssemblyName, e.Message);
            }

            ret = string.IsNullOrEmpty(error);
            return(ret);
        }
        private void InitializeDataAccess()
        {
            if (!DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent>())
            {
                System.Configuration.Configuration configuration = DicomDemoSettingsManager.GetGlobalPacsConfiguration();
                _forwardAgent = DataAccessFactory.GetInstance(new ForwardDataAccessConfigurationView(configuration, PacsProduct.ProductName, PacsProduct.ServiceName)).CreateDataAccessAgent <IForwardDataAccessAgent>();
                DataAccessServices.RegisterDataAccessService <IForwardDataAccessAgent>(_forwardAgent);
            }
            else
            {
                _forwardAgent = DataAccessServices.GetDataAccessService <IForwardDataAccessAgent>();
            }

            if (_forwardAgent != null)
            {
                _infoTimer      = new System.Threading.Timer(new System.Threading.TimerCallback(UpdateCount));
                VisibleChanged += new EventHandler(ForwardManagerConfigurationView_VisibleChanged);
                if (Visible)
                {
                    _infoTimer.Change(REFRESH_INTERVAL, REFRESH_INTERVAL);
                }
            }
        }
Esempio n. 9
0
      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;
         }
      }
Esempio n. 10
0
 public void Run(IForwardDataAccessAgent forwardAgent, IStorageDataAccessAgent storageAgent)
 {
    Thread thread = new Thread(() => RunThread(forwardAgent, storageAgent));
    thread.Start();
 }
Esempio n. 11
0
        public void InternalRunThread(DicomScp scp, IForwardDataAccessAgent forwardAgent)
        {
            lock (forwardLock)
            {
                if (_serviceShuttingDown)
                {
                    return;
                }

                ForwardInstance[] instances;
                try
                {
                    instances = forwardAgent.GetForwardList();
                }
                catch (Exception ex)
                {
                    Logger.Global.SystemMessage(LogType.Error, ex.ToString(), _ServerAE);
                    // throw;
                    instances = new ForwardInstance[0];
                }

                string message = string.Format("[Forwarder] {0} {1} found to forward", instances.Length, instances.Length == 1 ? "dataset" : "datasets");

                Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE);
                if (instances.Length > 0 && _Options.Verify)
                {
                    message = string.Format("[Forwarder] {0} {1} will be verified after forwarding", instances.Length, instances.Length == 1 ? "instance" : "instances");
                    Logger.Global.SystemMessage(LogType.Warning, message, _ServerAE);
                }
                foreach (ForwardInstance instance in instances)
                {
#if LEADTOOLS_V18_OR_LATER
                    if (_cancelForward)
                    {
                        _cancelForward = false;
                        Logger.Global.SystemMessage(LogType.Information, string.Format("Cancelling Forward Process"), _ServerAE);
                        break;
                    }

                    if (_serviceShuttingDown)
                    {
                        break;
                    }
#endif // #if LEADTOOLS_V18_OR_LATER

                    try
                    {
                        if (!File.Exists(instance.ReferencedFile))
                        {
                            message = string.Format("[Forwarder] Referenced file doesn't exist.  Instance ({0}) will be removed from forwarding queue. [{1}]", instance.SOPInstanceUID, instance.ReferencedFile);
                            Logger.Global.SystemMessage(LogType.Warning, message, _ServerAE);
                            forwardAgent.SetInstanceForwarded(instance.SOPInstanceUID, DateTime.Now, null);
                            continue;
                        }

                        // SendInstance can fail because DicomEngine may be locked
                        DicomCommandStatusType status = DicomCommandStatusType.Success;
                        try
                        {
                            status = SendInstance(scp, instance);
                        }
                        catch (Exception)
                        {
                            // Console.WriteLine(ex.Message);
                            throw;
                        }

                        if (status == DicomCommandStatusType.Success || status == DicomCommandStatusType.DuplicateInstance)
                        {
                            DateTime?expires     = null;
                            DateTime forwardDate = DateTime.Now;

                            if (_Options.ImageHold != null && _Options.ImageHold != 0)
                            {
                                switch (_Options.HoldInterval)
                                {
                                case HoldInterval.Days:
                                    expires = forwardDate.AddDays(_Options.ImageHold.Value);
                                    break;

                                case HoldInterval.Months:
                                    expires = forwardDate.AddMonths(_Options.ImageHold.Value);
                                    break;

                                default:
                                    expires = forwardDate.AddYears(_Options.ImageHold.Value);
                                    break;
                                }
                            }
                            if (!_Options.Verify || VerifyInstance(scp, instance.SOPInstanceUID) == DicomCommandStatusType.Success)
                            {
                                if (_Options.Verify)
                                {
                                    message = string.Format("[Forwarder] SOP instance successfully verified: {0}", instance.SOPInstanceUID);
                                    Logger.Global.SystemMessage(LogType.Debug, message, _ServerAE);
                                }
                                forwardAgent.SetInstanceForwarded(instance.SOPInstanceUID, forwardDate, expires);
                            }
                            else
                            {
                                message = string.Format("[Forwarder] Failed to verify SOP instance: {0}. Instance not marked as forwarded.", instance.SOPInstanceUID);
                                Logger.Global.SystemMessage(LogType.Error, message, _ServerAE);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Global.SystemMessage(LogType.Error, "[Forwarder] " + e.Message, _ServerAE);
                    }
                }
            }
        }
Esempio n. 12
0
        private void OnSendCStoreResponse(object sender, CStoreResponseSentEventArgs response)
        {
            try
            {
                bool process = false;


                lock ( _instancesListLock )
                {
                    process = (__MovedInstances.Contains(response.Instance) && !__ForwardedInstances.Contains(response.Instance));
                }

                if (process && response.Status == DicomCommandStatusType.Success)
                {
                    if (ServiceLocator.IsRegistered <ForwardOptions> ( ) && DataAccessServices.IsDataAccessServiceRegistered <IForwardDataAccessAgent> ( ))
                    {
                        ForwardOptions          forwardOptions = ServiceLocator.Retrieve <ForwardOptions> ( );
                        IForwardDataAccessAgent dataAccess     = DataAccessServices.GetDataAccessService <IForwardDataAccessAgent> ( );

                        if (null != forwardOptions && null != dataAccess)
                        {
                            DateTime?expires     = null;
                            DateTime forwardDate = DateTime.Now;


                            if (dataAccess.IsForwarded(response.Instance))
                            {
                                return;
                            }

                            if (forwardOptions.ImageHold != null && forwardOptions.ImageHold != 0)
                            {
                                switch (forwardOptions.HoldInterval)
                                {
                                case HoldInterval.Days:
                                {
                                    expires = forwardDate.AddDays(forwardOptions.ImageHold.Value);
                                }
                                break;

                                case HoldInterval.Months:
                                {
                                    expires = forwardDate.AddMonths(forwardOptions.ImageHold.Value);
                                }
                                break;

                                default:
                                {
                                    expires = forwardDate.AddYears(forwardOptions.ImageHold.Value);
                                }

                                break;
                                }
                            }

                            dataAccess.SetInstanceForwarded(response.Instance, forwardDate, expires);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                GatewaySession.Log(__Client, DicomCommandType.CMove, LogType.Error, MessageDirection.Output, null, "[Gateway] Failed to set instance forwarding.\n" + ex.Message);
            }
        }