/// <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;
 }
Esempio n. 4
0
 /// <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);
        }
Esempio n. 6
0
        /// <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
            });
        }