From acc8284935574c4ee37345ed22217636e49ecccf 2017-12-21 08:40:11 From: mperrinel Date: 2017-12-21 08:40:11 Subject: [PATCH] Add Catalogue methods --- diff --git a/core/include/Catalogue/CatalogueController.h b/core/include/Catalogue/CatalogueController.h index 4cc36ae..d31229b 100644 --- a/core/include/Catalogue/CatalogueController.h +++ b/core/include/Catalogue/CatalogueController.h @@ -55,10 +55,10 @@ public: // Catalogue std::list > retrieveEventsFromCatalogue(std::shared_ptr catalogue) const; - // bool createCatalogue(const QString &name, QVector eventList); /// retrieveEvents with empty repository retrieve them from the default repository std::list > retrieveCatalogues(const QString &repository = QString()) const; + void addCatalogue(std::shared_ptr catalogue); void updateCatalogue(std::shared_ptr catalogue); void removeCatalogue(std::shared_ptr catalogue); void saveCatalogue(std::shared_ptr catalogue); diff --git a/core/src/Catalogue/CatalogueController.cpp b/core/src/Catalogue/CatalogueController.cpp index af7d0b3..e477099 100644 --- a/core/src/Catalogue/CatalogueController.cpp +++ b/core/src/Catalogue/CatalogueController.cpp @@ -27,6 +27,10 @@ static QString REPOSITORY_WORK_SUFFIX = QString{"_work"}; static QString REPOSITORY_TRASH_SUFFIX = QString{"_trash"}; } +/** + * Possible types of an repository + */ +enum class DBType { SYNC, WORK, TRASH}; class CatalogueController::CatalogueControllerPrivate { public: @@ -48,6 +52,8 @@ public: void saveEvent(std::shared_ptr event, bool persist = true); void saveCatalogue(std::shared_ptr catalogue, bool persist = true); + + std::shared_ptr createFinder(const QUuid& uniqId, const QString & repository, DBType type); }; CatalogueController::CatalogueController(QObject *parent) @@ -215,26 +221,8 @@ void CatalogueController::saveEvent(std::shared_ptr event) void CatalogueController::discardEvent(std::shared_ptr event, bool &removed) { - auto uniqIdPredicate = std::make_shared( - QString{"uniqId"}, event->getUniqId(), ComparaisonOperation::EQUALEQUAL); - - auto syncRepositoryPredicate = std::make_shared( - QString{"repository"}, impl->toSyncRepository(event->getRepository()), - ComparaisonOperation::EQUALEQUAL); - - auto syncPred = std::make_shared(CompoundOperation::AND); - syncPred->AddRequestPredicate(uniqIdPredicate); - syncPred->AddRequestPredicate(syncRepositoryPredicate); - - - auto workRepositoryPredicate = std::make_shared( - QString{"repository"}, impl->toWorkRepository(event->getRepository()), - ComparaisonOperation::EQUALEQUAL); - - auto workPred = std::make_shared(CompoundOperation::AND); - workPred->AddRequestPredicate(uniqIdPredicate); - workPred->AddRequestPredicate(workRepositoryPredicate); - + auto syncPred = impl->createFinder(event->getUniqId(), event->getRepository(), DBType::SYNC); + auto workPred = impl->createFinder(event->getUniqId(), event->getRepository(), DBType::WORK); auto syncEvent = impl->m_CatalogueDao.getEvent(syncPred); if (!syncEvent.getUniqId().isNull()) { @@ -272,10 +260,29 @@ CatalogueController::retrieveCatalogues(const QString &repository) const return cataloguesShared; } +void CatalogueController::addCatalogue(std::shared_ptr catalogue) +{ + catalogue->setRepository(impl->toWorkRepository(catalogue->getRepository())); + + auto catalogueTemp = *catalogue; + impl->m_CatalogueDao.addCatalogue(catalogueTemp); + + auto workPred = impl->createFinder(catalogue->getUniqId(), catalogue->getRepository(), DBType::WORK); + + auto workCatalogue = impl->m_CatalogueDao.getCatalogue(workPred); + *catalogue = workCatalogue; + +// auto uniqueId = impl->eventUniqueKey(catalogue); +// impl->m_EventKeysWithChanges.insert(uniqueId); +} + void CatalogueController::updateCatalogue(std::shared_ptr catalogue) { catalogue->setRepository(impl->toWorkRepository(catalogue->getRepository())); +// auto uniqueId = impl->eventUniqueKey(event); +// impl->m_EventKeysWithChanges.insert(uniqueId); + impl->m_CatalogueDao.updateCatalogue(*catalogue); } @@ -286,11 +293,13 @@ void CatalogueController::removeCatalogue(std::shared_ptr catalogue impl->m_CatalogueDao.removeCatalogue(*catalogue); catalogue->setRepository(impl->toSyncRepository(catalogue->getRepository())); impl->m_CatalogueDao.removeCatalogue(*catalogue); + impl->savAllDB(); } void CatalogueController::saveCatalogue(std::shared_ptr catalogue) { impl->saveCatalogue(catalogue, true); +// impl->m_EventKeysWithChanges.remove(impl->eventUniqueKey(event)); } void CatalogueController::saveAll() @@ -464,3 +473,33 @@ void CatalogueController::CatalogueControllerPrivate::saveCatalogue( savAllDB(); } } + +std::shared_ptr CatalogueController::CatalogueControllerPrivate::createFinder(const QUuid &uniqId, const QString &repository, DBType type) +{ + // update catalogue parameter + auto uniqIdPredicate = std::make_shared( + QString{"uniqId"}, uniqId, ComparaisonOperation::EQUALEQUAL); + + auto repositoryType = repository; + switch (type) { + case DBType::SYNC: + repositoryType = toSyncRepository(repositoryType); + break; + case DBType::WORK: + repositoryType =toWorkRepository(repositoryType); + break; + case DBType::TRASH: + default: + break; + } + + auto repositoryPredicate = std::make_shared( + QString{"repository"}, repositoryType, + ComparaisonOperation::EQUALEQUAL); + + auto finderPred = std::make_shared(CompoundOperation::AND); + finderPred->AddRequestPredicate(uniqIdPredicate); + finderPred->AddRequestPredicate(repositoryPredicate); + + return finderPred; +}