public ISearchParametersServiceOutcome ProcessOperationSearchParameters(
     ISearchParameterGeneric SearchParameterGeneric,
     SearchParameterServiceType SearchParameterServiceType,
     OperationClass OperationClass)
 {
     return(ProcessSearchParameters(SearchParameterGeneric, SearchParameterServiceType, null, OperationClass));
 }
        private List <DtoServiceSearchParameterLight> GetSupportedSearchParameters(SearchParameterServiceType SearchParameterServiceType, OperationClass OperationClass, string ResourceType)
        {
            List <DtoServiceSearchParameterLight> DtoSupportedServiceSearchParameterList = new List <DtoServiceSearchParameterLight>();

            //For non Resource URL values, e.g _format, _summary
            if ((SearchParameterServiceType & SearchParameterServiceType.Base) == SearchParameterServiceType.Base)
            {
                DtoSupportedServiceSearchParameterList.AddRange(ServiceSearchParameterFactory.BaseSearchParameters());
            }
            //For Bundle URL Parameters e.g page, _sort
            if ((SearchParameterServiceType & SearchParameterServiceType.Bundle) == SearchParameterServiceType.Bundle)
            {
                DtoSupportedServiceSearchParameterList.AddRange(ServiceSearchParameterFactory.BundleSearchParameters());
            }

            //For $Operation URL Parameters e.g profile, mode
            if ((SearchParameterServiceType & SearchParameterServiceType.Operation) == SearchParameterServiceType.Operation)
            {
                DtoSupportedServiceSearchParameterList.AddRange(ServiceSearchParameterFactory.OperationSearchParameters(OperationClass));
            }

            //For Resource search parameters
            if ((SearchParameterServiceType & SearchParameterServiceType.Resource) == SearchParameterServiceType.Resource)
            {
                DtoSupportedServiceSearchParameterList.AddRange(IServiceSearchParameterCache.GetSearchParameterForResource(ResourceType));
            }

            return(DtoSupportedServiceSearchParameterList);
        }
 public ISearchParametersServiceOutcome ProcessResourceSearchParameters(
     ISearchParameterGeneric SearchParameterGeneric,
     SearchParameterServiceType SearchParameterServiceType,
     FHIRAllTypes?ResourceType)
 {
     return(ProcessSearchParameters(SearchParameterGeneric, SearchParameterServiceType, ResourceType, null));
 }
        private List <DtoServiceSearchParameterLight> GetSupportedSearchParameters(SearchParameterServiceType SearchParameterServiceType, OperationClass OperationClass, FHIRAllTypes?ResourceType)
        {
            string ResourceString = string.Empty;

            if (ResourceType.HasValue)
            {
                ResourceString = ResourceType.Value.GetLiteral();
            }
            return(GetSupportedSearchParameters(SearchParameterServiceType, OperationClass, ResourceString));
        }
        public ISearchParametersServiceOutcome ProcessSearchParameters(
            ISearchParameterGeneric SearchParameterGeneric,
            SearchParameterServiceType SearchParameterServiceType,
            FHIRAllTypes?ResourceType,
            OperationClass OperationClass)
        {
            if (SearchParameterServiceType == SearchParameterServiceType.None)
            {
                throw new NullReferenceException("Server error: SearchParameterServiceType can not be 'None'.");
            }

            if (SearchParameterGeneric == null)
            {
                throw new NullReferenceException("Server error: SearchParameterGeneric can not be null.");
            }

            if (((SearchParameterServiceType & SearchParameterServiceType.Resource) == SearchParameterServiceType.Resource) &&
                ResourceType == null)
            {
                throw new NullReferenceException("Server error: ResourceType can not be null when enum SearchParameterServiceType is set to Resource.");
            }

            if (((SearchParameterServiceType & SearchParameterServiceType.Operation) == SearchParameterServiceType.Operation) &&
                OperationClass == null)
            {
                throw new NullReferenceException("Server error: OperationClass can not be null when enum SearchParameterServiceType is set to Operation.");
            }

            _ResourceType               = ResourceType;
            _OperationClass             = OperationClass;
            _SearchParameterServiceType = SearchParameterServiceType;

            _SearchParametersServiceOutcome = ISearchParametersServiceOutcomeFactory.CreateSearchParametersServiceOutcome();
            _SearchParametersServiceOutcome.SearchParameters = new PyroSearchParameters();
            _SearchParametersServiceOutcome.SearchParameters.ResourceTarget                = _ResourceType;
            _SearchParametersServiceOutcome.SearchParameters.SearchParametersList          = new List <ISearchParameterBase>();
            _SearchParametersServiceOutcome.SearchParameters.UnspportedSearchParameterList = new List <UnspportedSearchParameter>();
            _SearchParametersServiceOutcome.SearchParameters.CountOfRecordsRequested       = SearchParameterGeneric.Count;
            _SearchParametersServiceOutcome.SearchParameters.SummaryType = SearchParameterGeneric.SummaryType;

            //Parse Include and RevInclude parameters
            ProcessIncludeSearchParameters(SearchParameterGeneric.Include);
            ProcessIncludeSearchParameters(SearchParameterGeneric.RevInclude);

            foreach (var Parameter in SearchParameterGeneric.ParameterList)
            {
                //We will just ignore an empty parameter such as this last '&' URL?family=Smith&given=John&
                if (Parameter.Item1 + Parameter.Item2 != string.Empty)
                {
                    if (Parameter.Item1.Contains(SearchParams.SEARCH_CHAINSEPARATOR))
                    {
                        ChainSearchProcessing(Parameter);
                    }
                    else
                    {
                        NormalSearchProcessing(Parameter);
                    }
                }
            }

            //resolve Sort order parameters
            if (SearchParameterGeneric.Sort != null)
            {
                _SearchParametersServiceOutcome.SearchParameters.SortList = new List <PyroSearchParameters.Sort>();
                foreach (var SortItem in SearchParameterGeneric.Sort)
                {
                    string SearchParameterName = SortItem.Item1.Trim();
                    DtoServiceSearchParameterLight oSupportedSearchParameter = _DtoSupportedSearchParametersList.SingleOrDefault(x => x.Name == SearchParameterName);
                    _SearchParametersServiceOutcome.SearchParameters.SortList.Add(new PyroSearchParameters.Sort()
                    {
                        Value = oSupportedSearchParameter, SortOrderType = SortItem.Item2
                    });
                }
            }

            return(_SearchParametersServiceOutcome);
        }