private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterToken SearchTypeToken, SearchParameterTokenValue SearchValue) { var Expression = Search.TokenCollectionAnyEqualTo(SearchTypeToken.Id, SearchValue.Code, SearchValue.System, SearchValue.SearchType); NewPredicate = NewPredicate.Or(Expression); return(NewPredicate); }
private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterDateTime SearchTypeDateTime, SearchParameterDateTimeValue SearchValue) { var Expression = Search.DateTimePeriodCollectionAnyEqualTo(SearchTypeDateTime.Id, SearchValue.Value, FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision)); NewPredicate = NewPredicate.Or(Expression); return(NewPredicate); }
private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterNumber SearchTypeNumber, SearchParameterNumberValue SearchValue) { var Expression = Search.NumberCollectionAnyEqualTo(SearchTypeNumber.Id, Common.Tools.DecimalSupport.CalculateLowNumber(SearchValue.Value, SearchValue.Scale), SearchValue.Value, Common.Tools.DecimalSupport.CalculateHighNumber(SearchValue.Value, SearchValue.Scale)); NewPredicate = NewPredicate.Or(Expression); return(NewPredicate); }
public E <LocalStr> ModifyPlaylist(string listId, Action <Playlist, string> action) { var checkName = Util.IsSafeFileName(listId); if (!checkName.Ok) { return(checkName.Error); } var res = playlistPool.ReadFull(listId); if (!res.Ok) { return(res.Error); } var(list, id) = res.Value; lock (listLock) { action(list, id); } var ret = playlistPool.Write(id, list); ResourceSearch?.Rebuild(); return(ret); }
private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearchExpressionTrees <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterComposite SearchTypeComposite, SearchParameterCompositeValue SearchValue, IPrimaryServiceRootCache IPrimaryServiceRootCache) { var _ResourceSearch = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(IPrimaryServiceRootCache); var Expression = _ResourceSearch.ANDSearchParameterListPredicateGenerator(SearchValue.SearchParameterBaseList); NewPredicate = NewPredicate.Or(Expression); return(NewPredicate); }
public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem) { if (SearchItem is SearchParameterToken) { var SearchTypeToken = SearchItem as SearchParameterToken; foreach (var SearchValue in SearchTypeToken.ValueList) { if (!SearchTypeToken.Modifier.HasValue) { NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeToken, SearchValue); } else { switch (SearchTypeToken.Modifier) { case SearchParameter.SearchModifierCode.Missing: if (SearchValue.IsMissing) { NewPredicate = NewPredicate.Or(Search.SearchParameterIsNull <ResIndexTokenType>(SearchTypeToken.Id)); } else { NewPredicate = NewPredicate.Or(Search.SearchParameterIdIsNotNull <ResIndexTokenType>(SearchTypeToken.Id)); } break; case SearchParameter.SearchModifierCode.Exact: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.Contains: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.Text: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.Type: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.Below: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.Above: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.In: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); case SearchParameter.SearchModifierCode.NotIn: throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeToken.Modifier.ToString(), (int)SearchTypeToken.Modifier, typeof(SearchParameter.SearchModifierCode)); } } } } return(NewPredicate); }
private static ExpressionStarter <ResCurrentType> Equals(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewLastUpdatedPredicate, SearchParameterDateTimeValue SearchValue) { var ExpressionLow = Search.LastUpdatedPropertyGreaterThanOrEqualTo(SearchValue.Value); var ExpressionHigh = Search.LastUpdatedPropertyLessThanOrEqualTo(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision)); var Expression = ExpressionLow.And(ExpressionHigh); NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(Expression); return(NewLastUpdatedPredicate); }
public ActionResult GetResourceGroups(ResourceSearch search) { ResourceBll resourceBll = new ResourceBll(); var resourceList = resourceBll.GetPagingResourceGroup(search.Pagination, search.Id, search.Name, search.Grade, search.GroupType); var viewModels = resourceList.ConvertTo <List <ResourceGroupViewModel> >(); var table = AbhsTableFactory.Create(viewModels, search.Pagination.TotalCount); return(Json(table, JsonRequestBehavior.AllowGet)); }
public ActionResult GetPagingMediaResource(ResourceSearch search) { ResourceBll resourceBll = new ResourceBll(); var resourceList = resourceBll.GetPagingMediaResource(search.Pagination, search.Id, search.NameOrKey, search.Grade, search.MediaType); List <MediaResourceViewModel> list = resourceList.ConvertTo <List <MediaResourceViewModel> >(); var table = AbhsTableFactory.Create(list, search.Pagination.TotalCount); return(Json(table, JsonRequestBehavior.AllowGet)); }
public E <LocalStr> DeletePlaylist(string listId) { var checkName = Util.IsSafeFileName(listId); if (!checkName.Ok) { return(checkName.Error); } var ret = playlistPool.Delete(listId); ResourceSearch?.Rebuild(); return(ret); }
public E <LocalStr> CreatePlaylist(string listId, Uid owner, string title = null) { var checkName = Util.IsSafeFileName(listId); if (!checkName.Ok) { return(checkName); } if (playlistPool.Exists(listId)) { return(new LocalStr("Already exists")); } var ret = playlistPool.Write(listId, new Playlist(title ?? listId, owner)); ResourceSearch?.Rebuild(); return(ret); }
private static void IdSearchParameterPredicateProcessing < ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(List <ISearchParameterBase> SearchParametersList, ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> MainPredicate) where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new() where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> { var IdSearchParamerterList = SearchParametersList.Where(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_id"); if (IdSearchParamerterList != null) { ExpressionStarter <ResCurrentType> NewIdPredicate = null; foreach (var IdSearchParameter in IdSearchParamerterList) { if (IdSearchParameter is SearchParameterToken SearchTypeToken) { NewIdPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>(); foreach (var SearchValue in SearchTypeToken.ValueList) { if (!SearchTypeToken.Modifier.HasValue) { var Expression = Search.TokenMainAnyEqualTo(SearchValue.Code); NewIdPredicate = NewIdPredicate.Or(Expression); } } } MainPredicate.Extend <ResCurrentType>(NewIdPredicate, PredicateOperator.And); } SearchParametersList.RemoveAll(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_id"); } }
protected ExpressionStarter <ResCurrentType> PredicateResourceIdAndLastUpdatedDate < ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(List <ISearchParameterBase> SearchParametersList) where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new() where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> { var Predicate = LinqKit.PredicateBuilder.New <ResCurrentType>(true); var Search = new ResourceSearch < ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(); IdSearchParameterPredicateProcessing(SearchParametersList, Search, Predicate); LastUpdatedDatePredicateBuilder < ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(SearchParametersList, Search, Predicate); return(Predicate); }
public E <string> InitializeBot() { Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address); // Registering config changes config.Language.Changed += (s, e) => { var langResult = LocalizationManager.LoadLanguage(e.NewValue, true); if (!langResult.Ok) { Log.Error("Failed to load language file ({0})", langResult.Error); } }; config.Events.IdleDelay.Changed += (s, e) => EnableIdleTickWorker(); config.Events.OnIdle.Changed += (s, e) => EnableIdleTickWorker(); var builder = new DependencyBuilder(Injector); builder.AddModule(this); builder.AddModule(config); builder.AddModule(Injector); builder.AddModule(config.Playlists); builder.RequestModule <PlaylistIO>(); builder.RequestModule <PlaylistManager>(); builder.AddModule(Id); builder.AddModule(new TsFullClient()); builder.RequestModule <TsBaseFunctions, TsFullClient>(); builder.RequestModule <Ts3Client>(); builder.RequestModule <Player>(); builder.RequestModule <CustomTargetPipe>(); builder.RequestModule <IVoiceTarget, CustomTargetPipe>(); builder.RequestModule <SessionManager>(); builder.RequestModule <ResolveContext>(); if (!builder.TryCreate <CommandManager>(out var commandManager)) { return("Failed to create commandManager"); } builder.AddModule(commandManager); if (config.History.Enabled) { builder.AddModule(config.History); builder.RequestModule <HistoryManager>(); } builder.RequestModule <PlayManager>(); if (!builder.Build()) { Log.Error("Missing bot module dependency"); return("Could not load all bot modules"); } { var io = Injector.GetModule <PlaylistIO>(); var resourceSearch = new ResourceSearch(io); Injector.AddModule(resourceSearch); var playlistManager = Injector.GetModule <PlaylistManager>(); playlistManager.ResourceSearch = resourceSearch; } resourceResolver = Injector.GetModule <ResolveContext>(); ts3FullClient = Injector.GetModule <TsFullClient>(); ts3client = Injector.GetModule <Ts3Client>(); player = Injector.GetModule <Player>(); player.SetTarget(Injector.GetModule <CustomTargetPipe>()); Injector.AddModule(ts3FullClient.Book); playManager = Injector.GetModule <PlayManager>(); targetManager = Injector.GetModule <IVoiceTarget>(); sessionManager = Injector.GetModule <SessionManager>(); stats = Injector.GetModule <Stats>(); player.OnSongEnd += playManager.SongEndedEvent; player.OnSongUpdated += (s, e) => playManager.Update(e); // Update idle status events playManager.BeforeResourceStarted += (s, e) => DisableIdleTickWorker(); playManager.PlaybackStopped += (s, e) => EnableIdleTickWorker(); // Used for the voice_mode script playManager.BeforeResourceStarted += BeforeResourceStarted; // Update the own status text to the current song title playManager.AfterResourceStarted += LoggedUpdateBotStatus; playManager.PlaybackStopped += LoggedUpdateBotStatus; playManager.OnResourceUpdated += LoggedUpdateBotStatus; // Log our resource in the history if (Injector.TryGet <HistoryManager>(out var historyManager)) { playManager.AfterResourceStarted += (s, e) => historyManager.LogAudioResource(new HistorySaveData(e.PlayResource.BaseData, e.MetaData.ResourceOwnerUid ?? Uid.Null)); } // Update our thumbnail playManager.AfterResourceStarted += GenerateStatusImage; playManager.PlaybackStopped += GenerateStatusImage; // Stats playManager.AfterResourceStarted += (s, e) => stats.TrackSongStart(Id, e.ResourceData.AudioType); playManager.ResourceStopped += (s, e) => stats.TrackSongStop(Id); // Register callback for all messages happening ts3client.OnMessageReceived += OnMessageReceived; // Register callback to remove open private sessions, when user disconnects ts3FullClient.OnEachClientLeftView += OnClientLeftView; ts3client.OnBotConnected += OnBotConnected; ts3client.OnBotDisconnect += OnBotDisconnect; // Alone mode ts3client.OnAloneChanged += OnAloneChanged; // Whisper stall ts3client.OnWhisperNoTarget += (s, e) => player.SetStall(); commandManager.RegisterCollection(MainCommands.Bag); // TODO remove after plugin rework var pluginManager = Injector.GetModule <PluginManager>(); foreach (var plugin in pluginManager.Plugins) { if (plugin.Type == PluginType.CorePlugin || plugin.Type == PluginType.Commands) { commandManager.RegisterCollection(plugin.CorePlugin.Bag); } } // Restore all alias from the config foreach (var alias in config.Commands.Alias.GetAllItems()) { commandManager.RegisterAlias(alias.Key, alias.Value).UnwrapToLog(Log); } // Connect after everyting is set up return(ts3client.Connect()); }
public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem) { if (SearchItem is SearchParameterQuantity) { var SearchTypeNumber = SearchItem as SearchParameterQuantity; foreach (var SearchValue in SearchTypeNumber.ValueList) { if (SearchTypeNumber.Modifier.HasValue == false) { if (SearchValue.Prefix.HasValue == false) { NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue); } else { switch (SearchValue.Prefix) { case SearchParameter.SearchComparator.Eq: NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue); break; case SearchParameter.SearchComparator.Ne: NewPredicate = CollectionNotEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue); break; case SearchParameter.SearchComparator.Gt: NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyGreaterThan(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code)); break; case SearchParameter.SearchComparator.Lt: NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyLessThan(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code)); break; case SearchParameter.SearchComparator.Ge: NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyGreaterThanOrEqualTo(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code)); break; case SearchParameter.SearchComparator.Le: NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyLessThanOrEqualTo(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code)); break; case SearchParameter.SearchComparator.Sa: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity."); case SearchParameter.SearchComparator.Eb: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity."); case SearchParameter.SearchComparator.Ap: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator)); } } } else { switch (SearchTypeNumber.Modifier) { case SearchParameter.SearchModifierCode.Missing: if (SearchValue.Prefix.HasValue == false) { if (SearchValue.IsMissing) { NewPredicate = NewPredicate.Or(Search.SearchParameterIsNull <ResIndexQuantityType>(SearchTypeNumber.Id)); } else { NewPredicate = NewPredicate.Or(Search.SearchParameterIdIsNotNull <ResIndexQuantityType>(SearchTypeNumber.Id)); } } else { switch (SearchValue.Prefix) { case SearchParameter.SearchComparator.Eq: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Ne: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Gt: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Lt: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Ge: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Le: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Sa: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Eb: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); case SearchParameter.SearchComparator.Ap: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator)); } } break; case SearchParameter.SearchModifierCode.Exact: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.Contains: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.Text: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.Type: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.Below: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.Above: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.In: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); case SearchParameter.SearchModifierCode.NotIn: throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeNumber.Modifier.Value.GetLiteral(), (int)SearchTypeNumber.Modifier, typeof(SearchParameter.SearchModifierCode)); } } } } return(NewPredicate); }
private static ExpressionStarter <ResCurrentType> CollectionNotEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterQuantity SearchTypeNumber, SearchParameterQuantityValue SearchValue) { var NotEqualTo_Expression = Search.QuantityCollectionAllNotEqualTo( SearchTypeNumber.Id, Common.Tools.DecimalSupport.CalculateLowNumber(SearchValue.Value, SearchValue.Scale), SearchValue.Value, Common.Tools.DecimalSupport.CalculateHighNumber(SearchValue.Value, SearchValue.Scale), SearchValue.System, SearchValue.Code); var CollectionNotNull_Expression2 = Search.SearchParameterIdIsNotNull <ResIndexQuantityType>(SearchTypeNumber.Id); ExpressionStarter <ResCurrentType> NewAndPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>(); NewAndPredicate = NewAndPredicate.And(NotEqualTo_Expression); NewAndPredicate = NewAndPredicate.And(CollectionNotNull_Expression2); NewPredicate = NewPredicate.Or(NewAndPredicate); return(NewPredicate); }
public static void Build(List <ISearchParameterBase> SearchParametersList, ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> MainPredicate) { var LastUpdatedSearchParamerterList = SearchParametersList.Where(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_lastUpdated"); if (LastUpdatedSearchParamerterList != null) { ExpressionStarter <ResCurrentType> NewLastUpdatedPredicate = null; foreach (var LastUpdatedSearchParameter in LastUpdatedSearchParamerterList) { if (LastUpdatedSearchParameter is SearchParameterDateTime SearchTypeToken) { NewLastUpdatedPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>(); foreach (var SearchValue in SearchTypeToken.ValueList) { if (!SearchTypeToken.Modifier.HasValue) { if (SearchValue.Prefix.HasValue == false) { NewLastUpdatedPredicate = Equals(Search, NewLastUpdatedPredicate, SearchValue); } else { switch (SearchValue.Prefix) { case SearchParameter.SearchComparator.Eq: NewLastUpdatedPredicate = Equals(Search, NewLastUpdatedPredicate, SearchValue); break; case SearchParameter.SearchComparator.Ne: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated."); case SearchParameter.SearchComparator.Gt: var ExpressionGreaterThan = Search.LastUpdatedPropertyGreaterThan(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision)); NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionGreaterThan); break; case SearchParameter.SearchComparator.Lt: var ExpressionLessThan = Search.LastUpdatedPropertyLessThan(SearchValue.Value); NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionLessThan); break; case SearchParameter.SearchComparator.Ge: var ExpressionGreaterThanOrEqualTo = Search.LastUpdatedPropertyGreaterThanOrEqualTo(SearchValue.Value); NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionGreaterThanOrEqualTo); break; case SearchParameter.SearchComparator.Le: var ExpressionLessThanOrEqualTo = Search.LastUpdatedPropertyLessThanOrEqualTo(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision)); NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionLessThanOrEqualTo); break; case SearchParameter.SearchComparator.Sa: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated."); case SearchParameter.SearchComparator.Eb: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated."); case SearchParameter.SearchComparator.Ap: throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator)); } } } else { throw new FormatException($"The search Modifiers are not supported for search parameter _lastUpdated. Found modifier {SearchTypeToken.Modifier.Value.GetLiteral()}"); } } } MainPredicate.Extend <ResCurrentType>(NewLastUpdatedPredicate, PredicateOperator.And); } SearchParametersList.RemoveAll(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_lastUpdated"); } }
public CommonRepository(IPyroDbContext IPyroDbContext, IPrimaryServiceRootCache IPrimaryServiceRootCache) : base(IPyroDbContext) { this.IPrimaryServiceRootCache = IPrimaryServiceRootCache; _ResourceSearch = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(IPrimaryServiceRootCache); }
/// <summary> /// Invia una richiesta di ricerca al servizio remoto e attende che venga completata. /// </summary> /// <remarks> /// Il lavoro viene eseguito su un nuovo thread. /// </remarks> private void ExecuteSearch() { ProcessingServicesList.Clear(); SelectedProcessingServiceIndex = -1; TaskResult = string.Empty; ReportText = string.Empty; string resourceClassName, resourceClassVersion; if (!TryExtractResourceInfo(TaskData, out resourceClassName, out resourceClassVersion)) { UpdateReportText("Errore: impossibile trovare nome e versione del componente di elaborazione."); return; } if (!IsValidUri(SearchNodeUri)) { UpdateReportText("Errore: indirizzo non valido per il servizio di ricerca ({0}).", SearchNodeUri); return; } IsBusy = true; new Thread(() => { ResourceSearch rs = new ResourceSearch(SearchNodeUri, TimeSpan.FromSeconds(5), 6); rs.OnResourceSearchProgress += new ResourceSearchProgressHandler(ResourceSearch_Progress); rs.OnResourceSearchCompleted += new ResourceSearchCompletedHandler(ResourceSearch_Completed); rs.SetSearchOptions(resourceClassName, resourceClassVersion); rs.Start(); } ) { Name = "SearchThread", IsBackground = true }.Start(); }
public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem, IDtoRootUrlStore PrimaryRootUrlStore) { if (SearchItem is SearchParameterReferance SearchTypeReference) { //Improved Query when searching for FhirIds for the same Resource type and search parameter yet different FhirIds. //It creates a SQL 'IN' cause instead of many 'OR' statements and should be more efficient. //Heavily used in chain searching where we traverse many References. //The 'Type' modifier is already resolved when the search parameter is parsed, so the SearchValue.FhirRequestUri.ResourseName is the correct Resource name at this stage if (SearchTypeReference.ValueList.Count > 1 && SearchTypeReference.ValueList.TrueForAll(x => x.FhirRequestUri.IsRelativeToServer && x.FhirRequestUri.ResourseName == SearchTypeReference.ValueList[0].FhirRequestUri.ResourseName && string.IsNullOrWhiteSpace(x.FhirRequestUri.VersionId))) { string[] ReferenceFhirIdArray = SearchTypeReference.ValueList.Select(x => x.FhirRequestUri.ResourceId).ToArray(); NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey_Many_FhirIds(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchTypeReference.ValueList[0].FhirRequestUri.ResourseName, ReferenceFhirIdArray, SearchTypeReference.ValueList[0].FhirRequestUri.VersionId)); return(NewPredicate); } foreach (var SearchValue in SearchTypeReference.ValueList) { if (!SearchTypeReference.Modifier.HasValue) { if (IsServiceUrlPrimary(PrimaryRootUrlStore, SearchValue)) { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId)); } else { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByUrlString(SearchTypeReference.Id, SearchValue.FhirRequestUri.UriPrimaryServiceRoot.OriginalString.StripHttp().ToLower(), SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId)); } } else { switch (SearchTypeReference.Modifier) { case SearchParameter.SearchModifierCode.Missing: if (SearchValue.IsMissing) { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionIsNull(SearchTypeReference.Id)); } else { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionIsNotNull(SearchTypeReference.Id)); } break; case SearchParameter.SearchModifierCode.Exact: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.Contains: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.Text: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.Type: //The 'Type' modifier is already resolved when the search parameter is parsed, so the SearchValue.FhirRequestUri.ResourseName is the correct Resource name at this stage if (IsServiceUrlPrimary(PrimaryRootUrlStore, SearchValue)) { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId)); } else { NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByUrlString(SearchTypeReference.Id, SearchValue.FhirRequestUri.UriPrimaryServiceRoot.OriginalString.StripHttp().ToLower(), SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId)); } break; case SearchParameter.SearchModifierCode.Below: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.Above: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.In: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); case SearchParameter.SearchModifierCode.NotIn: throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference."); default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeReference.Modifier.ToString(), (int)SearchTypeReference.Modifier, typeof(SearchParameter.SearchModifierCode)); } } } } return(NewPredicate); }
protected ExpressionStarter <ResCurrentType> PredicateSearchParameter < ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(SearchParameterBase SearchItem) where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new() where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> { var Search = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(); ExpressionStarter <ResCurrentType> Predicate = LinqKit.PredicateBuilder.New <ResCurrentType>(); switch (SearchItem.Type) { case SearchParamType.Date: Predicate = DateTimePeriodPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); break; case SearchParamType.Number: { if (SearchItem is SearchParameterNumber) { var SearchTypeNumber = SearchItem as SearchParameterNumber; foreach (var SearchValue in SearchTypeNumber.ValueList) { if (SearchTypeNumber.Name != "page") { //ToDo: more needed here } } } Predicate = NumberPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); } break; case SearchParamType.Quantity: Predicate = QuantityPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); break; case SearchParamType.Reference: Predicate = ReferancePredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem, IPrimaryServiceRootCache.GetPrimaryRootUrlFromDatabase()); break; case SearchParamType.String: Predicate = StringPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); break; case SearchParamType.Token: Predicate = TokenPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); break; case SearchParamType.Uri: Predicate = UriPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem); break; default: throw new System.ComponentModel.InvalidEnumArgumentException(SearchItem.Type.ToString(), (int)SearchItem.Type, typeof(SearchParamType)); } return(Predicate); }
public async Task <ActionResult> Filter(ResourceSearch specifiedResource) { IQueryable <Resource> resources = db.Resources.Include(r => r.Disaster) .Include(r => r.Person) .Include(r => r.ResourceType); if (specifiedResource.Description != null) { resources = resources.Where(x => x.Description.Contains(specifiedResource.Description)); } if (specifiedResource.NullableCreatedDate != null) { resources = resources.Where(x => DbFunctions.TruncateTime(x.EntryMade) == DbFunctions.TruncateTime(specifiedResource.NullableCreatedDate)); } if (specifiedResource.NullableStartDate != null) { resources = resources.Where(x => DbFunctions.TruncateTime(x.StartOfAvailability) == DbFunctions.TruncateTime(specifiedResource.NullableStartDate)); } if (specifiedResource.NullableEndDate != null) { resources = resources.Where(x => DbFunctions.TruncateTime(x.EndOfAvailability) == DbFunctions.TruncateTime(specifiedResource.NullableEndDate)); } if (specifiedResource.Location.AddressLine1 != null) { resources = resources.Where(x => x.Location.AddressLine1.Contains(specifiedResource.Location.AddressLine1)); } if (specifiedResource.Location.AddressLine2 != null) { resources = resources.Where(x => x.Location.AddressLine2.Contains(specifiedResource.Location.AddressLine2)); } if (specifiedResource.Location.AddressLine3 != null) { resources = resources.Where(x => x.Location.AddressLine3.Contains(specifiedResource.Location.AddressLine3)); } if (specifiedResource.Location.City != null) { resources = resources.Where(x => x.Location.City.Contains(specifiedResource.Location.City)); } if (specifiedResource.Location.County != null) { resources = resources.Where(x => x.Location.County.Contains(specifiedResource.Location.County)); } if (specifiedResource.Location.State != null) { resources = resources.Where(x => x.Location.State.Contains(specifiedResource.Location.State)); } if (specifiedResource.Location.Country != null) { resources = resources.Where(x => x.Location.Country.Contains(specifiedResource.Location.Country)); } if (specifiedResource.Location.PostalCode != null) { resources = resources.Where(x => x.Location.PostalCode.Contains(specifiedResource.Location.PostalCode)); } if (specifiedResource.Qty > 0.1m) { resources = resources.Where(x => x.Qty == specifiedResource.Qty); } if (specifiedResource.SelectedResourceTypeId != ResourceSearch.GeneralSelectId) { resources = resources.Where(x => x.ResourceTypeId == specifiedResource.SelectedResourceTypeId); } if (specifiedResource.SelectedDisasterId != ResourceSearch.GeneralSelectId) { resources = resources.Where(x => x.DisasterId == specifiedResource.SelectedDisasterId); } if (specifiedResource.Status != ResourceStatus.All) { resources = resources.Where(x => x.Status == specifiedResource.Status); } return(View("Index", new AdminResourceIndexViewModel() { Resources = resources, ResourceSearch = new ResourceSearch(await db.Disasters.ToListAsync(), await db.ResourceTypes.ToListAsync()) })); }
public PlaylistManager(PlaylistDatabase database, ResourceSearch resourceSearch) { this.database = database; this.resourceSearch = resourceSearch; }