Пример #1
0
        public static Bundle ToBundle(this IEnumerable <Resource> resources, Bundle.BundleType type = Bundle.BundleType.Collection, Uri base_ = null)
        {
            Bundle bundle = new Bundle
            {
                Id   = $"urn:uuid:{Guid.NewGuid().ToString("N")}",
                Type = type
            };

            foreach (Resource resource in resources)
            {
                // TODO: Investigate further when it is appropriate to add request method entries.
                if (type == Bundle.BundleType.Transaction)
                {
                    if (base_ != null)
                    {
                        resource.ResourceBase = base_;
                    }
                    // Make sure that resources without id's are posted.
                    if (resource.Id != null)
                    {
                        bundle.Append(Bundle.HTTPVerb.PUT, resource);
                    }
                    else
                    {
                        bundle.Append(Bundle.HTTPVerb.POST, resource);
                    }
                }
                else
                {
                    bundle.Append(resource);
                }
            }

            return(bundle);
        }
Пример #2
0
        public static FhirResponse WithBundle(IEnumerable <Interaction> interactions, Uri serviceBase)
        {
            Bundle bundle = new Bundle();

            bundle.Append(interactions);
            return(WithBundle(bundle, serviceBase));
        }
Пример #3
0
        public Bundle CreateBundle(Snapshot snapshot, int?start = null)
        {
            Bundle bundle = new Bundle();

            bundle.Type  = snapshot.Type;
            bundle.Total = snapshot.Count;
            bundle.Id    = UriHelper.CreateUuid().ToString();

            IEnumerable <string> keysInBundle = snapshot.Keys;

            if (start.HasValue)
            {
                keysInBundle = keysInBundle.Skip(start.Value);
            }

            IList <string>      keys         = keysInBundle.Take(snapshot.CountParam ?? DEFAULT_PAGE_SIZE).ToList();
            IList <Interaction> interactions = fhirStore.Get(keys, snapshot.SortBy).ToList();

            IList <Interaction> included = GetIncludesRecursiveFor(interactions, snapshot.Includes);

            interactions.Append(included);

            transfer.Externalize(interactions);
            bundle.Append(interactions);
            BuildLinks(bundle, snapshot, start);

            return(bundle);
        }
        public static Bundle Append(this Bundle bundle, IEnumerable<ResourceData> resourcesData)
        {
            if (!resourcesData.IsCollectionValid() && Bundle.BundleType.Searchset == bundle.Type)
            {
                Bundle.EntryComponent bundleEntry = new Bundle.EntryComponent();
                
                OperationOutcome outcome = new OperationOutcome();
                CodeableConcept codeableConcept = new CodeableConcept();
                codeableConcept.Text = "There is no matching record found for the given criteria";
                outcome.AddWarning(string.Format("Not Found"), OperationOutcome.IssueType.NotFound, codeableConcept);
                bundleEntry.Resource = outcome;
                bundleEntry.Resource.Id = "warning";
                bundleEntry.Search = new Bundle.SearchComponent() {
                    Mode = Bundle.SearchEntryMode.Outcome
                };
                bundle.Entry.Add(bundleEntry);
                return bundle;
            }

            foreach (ResourceData resourceData in resourcesData)
            {
                bundle.Append(resourceData);
            }

            return bundle;
        }
Пример #5
0
 public static void Append(this Bundle bundle, IEnumerable <Resource> resources)
 {
     foreach (Resource resource in resources)
     {
         bundle.Append(resource);
     }
 }
Пример #6
0
        private async Task <Bundle> CreateBundleAsync(int?start = null)
        {
            var bundle = new Bundle {
                Type = _snapshot.Type, Total = _snapshot.Count, Id = Guid.NewGuid().ToString()
            };

            var keys    = _snapshotPaginationCalculator.GetKeysForPage(_snapshot, start).ToList();
            var entries = (await _fhirStore.Get(keys).ConfigureAwait(false)).ToList();

            if (_snapshot.SortBy != null)
            {
                entries = entries.Select(e => new { Entry = e, Index = keys.IndexOf(e.Key) })
                          .OrderBy(e => e.Index)
                          .Select(e => e.Entry)
                          .ToList();
            }

            var included = await GetIncludesRecursiveForAsync(entries, _snapshot.Includes).ConfigureAwait(false);

            entries.Append(included);

            _transfer.Externalize(entries);
            bundle.Append(entries);
            BuildLinks(bundle, start);

            return(bundle);
        }
Пример #7
0
        private Bundle CreateBundle(int?start = null)
        {
            Bundle bundle = new Bundle();

            bundle.Type  = snapshot.Type;
            bundle.Total = snapshot.Count;
            bundle.Id    = UriHelper.CreateUuid().ToString();

            List <IKey>   keys    = _snapshotPaginationCalculator.GetKeysForPage(snapshot, start).ToList();
            IList <Entry> entries = fhirStore.Get(keys).ToList();

            if (snapshot.SortBy != null)
            {
                entries = entries.Select(e => new { Entry = e, Index = keys.IndexOf(e.Key) })
                          .OrderBy(e => e.Index)
                          .Select(e => e.Entry).ToList();
            }
            IList <Entry> included = GetIncludesRecursiveFor(entries, snapshot.Includes);

            entries.Append(included);

            transfer.Externalize(entries);
            bundle.Append(entries);
            BuildLinks(bundle, start);

            return(bundle);
        }
Пример #8
0
 public static void Append(this Bundle bundle, Bundle.HTTPVerb method, IEnumerable <Resource> resources)
 {
     foreach (Resource resource in resources)
     {
         bundle.Append(method, resource);
     }
 }
        public FhirResponse Handle(IKey key, SearchParams searchParameters)
        {
            Validate.TypeName(key.TypeName);

            Validate.HasSearchParameters(searchParameters);

            var hl7Type = key.TypeName.GetHl7ModelType();

            var modelFactory = this._provider.GetService(typeof(ResourceSearchHandlerFactory)) as ResourceSearchHandlerFactory;

            IResourceSearchHandler synapseModelHandler = modelFactory.GetHandler(hl7Type);

            var fhirParam = FHIRParam.Create(key.TypeName, key.ResourceId, key.VersionId);

            var searchResultData = synapseModelHandler.Handle(fhirParam, searchParameters);

            var fhirResponseFactory = this._provider.GetService(typeof(IFhirResponseFactory)) as IFhirResponseFactory;

            var resourcesData = searchResultData.ResourcesData;

            Bundle bundle = new Bundle()
            {
                Type  = Bundle.BundleType.Searchset,
                Total = resourcesData.Count,
                Id    = resourcesData.IsCollectionValid()? Guid.NewGuid().ToString() : SearchWarningMsg
            };

            bundle.Append(resourcesData);

            return(fhirResponseFactory.GetFhirResponse(bundle));
        }
Пример #10
0
        public static FhirResponse WithBundle(IEnumerable <Entry> entries, Uri serviceBase)
        {
            Bundle bundle = new Bundle();

            bundle.Append(entries);
            return(WithBundle(bundle));
        }
Пример #11
0
        public static Bundle ToBundle(this IEnumerable <Resource> resources, Uri _base)
        {
            Bundle bundle = new Bundle();

            foreach (Resource resource in resources)
            {
                // Make sure that resources without id's are posted.
                if (resource.Id != null)
                {
                    bundle.Append(Bundle.HTTPVerb.PUT, resource);
                }
                else
                {
                    bundle.Append(Bundle.HTTPVerb.POST, resource);
                }
            }

            return(bundle);
        }
Пример #12
0
        public FhirResponse GetFhirResponse(IEnumerable <Tuple <Entry, FhirResponse> > responses, Bundle.BundleType bundleType)
        {
            Bundle bundle = localhost.CreateBundle(bundleType);

            foreach (Tuple <Entry, FhirResponse> response in responses)
            {
                bundle.Append(response.Item1, response.Item2);
            }

            return(Respond.WithBundle(bundle));
        }
Пример #13
0
        public static Bundle ToBundle(this IEnumerable <Resource> resources)
        {
            var bundle = new Bundle();

            foreach (var resource in resources)
            {
                // Make sure that resources without id's are posted.
                bundle.Append(resource.Id != null ? Bundle.HTTPVerb.PUT : Bundle.HTTPVerb.POST, resource);
            }

            return(bundle);
        }
Пример #14
0
        public static Bundle Append(this Bundle bundle, IEnumerable <Entry> entries)
        {
            foreach (var entry in entries)
            {
                // BALLOT: whether to send transactionResponse components... not a very clean solution
                bundle.Append(entry);
            }

            // NB! Total can not be set by counting bundle elements, because total is about the snapshot total
            // bundle.Total = bundle.Entry.Count();

            return(bundle);
        }
Пример #15
0
        public ServerFhirResponse GetFhirResponse(IEnumerable <Tuple <Entry, ServerFhirResponse> > responses, Bundle.BundleType bundleType)
        {
            //Bundle bundle = localhost.CreateBundle(bundleType);
            Bundle bundle = new Bundle()
            {
                Type = bundleType
            };

            foreach (Tuple <Entry, ServerFhirResponse> response in responses)
            {
                bundle.Append(response.Item1, response.Item2);
            }

            return(Respond.WithBundle(bundle));
        }
Пример #16
0
        public FhirResponse GetFhirResponse(
            IEnumerable <Tuple <Entry, FhirResponse> > responses,
            Bundle.BundleType bundleType)
        {
            var bundle = new Bundle {
                Type = bundleType
            };

            foreach (var response in responses)
            {
                bundle.Append(response.Item1, response.Item2);
            }

            return(Respond.WithBundle(bundle));
        }
Пример #17
0
        private FhirResponse CreateSnapshotResponse(Snapshot snapshot, int pageIndex = 0)
        {
            IPagingService          pagingExtension = this.FindExtension <IPagingService>();
            IResourceStorageService resourceStorage = this.FindExtension <IResourceStorageService>();

            if (pagingExtension == null)
            {
                Bundle bundle = new Bundle()
                {
                    Type  = snapshot.Type,
                    Total = snapshot.Count
                };
                bundle.Append(resourceStorage.Get(snapshot.Keys));
                return(responseFactory.GetFhirResponse(bundle));
            }
            else
            {
                Bundle bundle = pagingExtension.StartPagination(snapshot).GetPage(pageIndex);
                return(responseFactory.GetFhirResponse(bundle));
            }
        }
Пример #18
0
        public Bundle CreateBundle(Snapshot snapshot, int start, int count)
        {
            Bundle bundle = new Bundle();

            bundle.Type  = snapshot.Type;
            bundle.Total = snapshot.Count;
            bundle.Id    = UriHelper.CreateUuid().ToString();

            IList <string>      keys         = snapshot.Keys.Skip(start).Take(count).ToList();
            IList <Interaction> interactions = store.Get(keys, snapshot.SortBy).ToList();

            transfer.Externalize(interactions);

            bundle.Append(interactions);

            Include(bundle, snapshot.Includes);
            BuildLinks(bundle, snapshot, start, count);


            return(bundle);
        }