Пример #1
0
        /// <summary>
        /// Find the <see cref="ServerEntityKey"/> reference for a given Study Instance UID and Server Partition.
        /// </summary>
        /// <param name="read">The connection to use to read the values.</param>
        /// <param name="studyInstanceUid">The list of Study Instance Uids for which to retrieve the table keys.</param>
        /// <returns>A list of <see cref="ServerEntityKey"/>s.</returns>
        protected List <ServerEntityKey> LoadStudyKey(IPersistenceContext read, string[] studyInstanceUid)
        {
            var find = read.GetBroker <IStudyEntityBroker>();

            var criteria = new StudySelectCriteria();

            if (Partition != null)
            {
                criteria.ServerPartitionKey.EqualTo(Partition.Key);
            }

            if (studyInstanceUid.Length > 1)
            {
                criteria.StudyInstanceUid.In(studyInstanceUid);
            }
            else
            {
                criteria.StudyInstanceUid.EqualTo(studyInstanceUid[0]);
            }

            IList <Study> list = find.Find(criteria);

            var serverList = new List <ServerEntityKey>();

            foreach (Study row in list)
            {
                serverList.Add(row.GetKey());
            }

            return(serverList);
        }
Пример #2
0
        protected void LoadStudy()
        {
            if (String.IsNullOrEmpty(_studyInstanceUid))
            {
                return;
            }

            if (_partition == null)
            {
                return;
            }


            StudyAdaptor        studyAdaptor = new StudyAdaptor();
            StudySelectCriteria criteria     = new StudySelectCriteria();

            criteria.StudyInstanceUid.EqualTo(_studyInstanceUid);
            criteria.ServerPartitionKey.EqualTo(Partition.GetKey());
            Study study = studyAdaptor.GetFirst(HttpContextData.Current.ReadContext, criteria);

            if (study != null)
            {
                _study = StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, study);
            }
            else
            {
                StudyNotFoundException exception = new StudyNotFoundException(_studyInstanceUid);
                ExceptionHandler.ThrowException(exception);
            }

            StudyDetailsPanel.Study = _study;
            StudyDetailsPanel.DataBind();
        }
Пример #3
0
        /// <summary>
        /// Deletes the <see cref="StudyStorage"/> record
        /// </summary>
        /// <param name="item"></param>
        private void DeleteStudyStorage(Model.WorkQueue item)
        {
            using (IUpdateContext context = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                var study    = context.GetBroker <IStudyEntityBroker>();
                var criteria = new StudySelectCriteria();

                criteria.StudyInstanceUid.EqualTo(StorageLocation.StudyInstanceUid);
                criteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);

                int count = study.Count(criteria);
                if (count == 0)
                {
                    Platform.Log(LogLevel.Debug, "StudyProcess Cleanup: removing study storage record...");
                    var delete = context.GetBroker <IDeleteStudyStorage>();

                    var parms = new DeleteStudyStorageParameters
                    {
                        ServerPartitionKey = item.ServerPartitionKey,
                        StudyStorageKey    = item.StudyStorageKey
                    };

                    delete.Execute(parms);

                    context.Commit();
                }
            }
        }
Пример #4
0
        public IEnumerable <StudySummary> Select(int startRowIndex, int maximumRows)
        {
            if (maximumRows == 0 || Partition == null)
            {
                return(new List <StudySummary>());
            }

            StudySelectCriteria criteria = GetSelectCriteria();

            IList <Study> studyList = _searchController.GetRangeStudies(criteria, startRowIndex, maximumRows);

            _list = new List <StudySummary>();

            foreach (Study study in studyList)
            {
                _list.Add(StudySummaryAssembler.CreateStudySummary(HttpContext.Current.GetSharedPersistentContext(), study));
            }

            if (StudyFoundSet != null)
            {
                StudyFoundSet(_list);
            }

            return(_list);
        }
        private static WorkQueueDetails CreateGeneralWorkQueueItemDetails(Model.WorkQueue item)
        {
            var detail = new WorkQueueDetails();

            detail.Key = item.Key;
            detail.ScheduledDateTime = item.ScheduledTime;
            detail.ExpirationTime    = item.ExpirationTime;
            detail.InsertTime        = item.InsertTime;
            detail.FailureCount      = item.FailureCount;
            detail.Type               = item.WorkQueueTypeEnum;
            detail.Status             = item.WorkQueueStatusEnum;
            detail.Priority           = item.WorkQueuePriorityEnum;
            detail.FailureDescription = item.FailureDescription;
            detail.ServerDescription  = item.ProcessorID;

            StudyStorageLocation storage = WorkQueueController.GetLoadStorageLocation(item);

            detail.StorageLocationPath = storage.GetStudyPath();

            // Fetch UIDs
            var wqUidsAdaptor = new WorkQueueUidAdaptor();
            var uidCriteria   = new WorkQueueUidSelectCriteria();

            uidCriteria.WorkQueueKey.EqualTo(item.GetKey());
            IList <WorkQueueUid> uids = wqUidsAdaptor.Get(uidCriteria);

            var mapSeries = new Hashtable();

            foreach (WorkQueueUid uid in uids)
            {
                if (mapSeries.ContainsKey(uid.SeriesInstanceUid) == false)
                {
                    mapSeries.Add(uid.SeriesInstanceUid, uid.SopInstanceUid);
                }
            }

            detail.NumInstancesPending = uids.Count;
            detail.NumSeriesPending    = mapSeries.Count;


            // Fetch the study and patient info
            var          ssAdaptor = new StudyStorageAdaptor();
            StudyStorage storages  = ssAdaptor.Get(item.StudyStorageKey);

            var studyAdaptor  = new StudyAdaptor();
            var studycriteria = new StudySelectCriteria();

            studycriteria.StudyInstanceUid.EqualTo(storages.StudyInstanceUid);
            studycriteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);
            Study study = studyAdaptor.GetFirst(studycriteria);

            // Study may not be available until the images are processed.
            if (study != null)
            {
                var studyAssembler = new StudyDetailsAssembler();
                detail.Study = studyAssembler.CreateStudyDetail(study);
            }
            return(detail);
        }
Пример #6
0
        static public Study Find(IPersistenceContext context, ServerEntityKey studyStorageKey)
        {
            var broker   = context.GetBroker <IStudyEntityBroker>();
            var criteria = new StudySelectCriteria();

            criteria.StudyStorageKey.EqualTo(studyStorageKey);
            return(broker.FindOne(criteria));
        }
Пример #7
0
 public IList <Study> LoadRelatedStudies()
 {
     using (IReadContext read = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
     {
         IStudyEntityBroker  broker   = read.GetBroker <IStudyEntityBroker>();
         StudySelectCriteria criteria = new StudySelectCriteria();
         criteria.PatientKey.EqualTo(Key);
         return(broker.Find(criteria));
     }
 }
Пример #8
0
 public IList <Study> LoadRelatedStudies()
 {
     using (var context = new ServerExecutionContext())
     {
         IStudyEntityBroker  broker   = context.ReadContext.GetBroker <IStudyEntityBroker>();
         StudySelectCriteria criteria = new StudySelectCriteria();
         criteria.PatientKey.EqualTo(Key);
         return(broker.Find(criteria));
     }
 }
Пример #9
0
        /// <summary>
        /// Find a <see cref="Study"/> with the specified study instance uid on the given partition.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="studyInstanceUid"></param>
        /// <param name="partition"></param>
        /// <returns></returns>
        static public Study Find(IPersistenceContext context, String studyInstanceUid, ServerPartition partition)
        {
            var broker   = context.GetBroker <IStudyEntityBroker>();
            var criteria = new StudySelectCriteria();

            criteria.ServerPartitionKey.EqualTo(partition.GetKey());
            criteria.StudyInstanceUid.EqualTo(studyInstanceUid);
            Study study = broker.FindOne(criteria);

            return(study);
        }
Пример #10
0
        private void LoadStudyPartition(string studyInstanceUid)
        {
            using (IReadContext read = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
            {
                IStudyEntityBroker selectStudy = read.GetBroker <IStudyEntityBroker>();

                StudySelectCriteria criteria = new StudySelectCriteria();
                criteria.StudyInstanceUid.EqualTo(studyInstanceUid);
                Study theStudy = selectStudy.FindOne(criteria);

                Partition = ServerPartition.Load(read, theStudy.ServerPartitionKey);
            }
        }
Пример #11
0
        public int SelectCount()
        {
            if (Partition == null)
            {
                return(0);
            }

            StudySelectCriteria criteria = GetSelectCriteria();

            ResultCount = _searchController.GetStudyCount(criteria);

            return(ResultCount);
        }
Пример #12
0
        private void LoadSeriesDetails()
        {

            if (!String.IsNullOrEmpty(_serverae) && !String.IsNullOrEmpty(_studyInstanceUid) && !String.IsNullOrEmpty(_seriesInstanceUid))
            {
                StudyAdaptor studyAdaptor = new StudyAdaptor();
                SeriesSearchAdaptor seriesAdaptor = new SeriesSearchAdaptor();
                        
                ServerPartitionDataAdapter adaptor = new ServerPartitionDataAdapter();
                ServerPartitionSelectCriteria criteria = new ServerPartitionSelectCriteria();
                criteria.AeTitle.EqualTo(_serverae);

                Model.ServerPartition partition = adaptor.GetFirst(criteria);
                if (partition != null)
                {
                    Partition = partition;

                    StudySelectCriteria studyCriteria = new StudySelectCriteria();
                    studyCriteria.StudyInstanceUid.EqualTo(_studyInstanceUid);
                    studyCriteria.ServerPartitionKey.EqualTo(Partition.GetKey());
                    Model.Study study = studyAdaptor.GetFirst(studyCriteria);

                    if (study != null)
                    {
                        // there should be only one study
                        _study = study;

                        SeriesSelectCriteria seriesCriteria = new SeriesSelectCriteria();
                        seriesCriteria.SeriesInstanceUid.EqualTo(_seriesInstanceUid);
                        Series series = seriesAdaptor.GetFirst(seriesCriteria);

                        if (series != null)
                        {
                            _series = series;
                        }
                    }

                }
            }

            if (_study!=null && _series != null)
            {
                SeriesDetailsPanel1.Study = _study;
                SeriesDetailsPanel1.Series = _series;
            }

            DataBind();
        }
Пример #13
0
        private void Reload()
        {
            using (var ctx = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
            {
                var broker   = ctx.GetBroker <IStudyEntityBroker>();
                var criteria = new StudySelectCriteria();
                criteria.AccessionNumber.Like("%" + _accessionTextBox.Text + "%");
                var studies = broker.Find(criteria);

                _studyList.Clear();
                foreach (var item in studies)
                {
                    _studyList.Add(new StudyItem(item));
                }
            }
        }
Пример #14
0
        protected override void OnInit(EventArgs e)
        {
            //This sets the GridView Page Size to the number of series. Needs to be done in the OnInit method,
            //since the page size needs to be set here, and the Study and Partition aren't set until the databind
            //happens in StudyDetailsTabs.

            var studyInstanceUID = Request.QueryString[ImageServerConstants.QueryStrings.StudyInstanceUID];
            var serverAE         = Request.QueryString[ImageServerConstants.QueryStrings.ServerAE];

            if (!String.IsNullOrEmpty(studyInstanceUID) && !String.IsNullOrEmpty(serverAE))
            {
                var adaptor           = new ServerPartitionDataAdapter();
                var partitionCriteria = new ServerPartitionSelectCriteria();
                partitionCriteria.AeTitle.EqualTo(serverAE);
                IList <ServerPartition> partitions = adaptor.Get(partitionCriteria);
                if (partitions != null && partitions.Count > 0)
                {
                    if (partitions.Count == 1)
                    {
                        var partition = partitions[0];

                        var studyAdaptor  = new StudyAdaptor();
                        var studyCriteria = new StudySelectCriteria();
                        studyCriteria.StudyInstanceUid.EqualTo(studyInstanceUID);
                        studyCriteria.ServerPartitionKey.EqualTo(partition.GetKey());
                        var study = studyAdaptor.GetFirst(studyCriteria);

                        if (study != null)
                        {
                            var seriesAdaptor = new SeriesSearchAdaptor();
                            var criteria      = new SeriesSelectCriteria();
                            criteria.StudyKey.EqualTo(study.GetKey());
                            criteria.ServerPartitionKey.EqualTo(partition.GetKey());

                            Series = seriesAdaptor.Get(criteria);

                            GridView1.PageSize = Series.Count;
                        }
                    }
                }
            }
            else
            {
                GridView1.PageSize = 150;   //Set it to a large number to ensure that all series are displayed if more than 25.
            }
        }
Пример #15
0
        /// <summary>
        /// Constructs an instance of <see cref="WorkQueue"/> based on a <see cref="WorkQueueSummary"/> object.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        /// <remark>
        ///
        /// </remark>
        private RestoreQueueSummary CreateWorkQueueSummary(RestoreQueue item)
        {
            RestoreQueueSummary summary = new RestoreQueueSummary();

            summary.TheRestoreQueueItem = item;
            summary.ThePartition        = Partition;

            if (item.FailureDescription == null)
            {
                summary.Notes = String.Empty;
            }
            else
            {
                summary.Notes = item.FailureDescription;
            }

            // Fetch the patient info:
            StudyStorageAdaptor ssAdaptor = new StudyStorageAdaptor();

            summary.StudyStorage = ssAdaptor.Get(item.StudyStorageKey);
            if (summary.StudyStorage == null)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
                return(summary);
            }
            StudyAdaptor        studyAdaptor  = new StudyAdaptor();
            StudySelectCriteria studycriteria = new StudySelectCriteria();

            studycriteria.StudyInstanceUid.EqualTo(summary.StudyStorage.StudyInstanceUid);
            studycriteria.ServerPartitionKey.EqualTo(summary.StudyStorage.ServerPartitionKey);
            IList <Study> studyList = studyAdaptor.Get(studycriteria);

            if (studyList == null || studyList.Count == 0)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
            }
            else
            {
                summary.PatientId    = studyList[0].PatientId;
                summary.PatientsName = studyList[0].PatientsName;
            }

            return(summary);
        }
Пример #16
0
        /// <summary>
        /// Constructs an instance of <see cref="WorkQueueSummary"/> based on a <see cref="WorkQueue"/> object.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        /// <remark>
        ///
        /// </remark>
        private ArchiveQueueSummary CreateWorkQueueSummary(ArchiveQueue item)
        {
            ArchiveQueueSummary summary = new ArchiveQueueSummary();

            summary.TheArchiveQueueItem = item;
            summary.ThePartition        = Partition;

            if (item.FailureDescription == null)
            {
                summary.Notes = String.Empty;
            }
            else
            {
                summary.Notes = item.FailureDescription;
            }

            // Fetch the patient info:
            StudyStorageAdaptor ssAdaptor = new StudyStorageAdaptor();

            summary.StudyStorage = ssAdaptor.Get(item.StudyStorageKey);
            if (summary.StudyStorage == null)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
                return(summary);
            }
            StudyAdaptor        studyAdaptor  = new StudyAdaptor();
            StudySelectCriteria studycriteria = new StudySelectCriteria();

            studycriteria.StudyInstanceUid.EqualTo(summary.StudyStorage.StudyInstanceUid);
            studycriteria.ServerPartitionKey.EqualTo(summary.StudyStorage.ServerPartitionKey);
            Study theStudy = studyAdaptor.GetFirst(studycriteria);

            if (theStudy == null)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
            }
            else
            {
                summary.PatientId    = theStudy.PatientId;
                summary.PatientsName = theStudy.PatientsName;
            }

            return(summary);
        }
Пример #17
0
        /// <summary>
        /// Create a list of SOP Instances to move based on a Patient level C-MOVE-RQ.
        /// </summary>
        /// <param name="read"></param>
        /// <param name="msg"></param>
        /// <param name="errorComment"> </param>
        /// <returns></returns>
        private bool GetSopListForPatient(IPersistenceContext read, DicomMessageBase msg, out string errorComment)
        {
            errorComment = string.Empty;
            string patientId = msg.DataSet[DicomTags.PatientId].GetString(0, "");

            var select = read.GetBroker <IStudyEntityBroker>();

            var criteria = new StudySelectCriteria();

            criteria.PatientId.EqualTo(patientId);
            criteria.ServerPartitionKey.EqualTo(Partition.Key);

            IList <Study> studyList = select.Find(criteria);

            bool bOfflineFound = false;

            foreach (Study study in studyList)
            {
                StudyStorageLocation location;

                try
                {
                    FilesystemMonitor.Instance.GetReadableStudyStorageLocation(Partition.Key, study.StudyInstanceUid,
                                                                               StudyRestore.True, StudyCache.True, out location);
                }
                catch (StudyIsNearlineException e)
                {
                    errorComment = string.Format(e.RestoreRequested ? "Study is nearline, inserted restore request: {0}" : "Study is nearline: {0}", study.StudyInstanceUid);

                    bOfflineFound = true;
                    continue;
                }
                catch (Exception e)
                {
                    errorComment  = string.Format("Exception occurred when determining study location: {0}", e.Message);
                    bOfflineFound = true;
                    continue;
                }

                StudyXml theStream = LoadStudyXml(location);

                _theScu.LoadStudyFromStudyXml(location.GetStudyPath(), theStream);
            }

            return(!bOfflineFound);
        }
Пример #18
0
        protected Study LoadStudy(string studyInstanceUID)
        {
            if (String.IsNullOrEmpty(studyInstanceUID))
            {
                return(null);
            }

            if (_partition == null)
            {
                return(null);
            }

            StudyAdaptor        studyAdaptor = new StudyAdaptor();
            StudySelectCriteria criteria     = new StudySelectCriteria();

            criteria.StudyInstanceUid.EqualTo(studyInstanceUID);
            criteria.ServerPartitionKey.EqualTo(Partition.Key);
            return(studyAdaptor.GetFirst(criteria));
        }
Пример #19
0
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            StudyController studyController = new StudyController();
            ServerPartitionConfigController partitionConfigController = new ServerPartitionConfigController();

            string serverae = Request.QueryString[QUERY_KEY_SERVER_AE];

            if (!String.IsNullOrEmpty(serverae))
            {
                // Load the Partition
                ServerPartitionSelectCriteria partitionCriteria = new ServerPartitionSelectCriteria();
                partitionCriteria.AeTitle.EqualTo(serverae);
                IList <ServerPartition> list = partitionConfigController.GetPartitions(partitionCriteria);
                this.Move.Partition = list[0];

                for (int i = 1;; i++)
                {
                    string studyuid = Request.QueryString[String.Format("{0}{1}", QUERY_KEY_STUDY_INSTANCE_UID, i)];

                    if (!String.IsNullOrEmpty(studyuid))
                    {
                        _uids.Add(studyuid, serverae);

                        StudySelectCriteria studyCriteria = new StudySelectCriteria();
                        studyCriteria.StudyInstanceUid.EqualTo(studyuid);
                        studyCriteria.ServerPartitionKey.EqualTo(list[0].GetKey());

                        IList <Study> studyList = studyController.GetStudies(studyCriteria);

                        this.Move.StudyGridView.StudyList.Add(studyList[0]);
                        this.Move.StudyGridView.Partition = this.Move.Partition;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            SetPageTitle(Titles.MoveStudiesPageTitle);
        }
Пример #20
0
        /// <summary>
        /// Create a list of DICOM SOP Instances to move based on a Series level C-MOVE-RQ
        /// </summary>
        /// <param name="persistenceContext"></param>
        /// <param name="msg"></param>
        /// <param name="errorComment"> </param>
        /// <returns></returns>
        private bool GetSopListForSeries(IPersistenceContext persistenceContext, DicomMessageBase msg, out string errorComment)
        {
            errorComment = string.Empty;
            string studyInstanceUid = msg.DataSet[DicomTags.StudyInstanceUid].GetString(0, "");
            var    seriesList       = (string[])msg.DataSet[DicomTags.SeriesInstanceUid].Values;

            // Now get the storage location
            StudyStorageLocation location;

            try
            {
                FilesystemMonitor.Instance.GetReadableStudyStorageLocation(Partition.Key, studyInstanceUid, StudyRestore.True,
                                                                           StudyCache.True, out location);
            }
            catch (StudyIsNearlineException e)
            {
                errorComment = string.Format(e.RestoreRequested ? "Study is nearline, inserted restore request: {0}" : "Study is nearline: {0}", studyInstanceUid);
                return(false);
            }
            catch (Exception e)
            {
                errorComment = string.Format("Exception occurred when determining study location: {0}", e.Message);
                return(false);
            }

            var select = persistenceContext.GetBroker <IStudyEntityBroker>();

            var criteria = new StudySelectCriteria();

            criteria.StudyInstanceUid.EqualTo(studyInstanceUid);
            criteria.ServerPartitionKey.EqualTo(Partition.Key);

            Study    study       = select.FindOne(criteria);
            StudyXml studyStream = LoadStudyXml(location);

            foreach (string seriesInstanceUid in seriesList)
            {
                _theScu.LoadSeriesFromSeriesXml(studyStream, Path.Combine(location.GetStudyPath(), seriesInstanceUid), studyStream[seriesInstanceUid], study.PatientsName, study.PatientId);
            }

            return(true);
        }
Пример #21
0
        private Study GetStudyAndQueues(StudyStorageLocation location, out int integrityQueueCount, out int workQueueCount)
        {
            using (IReadContext context = _store.OpenReadContext())
            {
                IStudyIntegrityQueueEntityBroker  integrityBroker   = context.GetBroker <IStudyIntegrityQueueEntityBroker>();
                StudyIntegrityQueueSelectCriteria integrityCriteria = new StudyIntegrityQueueSelectCriteria();
                integrityCriteria.StudyStorageKey.EqualTo(location.Key);
                integrityQueueCount = integrityBroker.Count(integrityCriteria);

                IWorkQueueEntityBroker  workBroker   = context.GetBroker <IWorkQueueEntityBroker>();
                WorkQueueSelectCriteria workCriteria = new WorkQueueSelectCriteria();
                workCriteria.StudyStorageKey.EqualTo(location.Key);
                workQueueCount = workBroker.Count(workCriteria);

                IStudyEntityBroker  procedure = context.GetBroker <IStudyEntityBroker>();
                StudySelectCriteria criteria  = new StudySelectCriteria();
                criteria.StudyStorageKey.EqualTo(location.Key);
                return(procedure.FindOne(criteria));
            }
        }
Пример #22
0
        public bool DeleteOrderItem(ServerEntityKey partitionKey, ServerEntityKey orderKey)
        {
            using (IUpdateContext updateContext = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                // Disconnect studies from order
                var studyBroker = updateContext.GetBroker <IStudyEntityBroker>();

                var criteria = new StudySelectCriteria();
                criteria.OrderKey.EqualTo(orderKey);
                criteria.ServerPartitionKey.EqualTo(partitionKey);

                var updateColumns = new StudyUpdateColumns
                {
                    OrderKey = null
                };
                studyBroker.Update(criteria, updateColumns);

                bool retValue = _adaptor.Delete(updateContext, orderKey);

                updateContext.Commit();

                return(retValue);
            }
        }
Пример #23
0
        /// <summary>
        /// Method for processing Study level queries.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="del"></param>
        /// <returns></returns>
        public override void Query(DicomAttributeCollection message, ServerQueryResultDelegate del)
        {
            var tagList = new List <uint>();

            using (IReadContext read = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
            {
                var find = read.GetBroker <IStudyEntityBroker>();

                //TODO (CR May 2010): Should change so that the Partition AE Title is passed in the RetrieveAeTitle tag in the query message.

                var criteria = new StudySelectCriteria();
                if (Partition != null)
                {
                    criteria.ServerPartitionKey.EqualTo(Partition.Key);
                }

                if (!Thread.CurrentPrincipal.IsInRole(Macro.Enterprise.Common.AuthorityTokens.DataAccess.AllStudies))
                {
                    var principal = Thread.CurrentPrincipal as CustomPrincipal;
                    if (principal != null)
                    {
                        var oidList = new List <ServerEntityKey>();
                        foreach (var oid in principal.Credentials.DataAccessAuthorityGroups)
                        {
                            oidList.Add(new ServerEntityKey("OID", oid));
                        }
                        var dataAccessGroupSelectCriteria = new DataAccessGroupSelectCriteria();
                        dataAccessGroupSelectCriteria.AuthorityGroupOID.In(oidList);
                        IList <DataAccessGroup> groups;
                        using (IReadContext context = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
                        {
                            var broker = context.GetBroker <IDataAccessGroupEntityBroker>();
                            groups = broker.Find(dataAccessGroupSelectCriteria);
                        }

                        var entityList = new List <ServerEntityKey>();
                        foreach (DataAccessGroup group in groups)
                        {
                            entityList.Add(group.Key);
                        }

                        var dataAccessSelectCriteria = new StudyDataAccessSelectCriteria();
                        dataAccessSelectCriteria.DataAccessGroupKey.In(entityList);

                        criteria.StudyDataAccessRelatedEntityCondition.Exists(dataAccessSelectCriteria);
                    }
                }



                DicomAttributeCollection data = message;
                foreach (DicomAttribute attrib in message)
                {
                    tagList.Add(attrib.Tag.TagValue);
                    if (!attrib.IsNull)
                    {
                        switch (attrib.Tag.TagValue)
                        {
                        case DicomTags.StudyInstanceUid:
                            QueryHelper.SetStringArrayCondition(criteria.StudyInstanceUid,
                                                                (string[])data[DicomTags.StudyInstanceUid].Values);
                            break;

                        case DicomTags.PatientsName:
                            QueryHelper.SetStringCondition(criteria.PatientsName,
                                                           data[DicomTags.PatientsName].GetString(0, string.Empty));
                            break;

                        case DicomTags.PatientId:
                            QueryHelper.SetStringCondition(criteria.PatientId,
                                                           data[DicomTags.PatientId].GetString(0, string.Empty));
                            break;

                        case DicomTags.PatientsBirthDate:
                            QueryHelper.SetRangeCondition(criteria.PatientsBirthDate,
                                                          data[DicomTags.PatientsBirthDate].GetString(0, string.Empty));
                            break;

                        case DicomTags.PatientsSex:
                            QueryHelper.SetStringCondition(criteria.PatientsSex,
                                                           data[DicomTags.PatientsSex].GetString(0, string.Empty));
                            break;

                        case DicomTags.StudyDate:
                            QueryHelper.SetRangeCondition(criteria.StudyDate,
                                                          data[DicomTags.StudyDate].GetString(0, string.Empty));
                            break;

                        case DicomTags.StudyTime:
                            QueryHelper.SetRangeCondition(criteria.StudyTime,
                                                          data[DicomTags.StudyTime].GetString(0, string.Empty));
                            break;

                        case DicomTags.AccessionNumber:
                            QueryHelper.SetStringCondition(criteria.AccessionNumber,
                                                           data[DicomTags.AccessionNumber].GetString(0, string.Empty));
                            break;

                        case DicomTags.StudyId:
                            QueryHelper.SetStringCondition(criteria.StudyId, data[DicomTags.StudyId].GetString(0, string.Empty));
                            break;

                        case DicomTags.StudyDescription:
                            QueryHelper.SetStringCondition(criteria.StudyDescription,
                                                           data[DicomTags.StudyDescription].GetString(0, string.Empty));
                            break;

                        case DicomTags.ReferringPhysiciansName:
                            QueryHelper.SetStringCondition(criteria.ReferringPhysiciansName,
                                                           data[DicomTags.ReferringPhysiciansName].GetString(0, string.Empty));
                            break;

                        case DicomTags.ModalitiesInStudy:
                            // Specify a subselect on Modality in series
                            var seriesSelect = new SeriesSelectCriteria();
                            QueryHelper.SetStringArrayCondition(seriesSelect.Modality,
                                                                (string[])data[DicomTags.ModalitiesInStudy].Values);
                            criteria.SeriesRelatedEntityCondition.Exists(seriesSelect);
                            break;
                        }
                    }
                }

                // Open another read context, in case additional queries are required.
                using (IReadContext subRead = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
                {
                    // First find the Online studies
                    var storageCriteria = new StudyStorageSelectCriteria();
                    storageCriteria.StudyStatusEnum.NotEqualTo(StudyStatusEnum.Nearline);
                    storageCriteria.QueueStudyStateEnum.NotIn(new[]
                    {
                        QueueStudyStateEnum.DeleteScheduled,
                        QueueStudyStateEnum.WebDeleteScheduled,
                        QueueStudyStateEnum.EditScheduled
                    });
                    criteria.StudyStorageRelatedEntityCondition.Exists(storageCriteria);

                    find.Find(criteria, delegate(Study row)
                    {
                        var response = new DicomMessage();

                        //TODO (CR May 2010): should the availability be NEARLINE?  The criteria above was for ONLINE studies.
                        PopulateStudy(subRead, response, tagList, row, "NEARLINE");
                        del(response.DataSet);
                    });

                    // Now find the Nearline studies
                    storageCriteria = new StudyStorageSelectCriteria();
                    storageCriteria.StudyStatusEnum.EqualTo(StudyStatusEnum.Nearline);
                    storageCriteria.QueueStudyStateEnum.NotIn(new[]
                    {
                        QueueStudyStateEnum.DeleteScheduled,
                        QueueStudyStateEnum.WebDeleteScheduled,
                        QueueStudyStateEnum.EditScheduled
                    });
                    criteria.StudyStorageRelatedEntityCondition.Exists(storageCriteria);

                    find.Find(criteria, delegate(Study row)
                    {
                        var response = new DicomMessage();
                        PopulateStudy(subRead, response, tagList, row, "NEARLINE");
                        del(response.DataSet);
                    });
                }
            }

            return;
        }
Пример #24
0
        protected void Page_Load(object sender, EventArgs e)
        {
            UserID              = Request.Params[ImageServerConstants.WebViewerQueryStrings.Username];
            Password            = Request.Params[ImageServerConstants.WebViewerQueryStrings.Password];
            AppName             = Request.Params[ImageServerConstants.WebViewerQueryStrings.ApplicationName];
            ListStudies         = Request.Params[ImageServerConstants.WebViewerQueryStrings.ListStudies];
            WebViewerInitString = Request.Params[ImageServerConstants.WebViewerQueryStrings.WebViewerInitParams];

            //Try to authenticate the user
            if (!string.IsNullOrEmpty(UserID) && !string.IsNullOrEmpty(Password))
            {
                if (String.IsNullOrEmpty(AppName))
                {
                    int start = WebViewerInitString.IndexOf(ImageServerConstants.WebViewerQueryStrings.ApplicationName + "=");

                    if (start < 0)
                    {
                        AppName = ImageServerConstants.DefaultApplicationName;
                    }
                    else
                    {
                        start  += (ImageServerConstants.WebViewerQueryStrings.ApplicationName + "=").Length;
                        AppName = WebViewerInitString.Substring(start);
                        int end = AppName.IndexOf(',');
                        AppName = AppName.Substring(0, end);
                        if (string.IsNullOrEmpty(AppName))
                        {
                            AppName = ImageServerConstants.DefaultApplicationName;
                        }
                    }
                }

                AppName = String.Format("{0}@{1}", AppName, HttpContext.Current.Request.UserHostName);

                try
                {
                    using (LoginService service = new LoginService())
                    {
                        SessionInfo session = service.Login(UserID, Password, AppName);
                        Platform.Log(LogLevel.Info, "[{0}]: {1} has successfully logged in.", AppName, UserID);

                        WebViewerInitString += string.Format(",{0}={1},{2}={3}",
                                                             ImageServerConstants.WebViewerQueryStrings.Username, UserID,
                                                             ImageServerConstants.WebViewerQueryStrings.Session,
                                                             session.Credentials.SessionToken.Id);

                        //_sessionId = session.Credentials.SessionToken.Id;

                        //Add the session information to the context in case we redirect to the studies page.
                        //We need these to properly launch the WebViewer
                        Context.Items.Add(ImageServerConstants.WebViewerQueryStrings.Username, UserID);
                        Context.Items.Add(ImageServerConstants.WebViewerQueryStrings.Session, session.Credentials.SessionToken.Id);
                        Context.Items.Add("Authorized", false);

                        foreach (string role in session.Credentials.Authorities)
                        {
                            if (role.Equals(Macro.ImageServer.Enterprise.Authentication.AuthorityTokens.Study.ViewImages))
                            {
                                Context.Items["Authorized"] = "true";
                                break;
                            }
                        }
                    }
                }
                catch (PasswordExpiredException)
                {
                    Platform.Log(LogLevel.Info, "[{0}]: {1} encountered PasswordExpiredException.", AppName, UserID);
                    Server.Transfer(ImageServerConstants.PageURLs.WebViewerAuthorizationErrorPage, true);
                }
                catch (UserAccessDeniedException)
                {
                    Platform.Log(LogLevel.Info, "[{0}]: {1} encountered UserAccessDeniedException.", AppName, UserID);
                    Server.Transfer(ImageServerConstants.PageURLs.WebViewerAuthorizationErrorPage, true);
                }
                catch (Exception ex)
                {
                    Platform.Log(LogLevel.Info, "[{0}]: {1} encountered exception {2} - {3}.", AppName, UserID, ex.GetType(), ex.Message);
                    Server.Transfer(ImageServerConstants.PageURLs.WebViewerAuthorizationErrorPage, true);
                }

                if (!string.IsNullOrEmpty(ListStudies) && ListStudies.Equals("true"))
                {
                    //Extract the WebViewer Init Parameters to determine whether or not we need
                    //to redirect to the Studies page.
                    var      initParams = new WebViewerInitParams();
                    string[] vals       = HttpUtility.UrlDecode(WebViewerInitString).Split(new[] { '?', ';', '=', ',', '&' });
                    for (int i = 0; i < vals.Length - 1; i++)
                    {
                        if (String.IsNullOrEmpty(vals[i]))
                        {
                            continue;
                        }

                        if (vals[i].Equals(ImageServerConstants.WebViewerStartupParameters.Study))
                        {
                            i++;
                            initParams.StudyInstanceUids.Add(vals[i]);
                        }
                        else if (vals[i].Equals(ImageServerConstants.WebViewerStartupParameters.PatientID))
                        {
                            i++;
                            initParams.PatientIds.Add(vals[i]);
                        }
                        else if (vals[i].Equals(ImageServerConstants.WebViewerStartupParameters.AeTitle))
                        {
                            i++;
                            initParams.AeTitle = vals[i];
                        }
                        else if (vals[i].Equals(ImageServerConstants.WebViewerStartupParameters.AccessionNumber))
                        {
                            i++;
                            initParams.AccessionNumbers.Add(vals[i]);
                        }
                    }

                    //Check if there are multiple studies to be displayed.
                    var controller        = new StudyController();
                    var partitionAdapter  = new ServerPartitionDataAdapter();
                    var partitionCriteria = new ServerPartitionSelectCriteria();
                    StudySelectCriteria studyCriteria;
                    ServerPartition     partition = null;
                    int studyCount = 0;

                    if (!string.IsNullOrEmpty(initParams.AeTitle))
                    {
                        partitionCriteria.AeTitle.EqualTo(initParams.AeTitle);
                        IList <ServerPartition> partitions = partitionAdapter.GetServerPartitions(partitionCriteria);

                        //TODO: What if the AE Title is invalid?

                        if (partitions.Count == 1)
                        {
                            partition = partitions[0];
                        }
                    }

                    //TODO: The logic below is very weird.

                    foreach (string patientId in initParams.PatientIds)
                    {
                        studyCriteria = new StudySelectCriteria();
                        if (partition != null)
                        {
                            studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                        }
                        SetStringCondition(studyCriteria.PatientId, patientId);
                        studyCount += controller.GetStudyCount(studyCriteria);
                    }

                    if (studyCount < 2)
                    {
                        foreach (string accession in initParams.AccessionNumbers)
                        {
                            studyCriteria = new StudySelectCriteria();
                            if (partition != null)
                            {
                                studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                            }
                            SetStringCondition(studyCriteria.AccessionNumber, accession);

                            // TODO: studyCount is either 0 or 1  entering this block. If the same study is found, studyCount is incremented to 2, which is wrong
                            studyCount += controller.GetStudyCount(studyCriteria);
                        }
                    }

                    if (studyCount < 2 && initParams.StudyInstanceUids.Count > 0)
                    {
                        studyCriteria = new StudySelectCriteria();
                        if (partition != null)
                        {
                            studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                        }
                        studyCriteria.StudyInstanceUid.In(initParams.StudyInstanceUids);

                        // TODO: studyCount is either 0 or 1 entering this block. If the same study is found, studyCount is incremented to 2, which is wrong
                        studyCount += controller.GetStudyCount(studyCriteria);
                    }

                    if (studyCount > 1)
                    {
                        Server.Transfer(ImageServerConstants.PageURLs.WebViewerStudiesPage, true);
                    }
                }


                if (string.IsNullOrEmpty(WebViewerInitString))
                {
                    Response.Redirect(ImageServerConstants.PageURLs.WebViewerDefaultPage, true);
                }
                else
                {
                    Response.Redirect(ImageServerConstants.PageURLs.WebViewerDefaultPage + "?" + ImageServerConstants.WebViewerQueryStrings.WebViewerInitParams + "=" + WebViewerInitString, true);
                }
            }
            else
            {
                Server.Transfer(ImageServerConstants.PageURLs.WebViewerAuthorizationErrorPage, true);
            }
        }
Пример #25
0
        /// <summary>
        /// Do the insertion of the AutoRoute.
        /// </summary>
        protected override void OnExecute(CommandProcessor theProcessor, IUpdateContext updateContext)
        {
            var deviceSelectCriteria = new DeviceSelectCriteria();

            deviceSelectCriteria.AeTitle.EqualTo(_deviceAe);
            deviceSelectCriteria.ServerPartitionKey.EqualTo(_context.ServerPartitionKey);

            var selectDevice = updateContext.GetBroker <IDeviceEntityBroker>();

            var dev = selectDevice.FindOne(deviceSelectCriteria);

            if (dev == null)
            {
                Platform.Log(LogLevel.Warn,
                             "Device '{0}' on partition {1} not in database for autoroute request!  Ignoring request.", _deviceAe,
                             _context.ServerPartition.AeTitle);

                ServerPlatform.Alert(
                    AlertCategory.Application, AlertLevel.Warning,
                    SR.AlertComponentAutorouteRule, AlertTypeCodes.UnableToProcess, null, TimeSpan.FromMinutes(5),
                    SR.AlertAutoRouteUnknownDestination, _deviceAe, _context.ServerPartition.AeTitle);

                return;
            }

            if (!dev.AllowAutoRoute)
            {
                Platform.Log(LogLevel.Warn,
                             "Study Auto-route attempted to device {0} on partition {1} with autoroute support disabled.  Ignoring request.",
                             dev.AeTitle, _context.ServerPartition.AeTitle);

                ServerPlatform.Alert(AlertCategory.Application, AlertLevel.Warning, SR.AlertComponentAutorouteRule,
                                     AlertTypeCodes.UnableToProcess, null, TimeSpan.FromMinutes(5),
                                     SR.AlertAutoRouteDestinationAEDisabled, dev.AeTitle, _context.ServerPartition.AeTitle);

                return;
            }

            if (_qcStatus != null)
            {
                var studyBroker = updateContext.GetBroker <IStudyEntityBroker>();
                var studySelect = new StudySelectCriteria();
                studySelect.StudyStorageKey.EqualTo(_context.StudyLocationKey);
                studySelect.ServerPartitionKey.EqualTo(_context.ServerPartitionKey);
                var study = studyBroker.FindOne(studySelect);
                if (!study.QCStatusEnum.Equals(_qcStatus))
                {
                    Platform.Log(LogLevel.Debug,
                                 "Ignoring Auto-route where the QCStatusEnum status must be {0}, but database has {1} for study {2}",
                                 _qcStatus.Description, study.QCStatusEnum.Description, study.StudyInstanceUid);
                    return;
                }
            }

            var parms = new InsertWorkQueueParameters
            {
                WorkQueueTypeEnum = WorkQueueTypeEnum.StudyAutoRoute,
                ScheduledTime     = _scheduledTime.HasValue
                                                                        ? _scheduledTime.Value
                                                                        : Platform.Time.AddSeconds(30),
                StudyStorageKey    = _context.StudyLocationKey,
                ServerPartitionKey = _context.ServerPartitionKey,
                DeviceKey          = dev.GetKey()
            };
            var broker = updateContext.GetBroker <IInsertWorkQueue>();

            if (broker.FindOne(parms) == null)
            {
                throw new ApplicationException("InsertWorkQueue for Study Auto-Route failed");
            }
        }
Пример #26
0
        private StudySelectCriteria GetSelectCriteria()
        {
            var criteria = new StudySelectCriteria();

            // only query for device in this partition
            criteria.ServerPartitionKey.EqualTo(Partition.Key);

            QueryHelper.SetGuiStringCondition(criteria.PatientId, PatientId);
            QueryHelper.SetGuiStringCondition(criteria.PatientsName, PatientName);

            criteria.PatientsName.SortAsc(0);

            QueryHelper.SetGuiStringCondition(criteria.AccessionNumber, AccessionNumber);

            if (!String.IsNullOrEmpty(ToStudyDate) && !String.IsNullOrEmpty(FromStudyDate))
            {
                string toKey   = DateTime.ParseExact(ToStudyDate, DateFormats, null).ToString(STUDYDATE_DATEFORMAT, CultureInfo.InvariantCulture) + " 23:59:59.997";
                string fromKey = DateTime.ParseExact(FromStudyDate, DateFormats, null).ToString(STUDYDATE_DATEFORMAT, CultureInfo.InvariantCulture);
                criteria.StudyDate.Between(fromKey, toKey);
            }
            else if (!String.IsNullOrEmpty(ToStudyDate))
            {
                string toKey = DateTime.ParseExact(ToStudyDate, DateFormats, null).ToString(STUDYDATE_DATEFORMAT, CultureInfo.InvariantCulture);
                criteria.StudyDate.LessThanOrEqualTo(toKey);
            }
            else if (!String.IsNullOrEmpty(FromStudyDate))
            {
                string fromKey = DateTime.ParseExact(FromStudyDate, DateFormats, null).ToString(STUDYDATE_DATEFORMAT, CultureInfo.InvariantCulture);
                criteria.StudyDate.MoreThanOrEqualTo(fromKey);
            }

            QueryHelper.SetGuiStringCondition(criteria.StudyDescription, StudyDescription);
            QueryHelper.SetGuiStringCondition(criteria.ReferringPhysiciansName, ReferringPhysiciansName);
            QueryHelper.SetGuiStringCondition(criteria.ResponsiblePerson, ResponsiblePerson);
            QueryHelper.SetGuiStringCondition(criteria.ResponsibleOrganization, ResponsibleOrganization);

            if (Modalities != null && Modalities.Length > 0)
            {
                var seriesCriteria = new SeriesSelectCriteria();

                QueryHelper.SetStringArrayCondition(seriesCriteria.Modality, Modalities);

                criteria.SeriesRelatedEntityCondition.Exists(seriesCriteria);
            }

            if (Statuses != null && Statuses.Length > 0)
            {
                var storageCriteria = new StudyStorageSelectCriteria();
                if (Statuses.Length == 1)
                {
                    storageCriteria.StudyStatusEnum.EqualTo(StudyStatusEnum.GetEnum(Statuses[0]));
                }
                else
                {
                    var statusList = new List <StudyStatusEnum>();
                    foreach (string status in Statuses)
                    {
                        statusList.Add(StudyStatusEnum.GetEnum(status));
                    }

                    storageCriteria.StudyStatusEnum.In(statusList);
                }

                criteria.StudyStorageRelatedEntityCondition.Exists(storageCriteria);
            }


            if (QCStatuses != null && QCStatuses.Length > 0)
            {
                criteria.QCStatusEnum.In(QCStatuses);
            }

            return(criteria);
        }
Пример #27
0
        private static IList <StudySummary> LoadStudies(WebViewerInitParams initParams)
        {
            ValidateParameters(initParams);

            var controller       = new StudyController();
            var partitionAdapter = new ServerPartitionDataAdapter();
            StudySelectCriteria studyCriteria;
            var                 partitionCriteria = new ServerPartitionSelectCriteria();
            ServerPartition     partition         = null;
            IList <Study>       studies;
            List <StudySummary> totalStudies = new List <StudySummary>();

            if (!string.IsNullOrEmpty(initParams.AeTitle))
            {
                partitionCriteria.AeTitle.EqualTo(initParams.AeTitle);
                IList <ServerPartition> partitions = partitionAdapter.GetServerPartitions(partitionCriteria);
                if (partitions.Count == 1)
                {
                    partition = partitions[0];
                }
            }

            foreach (string patientId in initParams.PatientIds)
            {
                studyCriteria = new StudySelectCriteria();
                if (partition != null)
                {
                    studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                }
                SetStringCondition(studyCriteria.PatientId, patientId);
                studyCriteria.StudyDate.SortDesc(0);
                studies = controller.GetStudies(studyCriteria);

                foreach (Study study in studies)
                {
                    totalStudies.Add(StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, study));
                }
            }

            foreach (string accession in initParams.AccessionNumbers)
            {
                studyCriteria = new StudySelectCriteria();
                if (partition != null)
                {
                    studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                }
                SetStringCondition(studyCriteria.AccessionNumber, accession);
                studyCriteria.StudyDate.SortDesc(0);
                studies = controller.GetStudies(studyCriteria);

                foreach (Study study in studies)
                {
                    totalStudies.Add(StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, study));
                }
            }

            if (initParams.StudyInstanceUids.Count > 0)
            {
                studyCriteria = new StudySelectCriteria();
                if (partition != null)
                {
                    studyCriteria.ServerPartitionKey.EqualTo(partition.Key);
                }
                studyCriteria.StudyInstanceUid.In(initParams.StudyInstanceUids);
                studyCriteria.StudyDate.SortDesc(0);
                studies = controller.GetStudies(studyCriteria);

                foreach (Study study in studies)
                {
                    totalStudies.Add(StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, study));
                }
            }

            totalStudies.Sort((a, b) => a.StudyDate.CompareTo(b.StudyDate) * -1);

            return(totalStudies);
        }
Пример #28
0
        /// <summary>
        /// Constructs an instance of <see cref="WorkQueueSummary"/> based on a <see cref="WorkQueue"/> object.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        /// <remark>
        ///
        /// </remark>
        private WorkQueueSummary CreateWorkQueueSummary(WorkQueue item)
        {
            WorkQueueSummary summary = new WorkQueueSummary
            {
                TheWorkQueueItem = item,
                ThePartition     = Partition
            };

            // Fetch the patient info:
            StudyStorageAdaptor ssAdaptor = new StudyStorageAdaptor();
            StudyStorage        storages  = ssAdaptor.Get(item.StudyStorageKey);

            if (storages == null)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
                return(summary);
            }
            StudyAdaptor        studyAdaptor  = new StudyAdaptor();
            StudySelectCriteria studycriteria = new StudySelectCriteria();

            studycriteria.StudyInstanceUid.EqualTo(storages.StudyInstanceUid);
            studycriteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);
            IList <Study> studyList = studyAdaptor.Get(studycriteria);

            if (studyList == null || studyList.Count == 0)
            {
                summary.PatientId    = "N/A";
                summary.PatientsName = "N/A";
            }
            else
            {
                summary.PatientId    = studyList[0].PatientId;
                summary.PatientsName = studyList[0].PatientsName;
            }

            if (item.WorkQueueTypeEnum == WorkQueueTypeEnum.WebMoveStudy ||
                item.WorkQueueTypeEnum == WorkQueueTypeEnum.AutoRoute)
            {
                DeviceDataAdapter deviceAdaptor = new DeviceDataAdapter();
                Device            dest          = deviceAdaptor.Get(item.DeviceKey);

                summary.Notes = String.Format("Destination AE : {0}", dest.AeTitle);

                if (item.FailureDescription != null)
                {
                    summary.FullDescription = String.Format("{0}, {1}", summary.Notes, item.FailureDescription);                       //Set the FullDescription for the Tooltip in the GUI
                    summary.Notes           = summary.FullDescription.Length > 60
                                                ? summary.FullDescription.Substring(0, 60)
                                                : summary.FullDescription;
                }
            }
            else if (item.FailureDescription != null)
            {
                // This used to only be shown when the status was "Failed" for a
                // queue entry.  We now show it any time there's
                if (item.FailureDescription.Length > 60)
                {
                    summary.Notes           = item.FailureDescription.Substring(0, 60);
                    summary.Notes          += " ...";
                    summary.FullDescription = item.FailureDescription;                  //Set the FullDescription for the Tooltip in the GUI
                }
                else
                {
                    summary.Notes = item.FailureDescription;
                }
            }

            summary.RequiresAttention = item.WorkQueueStatusEnum.Equals(WorkQueueStatusEnum.Failed) || !ServerPlatform.IsActiveWorkQueue(item);
            return(summary);
        }
        private static WorkQueueDetails CreateEditWorkQueueItemDetails(Model.WorkQueue item)
        {
            string studyPath;

            try
            {
                StudyStorageLocation storage = WorkQueueController.GetLoadStorageLocation(item);
                studyPath = storage.GetStudyPath();
            }
            catch (Exception)
            {
                studyPath = string.Empty;
            }
            var detail = new WorkQueueDetails
            {
                Key = item.Key,
                ScheduledDateTime = item.ScheduledTime,
                ExpirationTime    = item.ExpirationTime,
                InsertTime        = item.InsertTime,
                FailureCount      = item.FailureCount,
                Type                = item.WorkQueueTypeEnum,
                Status              = item.WorkQueueStatusEnum,
                Priority            = item.WorkQueuePriorityEnum,
                FailureDescription  = item.FailureDescription,
                ServerDescription   = item.ProcessorID,
                StorageLocationPath = studyPath
            };



            // Fetch UIDs
            var wqUidsAdaptor = new WorkQueueUidAdaptor();
            var uidCriteria   = new WorkQueueUidSelectCriteria();

            uidCriteria.WorkQueueKey.EqualTo(item.GetKey());
            IList <WorkQueueUid> uids = wqUidsAdaptor.Get(uidCriteria);

            var mapSeries = new Hashtable();

            foreach (WorkQueueUid uid in uids)
            {
                if (mapSeries.ContainsKey(uid.SeriesInstanceUid) == false)
                {
                    mapSeries.Add(uid.SeriesInstanceUid, uid.SopInstanceUid);
                }
            }

            detail.NumInstancesPending = uids.Count;
            detail.NumSeriesPending    = mapSeries.Count;


            // Fetch the study and patient info
            var          ssAdaptor = new StudyStorageAdaptor();
            StudyStorage storages  = ssAdaptor.Get(item.StudyStorageKey);

            var studyAdaptor  = new StudyAdaptor();
            var studycriteria = new StudySelectCriteria();

            studycriteria.StudyInstanceUid.EqualTo(storages.StudyInstanceUid);
            studycriteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);
            Study study = studyAdaptor.GetFirst(studycriteria);

            // Study may not be available until the images are processed.
            if (study != null)
            {
                var studyAssembler = new StudyDetailsAssembler();
                detail.Study = studyAssembler.CreateStudyDetail(study);
            }

            var parser = new EditStudyWorkQueueDataParser();
            EditStudyWorkQueueData data = parser.Parse(item.Data.DocumentElement);

            detail.EditUpdateItems = data.EditRequest.UpdateEntries.ToArray();

            return(detail);
        }
Пример #30
0
        protected void Page_Load(object sender, EventArgs e)
        {
            ServerPartitionConfigController partitionConfigController = new ServerPartitionConfigController();

            string serverae = Request.QueryString[ImageServerConstants.QueryStrings.ServerAE];

            if (!String.IsNullOrEmpty(serverae))
            {
                // Load the Partition
                ServerPartitionSelectCriteria partitionCriteria = new ServerPartitionSelectCriteria();
                partitionCriteria.AeTitle.EqualTo(serverae);
                IList <ServerPartition> list = partitionConfigController.GetPartitions(partitionCriteria);
                Partition = list[0];
                SeriesGridView.Partition = Partition;

                string studyuid = Request.QueryString[ImageServerConstants.QueryStrings.StudyUID];

                if (!String.IsNullOrEmpty(studyuid) || Partition != null)
                {
                    StudyController     studyController = new StudyController();
                    StudySelectCriteria criteria        = new StudySelectCriteria();
                    criteria.StudyInstanceUid.EqualTo(studyuid);
                    criteria.ServerPartitionKey.EqualTo(Partition.Key);

                    IList <Study> studyList = studyController.GetStudies(criteria);

                    SelectedStudy                 = studyList[0];
                    SeriesGridView.Study          = studyList[0];
                    PatientSummary.PatientSummary = PatientSummaryAssembler.CreatePatientSummary(studyList[0]);
                    StudySummary.Study            = studyList[0];
                }
            }

            if (DHCPFilter.Items.Count == 0)
            {
                DHCPFilter.Items.Add(new ListItem(SR.All));
                DHCPFilter.Items.Add(new ListItem(SR.DHCP));
                DHCPFilter.Items.Add(new ListItem(SR.NoDHCP));
            }

            IList <DeviceTypeEnum> deviceTypes = DeviceTypeEnum.GetAll();

            if (DeviceTypeFilter.Items.Count == 0)
            {
                foreach (DeviceTypeEnum t in deviceTypes)
                {
                    DeviceTypeFilter.Items.Add(new ListItem(ServerEnumDescription.GetLocalizedDescription(t), t.Lookup));
                }
            }
            else
            {
                ListItem[] typeItems = new ListItem[DeviceTypeFilter.Items.Count];
                DeviceTypeFilter.Items.CopyTo(typeItems, 0);
                DeviceTypeFilter.Items.Clear();
                int count = 0;
                foreach (DeviceTypeEnum t in deviceTypes)
                {
                    DeviceTypeFilter.Items.Add(new ListItem(ServerEnumDescription.GetLocalizedDescription(t), t.Lookup));
                    DeviceTypeFilter.Items[count].Selected = typeItems[count].Selected;
                    count++;
                }
            }

            LoadSeries();
            LoadDevices();

            DataBind();
        }