Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
            }
        }
Esempio n. 9
0
        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}");
            }
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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);
        }