From 12d8aaf8a61da53621d360b94eef814d667d7c3b Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 26 Jun 2022 07:57:28 -0500 Subject: [PATCH] Request available level 3 products --- .../provider/aws_level3_data_provider.test.cpp | 10 ++++++++++ .../scwx/provider/aws_level3_data_provider.hpp | 3 +++ .../scwx/provider/nexrad_data_provider.hpp | 13 +++++++++++++ .../scwx/provider/aws_level3_data_provider.cpp | 18 ++++++++++++++++++ .../scwx/provider/nexrad_data_provider.cpp | 7 +++++++ 5 files changed, 51 insertions(+) diff --git a/test/source/scwx/provider/aws_level3_data_provider.test.cpp b/test/source/scwx/provider/aws_level3_data_provider.test.cpp index f9ecd3eb..4e88e4e6 100644 --- a/test/source/scwx/provider/aws_level3_data_provider.test.cpp +++ b/test/source/scwx/provider/aws_level3_data_provider.test.cpp @@ -56,6 +56,16 @@ TEST(AwsLevel3DataProvider, Refresh) EXPECT_EQ(newObjects, totalObjects); } +TEST(AwsLevel3DataProvider, GetAvailableProducts) +{ + AwsLevel3DataProvider provider("KLSX", "N0B"); + + provider.RequestAvailableProducts(); + auto products = provider.GetAvailableProducts(); + + EXPECT_GT(products.size(), 0); +} + TEST(AwsLevel3DataProvider, TimePointValid) { using namespace std::chrono; diff --git a/wxdata/include/scwx/provider/aws_level3_data_provider.hpp b/wxdata/include/scwx/provider/aws_level3_data_provider.hpp index 5c307a2f..f0f3028b 100644 --- a/wxdata/include/scwx/provider/aws_level3_data_provider.hpp +++ b/wxdata/include/scwx/provider/aws_level3_data_provider.hpp @@ -33,6 +33,9 @@ public: static std::chrono::system_clock::time_point GetTimePointFromKey(const std::string& key); + void RequestAvailableProducts(); + std::vector GetAvailableProducts(); + protected: std::string GetPrefix(std::chrono::system_clock::time_point date); diff --git a/wxdata/include/scwx/provider/nexrad_data_provider.hpp b/wxdata/include/scwx/provider/nexrad_data_provider.hpp index 4d4fdf81..1fcbee19 100644 --- a/wxdata/include/scwx/provider/nexrad_data_provider.hpp +++ b/wxdata/include/scwx/provider/nexrad_data_provider.hpp @@ -100,6 +100,19 @@ public: virtual std::chrono::system_clock::time_point GetTimePointByKey(const std::string& key) const = 0; + /** + * Requests available NEXRAD products for the current radar site, and adds + * the list to the cache. + */ + virtual void RequestAvailableProducts(); + + /** + * Gets the list of available NEXRAD products for the current radar site. + * + * @return Available NEXRAD products + */ + virtual std::vector GetAvailableProducts(); + private: class Impl; std::unique_ptr p; diff --git a/wxdata/source/scwx/provider/aws_level3_data_provider.cpp b/wxdata/source/scwx/provider/aws_level3_data_provider.cpp index eac3171c..5f9e97e7 100644 --- a/wxdata/source/scwx/provider/aws_level3_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_level3_data_provider.cpp @@ -118,6 +118,24 @@ AwsLevel3DataProvider::GetTimePointFromKey(const std::string& key) return time; } +void AwsLevel3DataProvider::RequestAvailableProducts() +{ + p->ListProducts(); +} + +std::vector AwsLevel3DataProvider::GetAvailableProducts() +{ + std::shared_lock readLock(productMutex_); + + auto siteProductMap = productMap_.find(p->radarSite_); + if (siteProductMap != productMap_.cend()) + { + return siteProductMap->second; + } + + return {}; +} + void AwsLevel3DataProvider::Impl::ListProducts() { std::shared_lock readLock(productMutex_); diff --git a/wxdata/source/scwx/provider/nexrad_data_provider.cpp b/wxdata/source/scwx/provider/nexrad_data_provider.cpp index 74274fe8..3ba4422e 100644 --- a/wxdata/source/scwx/provider/nexrad_data_provider.cpp +++ b/wxdata/source/scwx/provider/nexrad_data_provider.cpp @@ -22,5 +22,12 @@ NexradDataProvider::NexradDataProvider(NexradDataProvider&&) noexcept = default; NexradDataProvider& NexradDataProvider::operator=(NexradDataProvider&&) noexcept = default; +void NexradDataProvider::RequestAvailableProducts() {} + +std::vector NexradDataProvider::GetAvailableProducts() +{ + return {}; +} + } // namespace provider } // namespace scwx