public void OnStudyEditing(WebEditStudyContext context)
 {
     Platform.Log(LogLevel.Info, "Updating OriginalAttributesSequence...");
     List<DicomAttribute> values = new List<DicomAttribute>();
     foreach (BaseImageLevelUpdateCommand c in context.EditCommands)
     {
         if (!(c is SetTagCommand)) { continue; }
         DicomAttribute value = c.UpdateEntry.TagPath.Tag.CreateDicomAttribute();
         value.SetStringValue(c.UpdateEntry.OriginalValue);
         values.Add(value);
     }
     int cut = context.Reason.IndexOf("::");            
     context.EditCommands.Insert(0,
         new AddOriginalAttributes(CreateOriginalAttributesSequence(values, null, null,
             context.Reason.Substring(0, cut > DicomVr.CSvr.MaximumLength || cut < 0 ? Math.Min((int)DicomVr.CSvr.MaximumLength, context.Reason.Length) : cut))));
 }
 public void OnStudyEdited(WebEditStudyContext context) { }
예제 #3
0
파일: StudyEditor.cs 프로젝트: nhannd/Xian
		/// <summary>
		/// Perform the edit.
		/// </summary>
		/// <param name="actionXml">A serialized XML representation of <see cref="SetTagCommand"/> objects</param>
		/// <returns></returns>
		public bool Edit(XmlElement actionXml)
		{
			Platform.Log(LogLevel.Info,
						 "Starting Edit of study {0} for Patient {1} (PatientId:{2} A#:{3}) on Partition {4}",
						 Study.StudyInstanceUid, Study.PatientsName, Study.PatientId,
						 Study.AccessionNumber, ServerPartition.Description);

			LoadExtensions();

            EditStudyWorkQueueDataParser parser = new EditStudyWorkQueueDataParser();
		    EditStudyWorkQueueData data = parser.Parse(actionXml);

			using (ServerCommandProcessor processor = new ServerCommandProcessor("Web Edit Study"))
			{
				// Convert UpdateItem in the request into BaseImageLevelUpdateCommand
				List<BaseImageLevelUpdateCommand> updateCommands = null;
				if (data != null)
				{
					updateCommands = CollectionUtils.Map<Edit.UpdateItem, BaseImageLevelUpdateCommand>(
						data.EditRequest.UpdateEntries,
						delegate(Edit.UpdateItem item)
							{
								// Note: For edit, we assume each UpdateItem is equivalent to SetTagCommand
								return new SetTagCommand(item.DicomTag.TagValue, item.OriginalValue, item.Value);
							}
						);
				}

				UpdateStudyCommand updateStudyCommand =
					new UpdateStudyCommand(ServerPartition, StorageLocation, updateCommands, 
						ServerRuleApplyTimeEnum.SopEdited);
				processor.AddCommand(updateStudyCommand);

				// Note, this command will only insert the ArchiveQueue command if a delete doesn't exist
				processor.AddCommand(new InsertArchiveQueueCommand(ServerPartition.Key, StorageLocation.Key));

			    var context = new WebEditStudyContext
			                      {
			                          CommandProcessor = processor,
			                          EditType = data.EditRequest.EditType,
			                          OriginalStudyStorageLocation = StorageLocation,
			                          EditCommands = updateCommands,
			                          OriginalStudy = Study,
			                          OrginalPatient = Patient,
			                          UserId = data.EditRequest.UserId,
			                          Reason = data.EditRequest.Reason
			                      };

				OnStudyUpdating(context);

				if (!processor.Execute())
				{
					Platform.Log(LogLevel.Error, processor.FailureException, "Unexpected failure editing study: {0}",
					             processor.FailureReason);
					FailureReason = processor.FailureReason;

					return false;
				}

				// reload the StudyStorageLocation
				NewStorageLocation = StudyStorageLocation.FindStorageLocations(StorageLocation.StudyStorage)[0];
				context.NewStudystorageLocation = NewStorageLocation;

				OnStudyUpdated(context);

				if (updateStudyCommand.Statistics != null)
					StatisticsLogger.Log(LogLevel.Info, updateStudyCommand.Statistics);

				return true;
			}
		}
예제 #4
0
파일: StudyEditor.cs 프로젝트: nhannd/Xian
			public StudyEditedEventArgs(WebEditStudyContext context)
			{
				_context = context;
			}
예제 #5
0
파일: StudyEditor.cs 프로젝트: nhannd/Xian
		private void OnStudyUpdated(WebEditStudyContext context)
		{
			EventsHelper.Fire(_editedHandlers, this, new StudyEditedEventArgs(context));
		}