diff --git a/src/Messaging/Events/ExportCompleteEvent.cs b/src/Messaging/Events/ExportCompleteEvent.cs index 5a048df..8a809bf 100755 --- a/src/Messaging/Events/ExportCompleteEvent.cs +++ b/src/Messaging/Events/ExportCompleteEvent.cs @@ -64,6 +64,11 @@ public class ExportCompleteEvent : EventBase [JsonPropertyName("file_statuses")] public Dictionary FileStatuses { get; set; } + /// + /// the target to export too + /// + public DataOrigin? Target { get; set; } + [Newtonsoft.Json.JsonConstructor] [System.Text.Json.Serialization.JsonConstructor] public ExportCompleteEvent() diff --git a/src/Messaging/Events/ExportRequestEvent.cs b/src/Messaging/Events/ExportRequestEvent.cs index 0f0b036..8fa479a 100755 --- a/src/Messaging/Events/ExportRequestEvent.cs +++ b/src/Messaging/Events/ExportRequestEvent.cs @@ -101,6 +101,11 @@ public class ExportRequestEvent : EventBase [JsonPropertyName("plug_in_assemblies")] public List PluginAssemblies { get; private set; } + /// + /// the target to export too + /// + public DataOrigin? Target { get; set; } + public ExportRequestEvent() { ErrorMessages = new List(); diff --git a/src/Messaging/Events/ExternalAppRequestEvent.cs b/src/Messaging/Events/ExternalAppRequestEvent.cs new file mode 100755 index 0000000..b3982eb --- /dev/null +++ b/src/Messaging/Events/ExternalAppRequestEvent.cs @@ -0,0 +1,145 @@ +/* + * Copyright 2021-2023 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; +using Ardalis.GuardClauses; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +namespace Monai.Deploy.Messaging.Events +{ + public class ExternalAppRequestEvent + { + /// + /// Gets or sets the workflow instanceID generated by the Workflow Manager. + /// + [JsonProperty(PropertyName = "workflow_instance_id")] + [JsonPropertyName("workflow_instance_id")] + [Required] + public string WorkflowInstanceId { get; set; } = default!; + + /// + /// Gets or sets the export task ID generated by the Workflow Manager. + /// + [JsonProperty(PropertyName = "export_task_id")] + [JsonPropertyName("export_task_id")] + [Required] + public string ExportTaskId { get; set; } = default!; + + /// + /// Gets or set the correlation ID. + /// For DIMSE, the correlation ID is the UUID associated with the first DICOM association received. + /// For ACR, use the Transaction ID in the original request. + /// + [JsonProperty(PropertyName = "correlation_id")] + [JsonPropertyName("correlation_id")] + [Required] + public string CorrelationId { get; set; } = default!; + + /// + /// Gets or sets the delivery tag or acknowledge token for the task. + /// + [JsonProperty(PropertyName = "delivery_tag")] + [JsonPropertyName("delivery_tag")] + public string DeliveryTag { get; set; } = default!; + + /// + /// Gets or sets the message ID set by the message broker. + /// + [JsonProperty(PropertyName = "message_id")] + [JsonPropertyName("message_id")] + public string MessageId { get; set; } = default!; + + /// + /// Gets or sets the state of the export task. + /// + [JsonProperty(PropertyName = "status")] + [JsonPropertyName("status")] + [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))] + [System.Text.Json.Serialization.JsonConverter(typeof(JsonStringEnumConverter))] + [Required] + public ExportStatus Status { get; set; } + + /// + /// Gets or sets error messages, if any, when exporting. + /// + [JsonProperty(PropertyName = "message")] + [JsonPropertyName("message")] + public string Message { get; set; } = default!; + + /// + /// Gets or sets a list of files to be exported. + /// + [JsonProperty(PropertyName = "files")] + [JsonPropertyName("files")] + [Required, MinLength(1)] + public IEnumerable Files { get; set; } = default!; + + /// + /// Gets or sets files exported with its status + /// + [JsonProperty(PropertyName = "file_statuses")] + [JsonPropertyName("file_statuses")] + public Dictionary FileStatuses { get; set; } + + /// + /// Gets or sets error messages related to this export task. + /// + [JsonProperty(PropertyName = "error_messages")] + [JsonPropertyName("error_messages")] + public List ErrorMessages { get; private set; } = new List(); + + /// + /// A list of data output plug-in type names to be executed by the export services. + /// Each string must be a fully-qualified type name. + /// E.g. MyCompnay.MyProject.MyNamepsace.MyPlugin, MyCompnay.MyProject.MyNamepsace where + /// MyCompnay.MyProject.MyNamepsace is the name of the assembly (DLL). + /// + [JsonProperty(PropertyName = "plug_in_assemblies")] + [JsonPropertyName("plug_in_assemblies")] + public List PluginAssemblies { get; private set; } = new List(); + + /// + /// the targets to export too + /// + public List Targets { get; set; } = new List(); + + [JsonProperty(PropertyName = "destination_folder")] + [JsonPropertyName("destination_folder")] + public string? DestinationFolder { get; set; } + + [Newtonsoft.Json.JsonConstructor] + [System.Text.Json.Serialization.JsonConstructor] + public ExternalAppRequestEvent() + { + Status = ExportStatus.Unknown; + FileStatuses = new Dictionary(); + } + + public ExternalAppRequestEvent(ExportRequestEvent exportRequest, ExportStatus exportStatus, Dictionary fileStatuses) + { + Guard.Against.Null(exportRequest, nameof(exportRequest)); + Guard.Against.Null(exportStatus, nameof(exportStatus)); + Guard.Against.Null(fileStatuses, nameof(fileStatuses)); + + WorkflowInstanceId = exportRequest.WorkflowInstanceId; + ExportTaskId = exportRequest.ExportTaskId; + Message = string.Join(System.Environment.NewLine, exportRequest.ErrorMessages); + Status = exportStatus; + FileStatuses = fileStatuses; + } + } +}