diff --git a/wxdata/include/scwx/provider/aws_level2_data_provider.hpp b/wxdata/include/scwx/provider/aws_level2_data_provider.hpp index 7553bc66..2d99f801 100644 --- a/wxdata/include/scwx/provider/aws_level2_data_provider.hpp +++ b/wxdata/include/scwx/provider/aws_level2_data_provider.hpp @@ -1,10 +1,6 @@ #pragma once -#include - -#include -#include -#include +#include namespace scwx { @@ -13,7 +9,10 @@ namespace provider class AwsLevel2DataProviderImpl; -class AwsLevel2DataProvider +/** + * @brief AWS Level 2 Data Provider + */ +class AwsLevel2DataProvider : public Level2DataProvider { public: explicit AwsLevel2DataProvider(const std::string& radarSite); diff --git a/wxdata/include/scwx/provider/level2_data_provider.hpp b/wxdata/include/scwx/provider/level2_data_provider.hpp new file mode 100644 index 00000000..976020b4 --- /dev/null +++ b/wxdata/include/scwx/provider/level2_data_provider.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include + +#include +#include +#include + +namespace scwx +{ +namespace provider +{ + +class Level2DataProviderImpl; + +class Level2DataProvider +{ +public: + explicit Level2DataProvider(); + ~Level2DataProvider(); + + Level2DataProvider(const Level2DataProvider&) = delete; + Level2DataProvider& operator=(const Level2DataProvider&) = delete; + + Level2DataProvider(Level2DataProvider&&) noexcept; + Level2DataProvider& operator=(Level2DataProvider&&) noexcept; + + virtual size_t cache_size() const = 0; + + /** + * Finds the most recent key in the cache, no later than the time provided. + * + * @param time Upper-bound time for the key search + * + * @return Level 2 data key + */ + virtual std::string FindKey(std::chrono::system_clock::time_point time) = 0; + + /** + * Lists level 2 objects for the date supplied, and adds them to the cache. + * + * @param date Date for which to list objects + * + * @return - New objects found for the given date + * - Total objects found for the given date + */ + virtual std::pair + ListObjects(std::chrono::system_clock::time_point date) = 0; + + /** + * Loads a level 2 object by the given key. + * + * @param key Level 2 data key + * + * @return Level 2 data + */ + virtual std::shared_ptr + LoadObjectByKey(const std::string& key) = 0; + + /** + * Lists level 2 objects for the current date, and adds them to the cache. If + * no objects have been added to the cache for the current date, the previous + * date is also queried for data. + * + * @return New objects found + */ + virtual size_t Refresh() = 0; + +private: + std::unique_ptr p; +}; + +} // namespace provider +} // namespace scwx diff --git a/wxdata/source/scwx/provider/level2_data_provider.cpp b/wxdata/source/scwx/provider/level2_data_provider.cpp new file mode 100644 index 00000000..934cf781 --- /dev/null +++ b/wxdata/source/scwx/provider/level2_data_provider.cpp @@ -0,0 +1,29 @@ +#include + +namespace scwx +{ +namespace provider +{ + +static const std::string logPrefix_ = "scwx::provider::level2_data_provider"; + +class Level2DataProviderImpl +{ +public: + explicit Level2DataProviderImpl() {} + + ~Level2DataProviderImpl() {} +}; + +Level2DataProvider::Level2DataProvider() : + p(std::make_unique()) +{ +} +Level2DataProvider::~Level2DataProvider() = default; + +Level2DataProvider::Level2DataProvider(Level2DataProvider&&) noexcept = default; +Level2DataProvider& +Level2DataProvider::operator=(Level2DataProvider&&) noexcept = default; + +} // namespace provider +} // namespace scwx diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index ae139823..ebe5f0e5 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -34,8 +34,10 @@ set(SRC_COMMON source/scwx/common/color_table.cpp source/scwx/common/products.cpp source/scwx/common/sites.cpp source/scwx/common/vcp.cpp) -set(HDR_PROVIDER include/scwx/provider/aws_level2_data_provider.hpp) -set(SRC_PROVIDER source/scwx/provider/aws_level2_data_provider.cpp) +set(HDR_PROVIDER include/scwx/provider/aws_level2_data_provider.hpp + include/scwx/provider/level2_data_provider.hpp) +set(SRC_PROVIDER source/scwx/provider/aws_level2_data_provider.cpp + source/scwx/provider/level2_data_provider.cpp) set(HDR_UTIL include/scwx/util/float.hpp include/scwx/util/iterator.hpp include/scwx/util/logger.hpp