/// <inheritdoc/> public async Task <ApplicationInfoListModel> QueryApplicationsAsync( ApplicationRegistrationQueryModel query, int?pageSize, CancellationToken ct) { var result = await _client.QueryApplicationsAsync(query.ToApiModel(), pageSize, ct); return(result.ToServiceModel()); }
/// <inheritdoc/> public async Task <ApplicationInfoListModel> QueryApplicationsAsync( ApplicationRegistrationQueryModel query, int?pageSize) { var result = await _client.QueryApplicationsAsync( Map <ApplicationRegistrationQueryApiModel>(query), pageSize); return(Map <ApplicationInfoListModel>(result)); }
/// <summary> /// Create from service model /// </summary> /// <param name="model"></param> public ApplicationRegistrationQueryApiModel(ApplicationRegistrationQueryModel model) { ApplicationType = model.ApplicationType; ApplicationUri = model.ApplicationUri; ProductUri = model.ProductUri; ApplicationName = model.ApplicationName; Locale = model.Locale; Capability = model.Capability; SiteOrSupervisorId = model.SiteOrSupervisorId; IncludeNotSeenSince = model.IncludeNotSeenSince; }
/// <summary> /// Create from service model /// </summary> /// <param name="model"></param> public ApplicationRegistrationQueryApiModel(ApplicationRegistrationQueryModel model) { ApplicationType = model.ApplicationType; ApplicationUri = model.ApplicationUri; ProductUri = model.ProductUri; ApplicationName = model.ApplicationName; Locale = model.Locale; Capability = model.Capability; SiteOrSupervisorId = model.SiteOrSupervisorId; IncludeNotSeenSince = model.IncludeNotSeenSince; DiscoveryProfileUri = model.DiscoveryProfileUri; GatewayServerUri = model.GatewayServerUri; State = model.State; }
/// <summary> /// Find applications /// </summary> /// <param name="service"></param> /// <param name="query"></param> /// <returns></returns> public static async Task <List <ApplicationInfoModel> > QueryAllApplicationsAsync( this IApplicationRegistry service, ApplicationRegistrationQueryModel query) { var registrations = new List <ApplicationInfoModel>(); var result = await service.QueryApplicationsAsync(query); registrations.AddRange(result.Items); while (result.ContinuationToken != null) { result = await service.ListApplicationsAsync(result.ContinuationToken); registrations.AddRange(result.Items); } return(registrations); }
/// <inheritdoc/> public async Task <ApplicationInfoListModel> QueryAsync( ApplicationRegistrationQueryModel model, int?pageSize, CancellationToken ct) { var query = "SELECT * FROM devices WHERE " + $"tags.{nameof(ApplicationRegistration.DeviceType)} = 'Application' "; if (!(model?.IncludeNotSeenSince ?? false)) { // Scope to non deleted applications query += $"AND NOT IS_DEFINED(tags.{nameof(BaseRegistration.NotSeenSince)}) "; } if (model?.Locale != null) { if (model?.ApplicationName != null) { // If application name provided, include it in search query += $"AND tags.{nameof(ApplicationRegistration.LocalizedNames)}" + $".{model.Locale} = '{model.ApplicationName}' "; } else { // Just search for locale query += $"AND IS_DEFINED(tags.{nameof(ApplicationRegistration.LocalizedNames)}" + $".{model.Locale}) "; } } else if (model?.ApplicationName != null) { // If application name provided, search for default name query += $"AND tags.{nameof(ApplicationRegistration.ApplicationName)} = " + $"'{model.ApplicationName}' "; } if (model?.ProductUri != null) { // If product uri provided, include it in search query += $"AND tags.{nameof(ApplicationRegistration.ProductUri)} = " + $"'{model.ProductUri}' "; } if (model?.GatewayServerUri != null) { // If gateway uri provided, include it in search query += $"AND tags.{nameof(ApplicationRegistration.GatewayServerUri)} = " + $"'{model.GatewayServerUri}' "; } if (model?.DiscoveryProfileUri != null) { // If discovery profile uri provided, include it in search query += $"AND tags.{nameof(ApplicationRegistration.DiscoveryProfileUri)} = " + $"'{model.DiscoveryProfileUri}' "; } if (model?.ApplicationUri != null) { // If ApplicationUri provided, include it in search query += $"AND tags.{nameof(ApplicationRegistration.ApplicationUriLC)} = " + $"'{model.ApplicationUri.ToLowerInvariant()}' "; } if (model?.State != null) { // If searching for state include it in search query += $"AND tags.{nameof(ApplicationRegistration.ApplicationState)} = " + $"'{model.State}' "; } if (model?.ApplicationType == ApplicationType.Client || model?.ApplicationType == ApplicationType.ClientAndServer) { // If searching for clients include it in search query += $"AND tags.{nameof(ApplicationType.Client)} = true "; } if (model?.ApplicationType == ApplicationType.Server || model?.ApplicationType == ApplicationType.ClientAndServer) { // If searching for servers include it in search query += $"AND tags.{nameof(ApplicationType.Server)} = true "; } if (model?.ApplicationType == ApplicationType.DiscoveryServer) { // If searching for servers include it in search query += $"AND tags.{nameof(ApplicationType.DiscoveryServer)} = true "; } if (model?.Capability != null) { // If Capabilities provided, filter results var tag = JTokenEx.SanitizePropertyName(model.Capability) .ToUpperInvariant(); query += $"AND tags.{tag} = true "; } if (model?.SiteOrSupervisorId != null) { // If ApplicationUri provided, include it in search query += $"AND tags.{nameof(BaseRegistration.SiteOrSupervisorId)} = " + $"'{model.SiteOrSupervisorId}' "; } var queryResult = await _iothub.QueryDeviceTwinsAsync(query, null, pageSize); return(new ApplicationInfoListModel { ContinuationToken = queryResult.ContinuationToken, Items = queryResult.Items .Select(t => t.ToApplicationRegistration()) .Select(s => s.ToServiceModel()) .ToList() }); }
/// <inheritdoc/> public Task <ApplicationInfoListModel> QueryApplicationsAsync( ApplicationRegistrationQueryModel query, int?pageSize, CancellationToken ct) { return(Task.FromResult(new ApplicationInfoListModel())); }
/// <inheritdoc/> public async Task <ApplicationInfoListModel> QueryApplicationsAsync( ApplicationRegistrationQueryModel request, int?maxRecordsToReturn, CancellationToken ct) { var records = new List <ApplicationDocument>(); var matchQuery = false; var complexQuery = !string.IsNullOrEmpty(request.ApplicationName) || !string.IsNullOrEmpty(request.ApplicationUri) || !string.IsNullOrEmpty(request.ProductUri) || !string.IsNullOrEmpty(request.Capability); if (complexQuery) { matchQuery = Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.IsMatchPattern( request.ApplicationName) || Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.IsMatchPattern( request.ApplicationUri) || Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.IsMatchPattern( request.ProductUri); } if (maxRecordsToReturn == null || maxRecordsToReturn < 0) { maxRecordsToReturn = kDefaultRecordsPerQuery; } var query = CreateServerQuery(0, maxRecordsToReturn.Value, request.State); while (query.HasMore()) { var applications = await query.ReadAsync(); foreach (var application in applications.Select(a => a.Value)) { if (!string.IsNullOrEmpty(request.ApplicationName)) { if (!Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.Match( application.ApplicationName, request.ApplicationName)) { continue; } } if (!string.IsNullOrEmpty(request.ApplicationUri)) { if (!Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.Match( application.ApplicationUri, request.ApplicationUri)) { continue; } } if (!string.IsNullOrEmpty(request.ProductUri)) { if (!Opc.Ua.Gds.Server.Database.ApplicationsDatabaseBase.Match( application.ProductUri, request.ProductUri)) { continue; } } if (!string.IsNullOrEmpty(request.Capability)) { if (!string.IsNullOrEmpty(application.ServerCapabilities) || !application.ServerCapabilities.Contains(request.Capability)) { continue; } } records.Add(application); if (maxRecordsToReturn > 0 && records.Count >= maxRecordsToReturn) { break; } } } return(new ApplicationInfoListModel { Items = records.Select(a => a.ToServiceModel()).ToList(), ContinuationToken = null }); }