diff --git a/include/Catalogue/CatalogueController.h b/include/Catalogue/CatalogueController.h index 0f4a27f..b7d51fb 100644 --- a/include/Catalogue/CatalogueController.h +++ b/include/Catalogue/CatalogueController.h @@ -21,29 +21,40 @@ Q_DECLARE_LOGGING_CATEGORY(LOG_CatalogueController) class DataSourceItem; class Variable; +constexpr auto default_repo = "default"; + /** * @brief The CatalogueController class aims to handle catalogues and event * using the CatalogueAPI library. */ class SCIQLOP_CORE_EXPORT CatalogueController : public QObject { + Q_OBJECT +public: using time_t = double; + using Product_t = CatalogiCpp::Product; using Repository_t = CatalogiCpp::Repository; using Event_t = Repository_t::Event_t; using Event_ptr = Repository_t::Event_ptr; using Catalogue_t = Repository_t::Catalogue_t; using Catalogue_ptr = typename Repository_t::Catalogue_ptr; using uuid_t = Repository_t::uuid_t; + template + static inline Catalogue_ptr make_catalogue_ptr(_Args&&... __args) + { + return Repository_t::make_catalogue_ptr(std::forward<_Args>(__args)...); + } + + template + static inline Event_ptr make_event_ptr(_Args&&... __args) + { + return Catalogue_t::make_event_ptr(std::forward<_Args>(__args)...); + } - std::map> _lastSavedRepos; - std::map> _currentRepos; - - Q_OBJECT -public: explicit CatalogueController(QObject* parent = nullptr); virtual ~CatalogueController(); - QStringList getRepositories() const; + QStringList repositories() const; void loadRepository(const QString& path, const QString& name); void saveRepository(const QString& path, const QString& name); @@ -62,6 +73,11 @@ public: void save(Catalogue_ptr catalogue); void save(const QString& repository); + void add(const QString& repository); + void add(const QString& catalogue, const QString& repository); + void add(Event_ptr event, Catalogue_ptr catalogue); + void add(Event_ptr event, const QString& repository = default_repo); + // // Event // /// retrieveEvents with empty repository retrieve them from the default // repository std::list> retrieveEvents(const @@ -116,6 +132,9 @@ public: // void initialize(); private: + std::map> _lastSavedRepos; + std::map> _currentRepos; + // class CatalogueControllerPrivate; // spimpl::unique_impl_ptr impl; }; diff --git a/include/Common/containers.h b/include/Common/containers.h index f148c22..61290fb 100644 --- a/include/Common/containers.h +++ b/include/Common/containers.h @@ -23,6 +23,27 @@ namespace SciQLop::containers return container.find(value) != std::cend(container); } + template + auto index_of(const T1& container, const T2& value) + -> decltype(container.front() == value, 0) + { + return std::distance( + std::cbegin(container), + std::find(std::cbegin(container), std::cend(container), value)); + } + + template + auto index_of(const T1& container, const T2& value) + -> decltype(container.front().get(), std::is_pointer::value, 0) + { + return std::distance(std::cbegin(container), + std::find_if(std::cbegin(container), + std::cend(container), + [value](const auto& item) { + return value == item.get(); + })); + } + } // namespace SciQLop::containers #endif // CONTAINERS_H diff --git a/src/Catalogue/CatalogueController.cpp b/src/Catalogue/CatalogueController.cpp index ef189c9..e2070d9 100644 --- a/src/Catalogue/CatalogueController.cpp +++ b/src/Catalogue/CatalogueController.cpp @@ -47,7 +47,7 @@ CatalogueController::CatalogueController(QObject* parent) CatalogueController::~CatalogueController() {} -QStringList CatalogueController::getRepositories() const +QStringList CatalogueController::repositories() const { QStringList repos; std::transform(std::begin(_currentRepos), std::end(_currentRepos), @@ -209,6 +209,26 @@ void CatalogueController::save(const QString& repository) } } +void CatalogueController::add(const QString& repository) +{ + if(!contains(_currentRepos, repository)) + { _currentRepos[repository] = Repository_t{}; } +} + +void CatalogueController::add(const QString& catalogue, + const QString& repository) +{ + if(!contains(_currentRepos, repository)) + { _currentRepos[repository] = Repository_t{}; } + auto new_catalogue = make_catalogue_ptr(); + new_catalogue->name = catalogue.toStdString(); + _currentRepos[repository].add(std::move(new_catalogue)); +} + +void CatalogueController::add(CatalogueController::Event_ptr event, + const QString& repository) +{} + // void CatalogueController::saveDB(const QString& destinationPath, const // QString& repositoryName) //{