public SerachQueryServiceOutcome(FhirVersion FhirVersion, ResourceType ResourceContext, IFhirSearchQuery IFhirSearchQuery) { this.FhirVersion = FhirVersion; this.ResourceContext = ResourceContext; this.CountRequested = IFhirSearchQuery.Count; this.PageRequested = IFhirSearchQuery.Page; this.SummaryType = IFhirSearchQuery.SummaryType; this.Contained = IFhirSearchQuery.Contained; this.ContainedType = IFhirSearchQuery.ContainedType; this.Text = IFhirSearchQuery.Text; this.Content = IFhirSearchQuery.Content; this.Filter = IFhirSearchQuery.Filter; this.Query = IFhirSearchQuery.Query; this.InvalidSearchQueryList = IFhirSearchQuery.InvalidParameterList; this.UnsupportedSearchQueryList = new List <InvalidSearchQueryParameter>(); this.IncludeList = new List <SearchQueryInclude>(); this.SearchQueryList = new List <ISearchQueryBase>(); this.HasList = new List <SearchQueryHas>(); }
public async Task <ISerachQueryServiceOutcome> Process(FhirVersion fhirVersion, ResourceType resourceTypeContext, IFhirSearchQuery searchQuery) { this.FhirVersion = fhirVersion; this.ResourceContext = resourceTypeContext; this.SearchQuery = searchQuery; Outcome = new SerachQueryServiceOutcome(this.FhirVersion, this.ResourceContext, searchQuery); //Parse Include and RevInclude parameters await ProcessIncludeSearchParameters(this.SearchQuery.Include); await ProcessIncludeSearchParameters(this.SearchQuery.RevInclude); await ProccessHasList(this.SearchQuery.Has); foreach (var Parameter in searchQuery.ParametersDictionary) { //We will just ignore an empty parameter such as this last '&' URL?family=Smith&given=John& if (Parameter.Key + Parameter.Value != string.Empty) { if (Parameter.Key.Contains(FhirSearchQuery.TermChainDelimiter)) { ChainQueryProcessingOutcome ChainQueryProcessingOutcome = await IChainQueryProcessingService.Process(this.FhirVersion, this.ResourceContext, Parameter); ChainQueryProcessingOutcome.SearchQueryList.ForEach(x => Outcome.SearchQueryList.Add(x)); ChainQueryProcessingOutcome.InvalidSearchQueryList.ForEach(x => Outcome.InvalidSearchQueryList.Add(x)); ChainQueryProcessingOutcome.UnsupportedSearchQueryList.ForEach(x => Outcome.UnsupportedSearchQueryList.Add(x)); } else { await NormalSearchProcessing(Parameter); } } } return(Outcome); }