/// <summary> /// Creates an instance of <see cref="StudyDetails"/> base on a <see cref="Study"/> object. /// </summary> /// <param name="study"></param> /// <returns></returns> public StudyDetails CreateStudyDetail(Study study) { var details = new StudyDetails(); details.StudyInstanceUID = study.StudyInstanceUid; details.PatientName = study.PatientsName; details.AccessionNumber = study.AccessionNumber; details.PatientID = study.PatientId; details.StudyDescription = study.StudyDescription; details.StudyDate = study.StudyDate; details.StudyTime = study.StudyTime; var controller = new StudyController(); using (IReadContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenReadContext()) { details.Modalities = controller.GetModalitiesInStudy(ctx, study); } if (study.StudyInstanceUid != null) { StudyStorage storages = StudyStorage.Load(study.StudyStorageKey); if (storages != null) { details.WriteLock = storages.WriteLock; details.ReadLock = storages.ReadLock; details.Status = storages.StudyStatusEnum.ToString(); } } return details; }
public override void DataBind() { StudyStorageViewControl.DataSource = null; StudyController studyController = new StudyController(); StudyStorageViewControl.DataSource = studyController.GetStudyStorageLocation(_study); base.DataBind(); }
public override void DataBind() { StudyController studyController = new StudyController(); ArchiveQueueGridView.DataSource = studyController.GetArchiveQueueItems(_study); _storage = studyController.GetArchiveStudyStorage(_study); ArchiveStudyStorageGridView.DataSource = _storage; base.DataBind(); }
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); }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); foreach (GridViewRow row in SeriesListControl.Rows) { if (row.RowType == DataControlRowType.DataRow) { int index = SeriesListControl.PageIndex * SeriesListControl.PageSize + row.RowIndex; Series series = SeriesList[index]; if (series != null) { row.Attributes.Add("instanceuid", series.SeriesInstanceUid); row.Attributes.Add("serverae", Partition.AeTitle); StudyController controller = new StudyController(); row.Attributes.Add("deleted", "true"); } } } }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); foreach (GridViewRow row in StudyListControl.Rows) { if (row.RowType == DataControlRowType.DataRow) { int index = StudyListControl.PageIndex * StudyListControl.PageSize + row.RowIndex; Study study = StudyList[index]; if (study != null) { row.Attributes.Add("instanceuid", study.StudyInstanceUid); row.Attributes.Add("serverae", Partition.AeTitle); StudyController controller = new StudyController(); bool deleted = controller.IsScheduledForDelete(study); if (deleted) row.Attributes.Add("deleted", "true"); } } } }
public override void DataBind() { if (Study != null) { StudyController controller = new StudyController(); FSQueueGridView.DataSource = controller.GetFileSystemQueueItems(Study); } base.DataBind(); }
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(); }
protected override void OnInit(EventArgs e) { base.OnInit(e); // initialize the controller _theController = new DeviceConfigurationController(); // setup child controls GridPagerTop.InitializeGridPager(SR.GridPagerDeviceSingleItem, SR.GridPagerDeviceMultipleItems, DeviceGridPanel.TheGrid, delegate { return DeviceGridPanel.Devices.Count; }, ImageServerConstants.GridViewPagerPosition.Top); DeviceGridPanel.Pager = GridPagerTop; MoveConfirmation.Confirmed += delegate(object data) { MoveRequest moveData = MoveConfirmation.Data as MoveRequest; StudyController studyController = new StudyController(); foreach(Device device in moveData.DestinationDevices) { studyController.MoveStudy(moveData.SelectedStudy, device, moveData.Series); } }; }
private void ReprocessStudy() { try { StudyController controller = new StudyController(); controller.ReprocessStudy(SR.ReprocessStudyViaGUI, _study.TheStudyStorage.GetKey()); } catch (InvalidStudyStateOperationException ex) { ShowErrorMessage(ex.Message); } finally { Refresh(); } }
protected void DeleteSeriesButton_Clicked(object sender, ImageClickEventArgs e) { if (DeletingSeries==null || DeletingSeries.Count==0) return; Study study = DeletingSeries[0].Study; string serverPartitionAE = DeletingSeries[0].ServerPartitionAE; if (Page.IsValid) { try { var reason = ReasonListBox.SelectedItem.Text; if (!String.IsNullOrEmpty(SaveReasonAsName.Text)) { reason = SaveReasonAsName.Text; SaveCustomReason(); } OnDeletingSeries(); StudyController controller = new StudyController(); if(DeleteEntireStudy) { try { controller.DeleteStudy(DeletingSeries[0].StudyKey, reason + ImageServerConstants.ReasonCommentSeparator[0] + Comment.Text); } catch (Exception ex) { Platform.Log(LogLevel.Error, ex); StringBuilder log = new StringBuilder(); log.AppendLine(string.Format("Unable to delete all series in study {0} on partition {1}", study.StudyInstanceUid, serverPartitionAE)); log.AppendLine(ex.Message); Platform.Log(LogLevel.Error, log.ToString()); throw; } } else { try { IList<Series> series = new List<Series>(); foreach (DeleteSeriesInfo seriesInfo in DeletingSeries) { series.Add((seriesInfo.Series)); } controller.DeleteSeries(DeletingSeries[0].Study, series, reason + ImageServerConstants.ReasonCommentSeparator[0] + Comment.Text); } catch (Exception ex) { Platform.Log(LogLevel.Error, ex); StringBuilder log = new StringBuilder(); log.AppendLine(string.Format("Unable to delete the following series in study {0} on partition {1}", study.StudyInstanceUid, serverPartitionAE)); foreach (var series in DeletingSeries) { log.AppendLine(string.Format("\tSeries #{0} {1} {2}", series.SeriesNumber, series.Description, series.Modality)); } log.AppendLine(ex.Message); Platform.Log(LogLevel.Error, log.ToString()); throw; } } OnSeriesDeleted(study); } finally { Close(); } } else { EnsureDialogVisible(); } }
protected override void OnInit(EventArgs e) { base.OnInit(e); DeleteConfirmation.Confirmed += delegate { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "alertScript", "self.close();", true); DeleteRequest deleteRequest = DeleteConfirmation.Data as DeleteRequest; StudyController studyController = new StudyController(); studyController.DeleteSeries(deleteRequest.SelectedStudy, deleteRequest.Series, deleteRequest.Reason); }; DeleteSeriesButton.Roles = AuthorityTokens.Study.Delete; MoveSeriesButton.Roles = AuthorityTokens.Study.Move; UpdateAuthorityGroupDialog.AuthorityGroupsEdited += UpdateAuthorityGroupDialog_AuthorityGroupsEdited; //DataAccessTabPanel.Visible = Thread.CurrentPrincipal.IsInRole(ClearCanvas.Enterprise.Common.AuthorityTokens.Admin.Security.AuthorityGroup); DataAccessTabPanel.Enabled = Thread.CurrentPrincipal.IsInRole(ClearCanvas.ImageServer.Enterprise.Authentication.AuthorityTokens.Study.EditDataAccess); }
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(ClearCanvas.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); } }
protected void DeleteButton_Clicked(object sender, ImageClickEventArgs e) { if (Page.IsValid) { try { string reason = ReasonListBox.SelectedItem.Text; if (!String.IsNullOrEmpty(SaveReasonAsName.Text)) { SaveCustomReason(); reason = SaveReasonAsName.Text; } OnDeletingStudies(); StudyController controller = new StudyController(); foreach (DeleteStudyInfo study in DeletingStudies) { try { controller.DeleteStudy(study.StudyKey, reason + "::" + Comment.Text); // Audit log DicomStudyDeletedAuditHelper helper = new DicomStudyDeletedAuditHelper( ServerPlatform.AuditSource, EventIdentificationContentsEventOutcomeIndicator.Success); helper.AddUserParticipant(new AuditPersonActiveParticipant( SessionManager.Current.Credentials.UserName, null, SessionManager.Current.Credentials.DisplayName)); helper.AddStudyParticipantObject(new AuditStudyParticipantObject( study.StudyInstanceUid, study.AccessionNumber ?? string.Empty)); ServerPlatform.LogAuditMessage(helper); } catch (Exception ex) { Platform.Log(LogLevel.Error, ex, "DeleteClicked failed: Unable to delete studies"); throw; } } OnStudiesDeleted(); } finally { Close(); } } else { EnsureDialogVisible(); } }
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; }
/// <summary> /// Handles event when user clicks on "OK" button. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void OKButton_Click(object sender, EventArgs e) { if (Page.IsValid) { string reason = ReasonListBox.SelectedItem.Text; if (!String.IsNullOrEmpty(SaveReasonAsName.Text)) { SaveCustomReason(); reason = SaveReasonAsName.Text; } if (StudyEdited != null) { List<UpdateItem> modifiedFields = GetChanges(); if (modifiedFields!=null && modifiedFields.Count > 0) { var studyController = new StudyController(); studyController.EditStudy(Study, modifiedFields, reason + ImageServerConstants.ReasonCommentSeparator[0] + Comment.Text); AuditLog(Study, modifiedFields); StudyEdited(); } } Close(); } else { EnsureDialogVisible(); } }
protected override void OnInit(EventArgs e) { base.OnInit(e); // initialize the controller _theController = new DeviceConfigurationController(); // setup child controls GridPagerTop.InitializeGridPager(SR.GridPagerDeviceSingleItem, SR.GridPagerDeviceMultipleItems, DeviceGridPanel.TheGrid, delegate { return DeviceGridPanel.Devices.Count; }, ImageServerConstants.GridViewPagerPosition.Top); DeviceGridPanel.Pager = GridPagerTop; MoveConfirmation.Confirmed += delegate(object data) { IList<Device> devices = data as IList<Device>; StudyController studyController = new StudyController(); foreach (Study study in StudyGridView.StudyList) { foreach (Device device in devices) studyController.MoveStudy(study, device); } }; }
protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Get a count of the number of SIQ entries for the StudyStorageLocation. If there's // any, we don't enable the Delete button. var siqController = new StudyIntegrityQueueController(); var criteria = new StudyIntegrityQueueSelectCriteria(); criteria.StudyStorageKey.EqualTo(Study.TheStudyStorage.Key); int siqCount = siqController.GetReconcileQueueItemsCount(criteria); string reason; bool seriesDelete = Study.CanScheduleSeriesDelete(out reason); foreach(GridViewRow row in GridView1.Rows) { if (row.RowType == DataControlRowType.DataRow) { int index = GridView1.PageIndex * GridView1.PageSize + row.RowIndex; Series series = _series[index]; row.Attributes["serverae"] = _serverPartition.AeTitle; row.Attributes["studyuid"] = _study.StudyInstanceUid; row.Attributes["seriesuid"] = series.SeriesInstanceUid; var controller = new StudyController(); if (controller.CanManipulateSeries(Study.TheStudyStorage.Key)) { if (siqCount==0 && seriesDelete) row.Attributes.Add("candelete", "true"); row.Attributes.Add("canmove", "true"); } } } }