Ejemplo n.º 1
0
        /// <inheritdoc/>
        public async Task <QueryApplicationsResponseModel> QueryApplicationsAsync(
            string applicationName,
            string applicationUri,
            uint applicationType,
            string productUri,
            IList <string> serverCapabilities,
            QueryApplicationState?applicationState,
            string nextPageLink,
            int?maxRecordsToReturn)
        {
            List <Application> records = new List <Application>();
            bool matchQuery            = false;
            bool complexQuery          =
                !String.IsNullOrEmpty(applicationName) ||
                !String.IsNullOrEmpty(applicationUri) ||
                !String.IsNullOrEmpty(productUri) ||
                (serverCapabilities != null && serverCapabilities.Count > 0);

            if (complexQuery)
            {
                matchQuery =
                    ApplicationsDatabaseBase.IsMatchPattern(applicationName) ||
                    ApplicationsDatabaseBase.IsMatchPattern(applicationUri) ||
                    ApplicationsDatabaseBase.IsMatchPattern(productUri);
            }

            if (maxRecordsToReturn < 0)
            {
                maxRecordsToReturn = _defaultRecordsPerQuery;
            }
            SqlQuerySpec sqlQuerySpec = CreateServerQuery(0, 0, applicationState);

            do
            {
                IEnumerable <Application> applications;
                (nextPageLink, applications) = await _applications.GetPageAsync(sqlQuerySpec, nextPageLink, maxRecordsToReturn - records.Count);

                foreach (var application in applications)
                {
                    if (!String.IsNullOrEmpty(applicationName))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ApplicationName, applicationName))
                        {
                            continue;
                        }
                    }

                    if (!String.IsNullOrEmpty(applicationUri))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ApplicationUri, applicationUri))
                        {
                            continue;
                        }
                    }

                    if (!String.IsNullOrEmpty(productUri))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ProductUri, productUri))
                        {
                            continue;
                        }
                    }

                    string[] capabilities = null;
                    if (!String.IsNullOrEmpty(application.ServerCapabilities))
                    {
                        capabilities = application.ServerCapabilities.Split(',');
                    }

                    if (serverCapabilities != null && serverCapabilities.Count > 0)
                    {
                        bool match = true;
                        for (int ii = 0; ii < serverCapabilities.Count; ii++)
                        {
                            if (capabilities == null || !capabilities.Contains(serverCapabilities[ii]))
                            {
                                match = false;
                                break;
                            }
                        }

                        if (!match)
                        {
                            continue;
                        }
                    }

                    records.Add(application);

                    if (maxRecordsToReturn > 0 && records.Count >= maxRecordsToReturn)
                    {
                        break;
                    }
                }
            } while (nextPageLink != null);

            return(new QueryApplicationsResponseModel(records.ToArray(), nextPageLink));
        }
Ejemplo n.º 2
0
        /// <inheritdoc/>
        public async Task <QueryApplicationsByIdResponseModel> QueryApplicationsByIdAsync(
            uint startingRecordId,
            uint maxRecordsToReturn,
            string applicationName,
            string applicationUri,
            uint applicationType,
            string productUri,
            IList <string> serverCapabilities,
            QueryApplicationState?applicationState
            )
        {
            // TODO: implement last query time
            DateTime lastCounterResetTime = DateTime.MinValue;
            uint     nextRecordId         = 0;

            List <Application> records = new List <Application>();

            bool matchQuery   = false;
            bool complexQuery =
                !String.IsNullOrEmpty(applicationName) ||
                !String.IsNullOrEmpty(applicationUri) ||
                !String.IsNullOrEmpty(productUri) ||
                (serverCapabilities != null && serverCapabilities.Count > 0);

            if (complexQuery)
            {
                matchQuery =
                    ApplicationsDatabaseBase.IsMatchPattern(applicationName) ||
                    ApplicationsDatabaseBase.IsMatchPattern(applicationUri) ||
                    ApplicationsDatabaseBase.IsMatchPattern(productUri);
            }

            bool lastQuery = false;

            do
            {
                uint         queryRecords = complexQuery ? _defaultRecordsPerQuery : maxRecordsToReturn;
                SqlQuerySpec sqlQuerySpec = CreateServerQuery(startingRecordId, queryRecords, applicationState);
                nextRecordId = startingRecordId + 1;
                var applications = await _applications.GetAsync(sqlQuerySpec);

                lastQuery = queryRecords == 0 || applications.Count() < queryRecords || applications.Count() == 0;

                foreach (var application in applications)
                {
                    startingRecordId = (uint)application.ID + 1;
                    nextRecordId     = startingRecordId;

                    if (!String.IsNullOrEmpty(applicationName))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ApplicationName, applicationName))
                        {
                            continue;
                        }
                    }

                    if (!String.IsNullOrEmpty(applicationUri))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ApplicationUri, applicationUri))
                        {
                            continue;
                        }
                    }

                    if (!String.IsNullOrEmpty(productUri))
                    {
                        if (!ApplicationsDatabaseBase.Match(application.ProductUri, productUri))
                        {
                            continue;
                        }
                    }

                    string[] capabilities = null;
                    if (!String.IsNullOrEmpty(application.ServerCapabilities))
                    {
                        capabilities = application.ServerCapabilities.Split(',');
                    }

                    if (serverCapabilities != null && serverCapabilities.Count > 0)
                    {
                        bool match = true;
                        for (int ii = 0; ii < serverCapabilities.Count; ii++)
                        {
                            if (capabilities == null || !capabilities.Contains(serverCapabilities[ii]))
                            {
                                match = false;
                                break;
                            }
                        }

                        if (!match)
                        {
                            continue;
                        }
                    }

                    records.Add(application);

                    if (maxRecordsToReturn > 0 && --maxRecordsToReturn == 0)
                    {
                        break;
                    }
                }
            } while (maxRecordsToReturn > 0 && !lastQuery);

            return(new QueryApplicationsByIdResponseModel(records.ToArray(), lastCounterResetTime, nextRecordId));
        }