/// <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)); }
/// <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)); }