Example #1
0
        public async Task <(bool, string)> UpdateSearchParameters(IReadOnlyCollection <string> searchParameterUris, CancellationToken cancellationToken)
        {
            var searchParameterStatusList = new List <ResourceSearchParameterStatus>();

            foreach (string uri in searchParameterUris)
            {
                var searchParamUri = new Uri(uri);

                try
                {
                    _searchParameterDefinitionManager.SetSearchParameterEnabled(searchParamUri);
                }
                catch (SearchParameterNotSupportedException)
                {
                    return(false, string.Format(Core.Resources.SearchParameterNoLongerSupported, uri));
                }

                searchParameterStatusList.Add(new ResourceSearchParameterStatus()
                {
                    LastUpdated = DateTimeOffset.UtcNow,
                    Status      = SearchParameterStatus.Enabled,
                    Uri         = searchParamUri,
                });
            }

            await _searchParameterRegistry.UpdateStatuses(searchParameterStatusList);

            return(true, null);
        }
        public async Task EnsureInitialized()
        {
            var updated       = new List <SearchParameterInfo>();
            var newParameters = new List <ResourceSearchParameterStatus>();

            var parameters = (await _searchParameterRegistry.GetSearchParameterStatuses())
                             .ToDictionary(x => x.Uri);

            // Set states of known parameters
            foreach (var p in _searchParameterDefinitionManager.AllSearchParameters)
            {
                if (parameters.TryGetValue(p.Url, out ResourceSearchParameterStatus result))
                {
                    bool isSearchable = result.Status == SearchParameterStatus.Enabled;
                    bool isSupported  = result.Status != SearchParameterStatus.Disabled;

                    if (result.Status == SearchParameterStatus.Disabled)
                    {
                        // Re-check if this parameter is now supported.
                        isSupported = _searchParameterSupportResolver.IsSearchParameterSupported(p);
                    }

                    if (p.IsSearchable != isSearchable ||
                        p.IsSupported != isSupported ||
                        p.IsPartiallySupported != result.IsPartiallySupported)
                    {
                        p.IsSearchable         = isSearchable;
                        p.IsSupported          = isSupported;
                        p.IsPartiallySupported = result.IsPartiallySupported;

                        updated.Add(p);
                    }
                }
                else
                {
                    newParameters.Add(new ResourceSearchParameterStatus
                    {
                        Uri         = p.Url,
                        LastUpdated = Clock.UtcNow,
                        Status      = SearchParameterStatus.Supported,
                    });

                    p.IsSearchable = false;

                    // Check if this parameter is now supported.
                    p.IsSupported = _searchParameterSupportResolver.IsSearchParameterSupported(p);

                    updated.Add(p);
                }
            }

            if (newParameters.Any())
            {
                await _searchParameterRegistry.UpdateStatuses(newParameters);
            }

            await _mediator.Publish(new SearchParametersUpdated(updated));
        }