diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp index 54935ab54b350e300bff73cae61c2045ab2e0b7a..40bf5948260535dd4e0ee9b25e0a3c984c185933 100644 --- a/examples/worker/process_folder/process_folder.cpp +++ b/examples/worker/process_folder/process_folder.cpp @@ -28,7 +28,7 @@ std::string ProcessCommandArguments(int argc, char* argv[]) { std::unique_ptr<hidra2::DataBroker> CreateBroker(const std::string& folder) { hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(folder, &err); if (err != WorkerErrorCode::kOK) { std::cout << "Cannot create broker" << std::endl; exit(EXIT_FAILURE); diff --git a/tests/worker/connect_multithread/content_multithread.cpp b/tests/worker/connect_multithread/content_multithread.cpp index 677fc65fc40bdd55e05244cf03776a624fa1a2bd..e4bfcceb82c2dff8c4175576aace1342f6d968c8 100644 --- a/tests/worker/connect_multithread/content_multithread.cpp +++ b/tests/worker/connect_multithread/content_multithread.cpp @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) { auto args = GetArgs(argc, argv); hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(args.folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(args.folder, &err); std::vector<WorkerErrorCode>errors(args.nthreads, WorkerErrorCode::kUnknownIOError); diff --git a/tests/worker/next_multithread/next_multithread.cpp b/tests/worker/next_multithread/next_multithread.cpp index c94436b94eb28005ff982f0632cddbe721bdea2b..01f66e9fb9274c1e80052f9bbd093885940680dc 100644 --- a/tests/worker/next_multithread/next_multithread.cpp +++ b/tests/worker/next_multithread/next_multithread.cpp @@ -42,7 +42,7 @@ Args GetArgs(int argc, char* argv[]) { void ReadFiles(const Args& args) { hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(args.folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(args.folder, &err); broker->Connect(); std::vector<hidra2::FileInfo>file_infos(args.nthreads); diff --git a/worker/api/cpp/CMakeLists.txt b/worker/api/cpp/CMakeLists.txt index 46b83b837855d6bd9eefa9baef46d5253e625fe2..44b0b1912c6d82659f66b648c0dcd3bc48603464 100644 --- a/worker/api/cpp/CMakeLists.txt +++ b/worker/api/cpp/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME hidra2-worker) -set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h) +set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h src/server_data_broker.cpp src/server_data_broker.h) ################################ diff --git a/worker/api/cpp/include/worker/data_broker.h b/worker/api/cpp/include/worker/data_broker.h index 57393eab7b6ac17b80fa86295ab20168779f3d13..71c69d2a2fae9e916e29c98f46a410fe676d5b45 100644 --- a/worker/api/cpp/include/worker/data_broker.h +++ b/worker/api/cpp/include/worker/data_broker.h @@ -39,7 +39,11 @@ class DataBroker { /*! A class to create a data broker instance. The class's only function Create is used for this*/ class DataBrokerFactory { public: - static std::unique_ptr<DataBroker> Create(const std::string& source_name, WorkerErrorCode* return_code) noexcept; + static std::unique_ptr<DataBroker> CreateFolderBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept; + static std::unique_ptr<DataBroker> CreateServerBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept; + }; } diff --git a/worker/api/cpp/src/data_broker.cpp b/worker/api/cpp/src/data_broker.cpp index 70a821580209b04a3d6848c544ec3d285a7a0d27..517ec519b568dce3674146b1da66b719df8c760b 100644 --- a/worker/api/cpp/src/data_broker.cpp +++ b/worker/api/cpp/src/data_broker.cpp @@ -1,11 +1,13 @@ #include "worker/data_broker.h" #include "folder_data_broker.h" +#include "server_data_broker.h" -namespace hidra2 { -std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_name, - WorkerErrorCode* return_code) noexcept { +namespace hidra2 { +template <class Broker> +std::unique_ptr<DataBroker> Create(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { if (source_name.empty()) { *return_code = WorkerErrorCode::kEmptyDatasource; return nullptr; @@ -13,14 +15,25 @@ std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_ std::unique_ptr<DataBroker> p = nullptr; try { - p.reset(new FolderDataBroker(source_name)); + p.reset(new Broker(source_name)); *return_code = WorkerErrorCode::kOK; } catch (...) { // we do not test this part *return_code = WorkerErrorCode::kMemoryError; } return p; + +} + +std::unique_ptr<DataBroker> DataBrokerFactory::CreateFolderBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { + return Create<FolderDataBroker>(source_name, return_code); }; +std::unique_ptr<DataBroker> DataBrokerFactory::CreateServerBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { + return Create<ServerDataBroker>(source_name, return_code); +} + } diff --git a/worker/api/cpp/src/server_data_broker.cpp b/worker/api/cpp/src/server_data_broker.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cf08000bef37e68948dc7d491e8eb1e55ca6c348 --- /dev/null +++ b/worker/api/cpp/src/server_data_broker.cpp @@ -0,0 +1,17 @@ +#include "server_data_broker.h" + +namespace hidra2 { + +ServerDataBroker::ServerDataBroker(const std::string& source_name) { + +} + +WorkerErrorCode ServerDataBroker::Connect() { + return WorkerErrorCode::kOK; +} + +WorkerErrorCode ServerDataBroker::GetNext(FileInfo* info, FileData* data) { + return {}; +} + +} \ No newline at end of file diff --git a/worker/api/cpp/src/server_data_broker.h b/worker/api/cpp/src/server_data_broker.h new file mode 100644 index 0000000000000000000000000000000000000000..32a77072a2f16a41248e6bb49682781cb38d8897 --- /dev/null +++ b/worker/api/cpp/src/server_data_broker.h @@ -0,0 +1,17 @@ +#ifndef HIDRA2_SERVER_DATA_BROKER_H +#define HIDRA2_SERVER_DATA_BROKER_H + +#include "worker/data_broker.h" + +namespace hidra2 { + +class ServerDataBroker final : public hidra2::DataBroker { + public: + explicit ServerDataBroker(const std::string& source_name); + WorkerErrorCode Connect() override; + WorkerErrorCode GetNext(FileInfo* info, FileData* data) override; +}; + +} + +#endif //HIDRA2_SERVER_DATA_BROKER_H diff --git a/worker/api/cpp/unittests/test_worker_api.cpp b/worker/api/cpp/unittests/test_worker_api.cpp index 227dda59b5a2ebfa181ae8e7a2417cd2fef4f27d..b8e7fb7b4556ef3db6ada441dde812178639644d 100644 --- a/worker/api/cpp/unittests/test_worker_api.cpp +++ b/worker/api/cpp/unittests/test_worker_api.cpp @@ -2,10 +2,14 @@ #include "worker/data_broker.h" #include "../src/folder_data_broker.h" +#include "../src/server_data_broker.h" + using hidra2::DataBrokerFactory; using hidra2::DataBroker; using hidra2::FolderDataBroker; +using hidra2::ServerDataBroker; + using hidra2::WorkerErrorCode; using ::testing::Eq; @@ -19,7 +23,7 @@ namespace { TEST(DataBrokerFactoryTests, CreateFolderDataSource) { WorkerErrorCode return_code; - auto data_broker = DataBrokerFactory::Create("path/to/file", &return_code); + auto data_broker = DataBrokerFactory::CreateFolderBroker("path/to/file", &return_code); ASSERT_THAT(return_code, Eq(WorkerErrorCode::kOK)); ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.get()), Ne(nullptr)); @@ -28,10 +32,20 @@ TEST(DataBrokerFactoryTests, CreateFolderDataSource) { TEST(DataBrokerFactoryTests, FailCreateDataSourceWithEmptySource) { WorkerErrorCode return_code; - auto data_broker = DataBrokerFactory::Create("", &return_code); + auto data_broker = DataBrokerFactory::CreateFolderBroker("", &return_code); ASSERT_THAT(return_code, Eq(WorkerErrorCode::kEmptyDatasource)); ASSERT_THAT(data_broker.release(), Eq(nullptr)); } +TEST(DataBrokerFactoryTests, CreateServerDataSource) { + WorkerErrorCode return_code; + + auto data_broker = DataBrokerFactory::CreateServerBroker("server", &return_code); + + ASSERT_THAT(return_code, Eq(WorkerErrorCode::kOK)); + ASSERT_THAT(dynamic_cast<ServerDataBroker*>(data_broker.get()), Ne(nullptr)); +} + + }