Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
        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);
        }