public string GetName(FhirResource fhirResource) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3Tool = IFhirResourceNameSupportFactory.GetStu3(); return(Stu3Tool.GetName(fhirResource)); case Common.Enums.FhirVersion.R4: var R4Tool = IFhirResourceNameSupportFactory.GetR4(); return(R4Tool.GetName(fhirResource)); default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public IEnumerable <ITypedElement>?Select(FhirResource fhirResource, string Expression) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3Tool = IFhirTypedElementSupportFactory.GetStu3(); return(Stu3Tool.Select(fhirResource, Expression)); case Common.Enums.FhirVersion.R4: var R4Tool = IFhirTypedElementSupportFactory.GetR4(); return(R4Tool.Select(fhirResource, Expression)); default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public IList <FhirContainedResource> GetContainedResourceDictionary(FhirResource fhirResource) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var ToolStu3 = IFhirContainedSupportFactory.GetStu3(); return(ToolStu3.GetContainedResourceDictionary(fhirResource)); case Common.Enums.FhirVersion.R4: var ToolR4 = IFhirContainedSupportFactory.GetR4(); return(ToolR4.GetContainedResourceDictionary(fhirResource)); default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public string?GetResourceId(FhirResource fhirResource) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3FhirResourceIdSupport = IFhirResourceIdSupportFactory.GetStu3(); return(Stu3FhirResourceIdSupport.GetFhirId(fhirResource)); case Common.Enums.FhirVersion.R4: var R4FhirResourceIdSupport = IFhirResourceIdSupportFactory.GetR4(); return(R4FhirResourceIdSupport.GetFhirId(fhirResource)); default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public DateTimeOffset?GetLastUpdated(FhirResource fhirResource) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3Tool = IFhirResourceLastUpdatedSupportFactory.GetStu3(); return(Stu3Tool.GetLastUpdated(fhirResource)); case Common.Enums.FhirVersion.R4: var R4Tool = IFhirResourceLastUpdatedSupportFactory.GetR4(); return(R4Tool.GetLastUpdated(fhirResource)); default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public void SetResourceId(FhirResource fhirResource, string id) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3FhirResourceIdSupport = IFhirResourceIdSupportFactory.GetStu3(); Stu3FhirResourceIdSupport.SetFhirId(id, fhirResource); break; case Common.Enums.FhirVersion.R4: var R4FhirResourceIdSupport = IFhirResourceIdSupportFactory.GetR4(); R4FhirResourceIdSupport.SetFhirId(id, fhirResource); break; default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public void SetVersion(FhirResource fhirResource, int versionId) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3Tool = IFhirResourceVersionSupportFactory.GetStu3(); Stu3Tool.SetVersion(versionId.ToString(), fhirResource); break; case Common.Enums.FhirVersion.R4: var R4Tool = IFhirResourceVersionSupportFactory.GetR4(); R4Tool.SetVersion(versionId.ToString(), fhirResource); break; default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
public void SetLastUpdated(FhirResource fhirResource, DateTimeOffset dateTime) { switch (fhirResource.FhirVersion) { case Common.Enums.FhirVersion.Stu3: var Stu3Tool = IFhirResourceLastUpdatedSupportFactory.GetStu3(); Stu3Tool.SetLastUpdated(dateTime, fhirResource); break; case Common.Enums.FhirVersion.R4: var R4Tool = IFhirResourceLastUpdatedSupportFactory.GetR4(); R4Tool.SetLastUpdated(dateTime, fhirResource); break; default: throw new FhirVersionFatalException(fhirResource.FhirVersion); } }
private async Task RetrieveFhirResources(InferenceRequestDetails requestDetails, RequestInputDataResource source, Dictionary <string, string> retrievedResources, string storagePath) { Guard.Against.Null(requestDetails, nameof(requestDetails)); Guard.Against.Null(source, nameof(source)); Guard.Against.Null(retrievedResources, nameof(retrievedResources)); Guard.Against.NullOrWhiteSpace(storagePath, nameof(storagePath)); var pendingResources = new Queue <FhirResource>(requestDetails.Resources.Where(p => !p.IsRetrieved)); if (pendingResources.Count == 0) { return; } var authenticationHeaderValue = AuthenticationHeaderValueExtensions.ConvertFrom(source.ConnectionDetails.AuthType, source.ConnectionDetails.AuthId); var httpClient = _httpClientFactory.CreateClient("fhir"); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.Authorization = authenticationHeaderValue; _fileSystem.Directory.CreateDirectory(storagePath); FhirResource resource = null; try { while (pendingResources.Count > 0) { resource = pendingResources.Dequeue(); resource.IsRetrieved = await RetrieveFhirResource( httpClient, resource, source, retrievedResources, storagePath, requestDetails.FhirFormat, requestDetails.FhirAcceptHeader); } } catch (System.Exception ex) { _logger.Log(LogLevel.Error, ex, $"Error retrieving FHIR resource {resource?.Type}/{resource?.Id}"); } }
private async Task <bool> RetrieveFhirResource(HttpClient httpClient, FhirResource resource, RequestInputDataResource source, Dictionary <string, string> retrievedResources, string storagePath, FhirStorageFormat fhirFormat, string acceptHeader) { Guard.Against.Null(httpClient, nameof(httpClient)); Guard.Against.Null(resource, nameof(resource)); Guard.Against.Null(source, nameof(source)); Guard.Against.Null(retrievedResources, nameof(retrievedResources)); Guard.Against.NullOrWhiteSpace(storagePath, nameof(storagePath)); Guard.Against.NullOrWhiteSpace(acceptHeader, nameof(acceptHeader)); _logger.Log(LogLevel.Debug, $"Retriving FHIR resource {resource.Type}/{resource.Id} with media format {acceptHeader} and file format {fhirFormat}."); var request = new HttpRequestMessage(HttpMethod.Get, $"{source.ConnectionDetails.Uri}{resource.Type}/{resource.Id}"); request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(acceptHeader)); var response = await Policy .HandleResult <HttpResponseMessage>(p => !p.IsSuccessStatusCode) .WaitAndRetryAsync(3, (retryAttempt) => { return(retryAttempt == 1 ? TimeSpan.FromMilliseconds(250) : TimeSpan.FromMilliseconds(500)); }, (result, timeSpan, retryCount, context) => { _logger.Log(LogLevel.Error, result.Exception, $"Failed to retrieve resource {resource.Type}/{resource.Id} with status code {result.Result.StatusCode}, retry count={retryCount}."); }) .ExecuteAsync(async() => await httpClient.SendAsync(request)); if (response.IsSuccessStatusCode) { var json = await response.Content.ReadAsStringAsync(); var filename = _fileSystem.Path.Combine(storagePath, $"{resource.Type}-{resource.Id}.{fhirFormat}".ToLowerInvariant()); await _fileSystem.File.WriteAllTextAsync(filename, json); retrievedResources.Add(_fileSystem.Path.GetFileName(filename), filename); return(true); } else { _logger.Log(LogLevel.Error, $"Error retriving FHIR resource {resource.Type}/{resource.Id}. Recevied HTTP status code {response.StatusCode}."); return(false); } }
private static List <FhirResource> FileChildrenChilds(List <ITypedElement> resource) { var returnList = new List <FhirResource>(); foreach (ITypedElement child in resource) { var currentResource = new FhirResource(); currentResource.Name = child.Name; var childrenchilds = child.Children().ToList(); if (childrenchilds.Count > 0) { currentResource.Childrens = FileChildrenChilds(childrenchilds); currentResource.HasChildrens = true; } returnList.Add(currentResource); } return(returnList); }