Exemple #1
0
        public DownloadInfo[] GetDownloadInfos(string sUserName,
                                               PACSConnection server,
                                               string client,
                                               string patientID,
                                               string studyInstanceUID,
                                               string seriesInstanceUID,
                                               string sopInstanceUID,
                                               DownloadStatus status)
        {
            List <DownloadInfo> di = new List <DownloadInfo>();

            JobsProxy jsp = new JobsProxy(_DownloadJobsDataAccessAgent);

            JobProxy[] jpa = jsp.GetAll(EncodeStatus(status), EncodeCompletedStatus(status), sUserName);

            foreach (JobProxy jp in jpa)
            {
                if (jp.Match(patientID,
                             studyInstanceUID,
                             seriesInstanceUID,
                             sopInstanceUID))
                {
                    di.Add(UpdateDownloadInfoStatus(sUserName, new DownloadInfo()
                    {
                        Id = jp.Id.ToString()
                    }));
                }
            }

            return(di.ToArray());
        }
        public DownloadInfo[] GetDownloadInfos
        (
            string authenticationCookie,
            PACSConnection server,
            string client,
            string patientID,
            string studyInstanceUID,
            string seriesInstanceUID,
            string sopInstanceUID,
            DownloadStatus status,
            ExtraOptions extraOptions)
        {
            string userName;


            userName = ServiceUtils.Authorize(authenticationCookie, PermissionsTable.Instance.CanDownloadImages);

            return(_addin.GetDownloadInfos(userName,
                                           server,
                                           client,
                                           patientID,
                                           studyInstanceUID,
                                           seriesInstanceUID,
                                           sopInstanceUID,
                                           status));
        }
Exemple #3
0
        private MoveObjectsJob CreateJob(PACSConnection server,
                                         string MoveToAe,
                                         string PatientID,
                                         string StudyInstanceUID,
                                         string SeriesInstanceUID,
                                         string SOPInstanceUID)
        {
            DICOMJobSettings _js = new DICOMJobSettings()
            {
                ServerAE       = server.AETitle,
                ServerPort     = server.Port,
                ServerIP       = server.IPAddress,
                ClientAE       = LocalClient.AETitle,
                ClientIP       = LocalClient.IPAddress,
                ClientPort     = LocalClient.Port,
                MoveToClientAE = MoveToAe
            };

            MoveObjectsJobConfig mc = new MoveObjectsJobConfig()
            {
                PatientID         = PatientID,
                StudyInstanceUID  = StudyInstanceUID,
                SeriesInstanceUID = SeriesInstanceUID,
                SOPInstanceUID    = SOPInstanceUID
            };

            MoveObjectsJob mj = new MoveObjectsJob(_js);

            mc.Config(mj);
            return(mj);
        }
Exemple #4
0
        public DownloadAddin(PACSConnection localClient, PACSConnection storageServer, IDownloadJobsDataAccessAgent DownloadJobsDataAccessAgent, IAuthorizedStorageDataAccessAgent DataAccess)
        {
            LocalClient   = localClient;
            StorageServer = storageServer;

            _AuthorizedDataAccessAgent   = DataAccess;
            _DownloadJobsDataAccessAgent = DownloadJobsDataAccessAgent;
        }
Exemple #5
0
        private void ReadAppSettings()
        {
            StorageServerServicePath = ServiceUtils.MapConfigPath(ConfigurationManager.AppSettings.Get("storageServerServicePath"));

            {
                ClientConnection = new PACSConnection();

                //the client AE/IP/port used for connecting to remote PACS for query
                ClientConnection.AETitle = ConfigurationManager.AppSettings.Get("ClientAe");
                if (string.IsNullOrEmpty(ClientConnection.AETitle))
                {
                    ClientConnection.AETitle = "LTCLIENT19";
                }
                ClientConnection.IPAddress = ConfigurationManager.AppSettings.Get("ClientIP");
                if (string.IsNullOrEmpty(ClientConnection.IPAddress))
                {
                    ClientConnection.IPAddress = ServiceUtils.GetLocalIPAddressesV4();
                }

                ClientConnection.Port = ParseTools.Int(ConfigurationManager.AppSettings.Get("ClientPort"), ServiceUtils.GetFreeIPPort());
            }

            {
                StorageServerConnection           = new PACSConnection();
                StorageServerConnection.AETitle   = ConfigurationManager.AppSettings.Get("ServerAe");
                StorageServerConnection.IPAddress = ConfigurationManager.AppSettings.Get("ServerIP");
                StorageServerConnection.Port      = ParseTools.Int(ConfigurationManager.AppSettings.Get("ServerPort"), -1);

                //read default storage server dicom connection settings
                if (!string.IsNullOrEmpty(StorageServerServicePath) &&
                    (string.IsNullOrEmpty(StorageServerConnection.AETitle) ||
                     string.IsNullOrEmpty(StorageServerConnection.IPAddress) ||
                     StorageServerConnection.Port <= 0))
                {
                    try
                    {
                        var settingsFile = Path.Combine(StorageServerServicePath, "settings.xml");
                        var doc          = XDocument.Load(settingsFile);
                        {
                            StorageServerConnection.Port      = ParseTools.Int(doc.Descendants("Port").First().Value, -1);
                            StorageServerConnection.IPAddress = doc.Descendants("IpAddress").First().Value;
                            StorageServerConnection.AETitle   = doc.Descendants("AETitle").First().Value;
                        }
                    }
                    catch
                    {
                    }
                }

                if (string.IsNullOrEmpty(StorageServerConnection.AETitle))
                {
                    StorageServerConnection.AETitle = "LTSTORAGESERVER";
                }
            }
        }
Exemple #6
0
        private static AeInfo GetScp(PACSConnection server)
        {
            AeInfo scpInfo;

            scpInfo = new AeInfo( );

            scpInfo.AETitle = server.AETitle;
            scpInfo.Address = server.IPAddress;
            scpInfo.Port    = server.Port;

            return(scpInfo);
        }
Exemple #7
0
        /// <summary>
        /// query a DICOM server for series data (Series Level query)
        /// </summary>
        /// <param name="server">remote server info</param>
        /// <param name="client">query client info</param>
        /// <param name="options">query options</param>
        /// <param name="extraOptions">custom data</param>
        /// <returns>returns the found Series</returns>
        public SeriesData[] FindSeries
        (
            PACSConnection server,
            ClientConnection client,
            QueryOptions options
        )
        {
            AeInfo scpInfo;
            AeInfo scuInfo;

            scpInfo = GetScp(server);
            scuInfo = GetScu(client);

            QueryProcessor <SeriesData> query = new QueryProcessor <SeriesData> (scpInfo, scuInfo);

            return(query.DoFind(GetSeriesQuery(options)));
        }
        public DownloadInfo DownloadImages
        (
            string authenticationCookie,
            PACSConnection server,
            string client,
            string PatientID,
            string StudyInstanceUID,
            string SeriesInstanceUID,
            string SOPInstanceUID,
            ExtraOptions extraOptions
        )
        {
            string userName;

            userName = ServiceUtils.Authorize(authenticationCookie, PermissionsTable.Instance.CanDownloadImages);

            return(_addin.DownloadImages(userName, server, "LTSTORAGESERVER", PatientID, StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, null != extraOptions?extraOptions.UserData:""));
        }
Exemple #9
0
        public DownloadInfo DownloadImages(string sUserName,
                                           PACSConnection server,
                                           string MoveToAE,
                                           string PatientID,
                                           string StudyInstanceUID,
                                           string SeriesInstanceUID,
                                           string SOPInstanceUID,
                                           string UserData)
        {
            JobProxy jp = new JobProxy(_DownloadJobsDataAccessAgent);

            jp.AddJob(typeof(MoveObjectsJob).ToString(),
                      JobsPersistence.Save(CreateJob(server, MoveToAE, PatientID, StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID)),
                      0,
                      0,
                      UserData,
                      sUserName);

            try
            {
                using (ImageDownloadAddin.WebAddin WebInterface = new ImageDownloadAddin.WebAddin())
                {
                    WebInterface.SendDownloadRequest(jp.Id.ToString(),
                                                     LocalClient.AETitle,
                                                     LocalClient.IPAddress,
                                                     LocalClient.Port,
                                                     StorageServer.AETitle,
                                                     StorageServer.IPAddress,
                                                     StorageServer.Port);
                }
            }
            catch (System.Exception ex)
            {
                jp.SetFailed_NotExecutedYet("Error connecting to the Archive server: " + ex.Message);
            }

            return(UpdateDownloadInfoStatus(sUserName, new DownloadInfo()
            {
                Id = jp.Id.ToString()
            }));
        }
Exemple #10
0
        public string VerifyConnection(PACSConnection server, ClientConnection client)
        {
            AeInfo scpInfo = GetScp(server);

            using (StoreScu scu = new StoreScu())
            {
                DicomScp scp = new DicomScp(IPAddress.Parse(scpInfo.Address), scpInfo.AETitle, scpInfo.Port);

                scu.AETitle = client.AETitle;
                try
                {
                    if (scu.Verify(scp))
                    {
                        return(string.Empty);
                    }
                }
                catch (Exception exception)
                {
                    return(exception.Message);
                }
            }
            return(string.Empty);
        }
Exemple #11
0
        public string VerifyConnection(string authenticationCookie, PACSConnection server, ClientConnection client, ExtraOptions extraOptions)
        {
            ServiceUtils.Authenticate(authenticationCookie);

            return(AddinsFactory.CreatePacsQueryAddin().VerifyConnection(server, client));
        }
Exemple #12
0
        public DICOMQueryResult ElectStudyTimeLineInstances(string authenticationCookie, PACSConnection server, ClientConnection client, QueryOptions options, ExtraOptions extraOptions)
        {
            DICOMQueryResult result = new DICOMQueryResult();

            StudyData[] StudiesDataArray = FindStudies(authenticationCookie, server, client, options, extraOptions);
            result.Studies = StudiesDataArray;

            SeriesData[] SeriesDataArray = FindSeries(authenticationCookie, server, client, options, extraOptions);

            result.Series = SeriesDataArray;

            List <InstanceData> AvailableInstancesList = new List <InstanceData>();

            if (null == options.SeriesOptions)
            {
                options.SeriesOptions = new SeriesQueryOptions();
            }

            foreach (SeriesData series in SeriesDataArray)
            {
                options.SeriesOptions.SeriesInstanceUID = series.InstanceUID;
                InstanceData[] objectsFound = FindInstances(authenticationCookie, server, client, options, extraOptions);
                if (objectsFound.Length > 0)
                {
                    Array.Sort <InstanceData>(objectsFound, CompareFunc);

                    if (string.IsNullOrEmpty(objectsFound[0].SeriesInstanceUID))
                    {
                        objectsFound[0].SeriesInstanceUID = series.InstanceUID;
                    }

                    AvailableInstancesList.Add(objectsFound[0]);
                }
            }

            result.Instances = AvailableInstancesList.ToArray();

            return(result);
        }
Exemple #13
0
 public PACSQueryAddin(PACSConnection localClient)
 {
     LocalClient = localClient;
 }