/// <summary> /// Merges another result. /// </summary> /// <param name="value">The result to merge.</param> public virtual void Merge(IIntegrationResult value) { // Apply some rules to the status merging - basically apply a hierachy of status codes if ((value.Status == IntegrationStatus.Exception) || (this.status == IntegrationStatus.Unknown)) { this.status = value.Status; } else if (((value.Status == IntegrationStatus.Failure) || (value.Status == IntegrationStatus.Cancelled)) && (this.status != IntegrationStatus.Exception)) { this.status = value.Status; } // Merge the exceptions if (value.ExceptionResult != null) { if (this.exception != null) { var mutliple = this.exception as MultipleIntegrationFailureException; if (mutliple == null) { mutliple = new MultipleIntegrationFailureException(this.exception); this.exception = mutliple; } mutliple.AddFailure(value.ExceptionResult); } else { this.exception = value.ExceptionResult; } } // Merge the results foreach (ITaskResult result in value.TaskResults) { AddTaskResult(result); } }