1 /*
2  * SPDX-FileCopyrightText: 2014 Kevin Ottens <ervin@kde.org>
3  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
4  */
5 
6 #include "dependencies.h"
7 
8 #include "akonadi/akonadicontextqueries.h"
9 #include "akonadi/akonadicontextrepository.h"
10 #include "akonadi/akonadidatasourcequeries.h"
11 #include "akonadi/akonadidatasourcerepository.h"
12 #include "akonadi/akonadiprojectqueries.h"
13 #include "akonadi/akonadiprojectrepository.h"
14 #include "akonadi/akonaditaskqueries.h"
15 #include "akonadi/akonaditaskrepository.h"
16 
17 #include "akonadi/akonadicache.h"
18 #include "akonadi/akonadicachingstorage.h"
19 #include "akonadi/akonadimonitorimpl.h"
20 #include "akonadi/akonadiserializer.h"
21 #include "akonadi/akonadistorage.h"
22 
23 #include "presentation/availablepagesmodel.h"
24 #include "presentation/availablesourcesmodel.h"
25 #include "presentation/editormodel.h"
26 #include "presentation/runningtaskmodel.h"
27 
28 #include "utils/dependencymanager.h"
29 
initializeGlobalAppDependencies()30 void Integration::initializeGlobalAppDependencies()
31 {
32     auto &deps = Utils::DependencyManager::globalInstance();
33     initializeDefaultAkonadiDependencies(deps);
34     initializeDefaultDomainDependencies(deps);
35     initializeDefaultPresentationDependencies(deps);
36 }
37 
initializeDefaultAkonadiDependencies(Utils::DependencyManager & deps)38 void Integration::initializeDefaultAkonadiDependencies(Utils::DependencyManager &deps)
39 {
40     deps.add<Akonadi::Cache,
41              Akonadi::Cache(Akonadi::SerializerInterface*, Akonadi::MonitorInterface*),
42              Utils::DependencyManager::UniqueInstance>();
43     deps.add<Akonadi::MonitorInterface, Akonadi::MonitorImpl, Utils::DependencyManager::UniqueInstance>();
44     deps.add<Akonadi::SerializerInterface, Akonadi::Serializer, Utils::DependencyManager::UniqueInstance>();
45     deps.add<Akonadi::StorageInterface, Utils::DependencyManager::UniqueInstance>([] (Utils::DependencyManager *deps) {
46         return new Akonadi::CachingStorage(deps->create<Akonadi::Cache>(),
47                                            Akonadi::StorageInterface::Ptr(new Akonadi::Storage));
48     });
49 }
50 
initializeDefaultDomainDependencies(Utils::DependencyManager & deps)51 void Integration::initializeDefaultDomainDependencies(Utils::DependencyManager &deps)
52 {
53     deps.add<Domain::ContextQueries,
54              Akonadi::ContextQueries(Akonadi::StorageInterface*,
55                                      Akonadi::SerializerInterface*,
56                                      Akonadi::MonitorInterface*,
57                                      Akonadi::Cache*)>();
58 
59     deps.add<Domain::ContextRepository,
60              Akonadi::ContextRepository(Akonadi::StorageInterface*,
61                                         Akonadi::SerializerInterface*)>();
62 
63     deps.add<Domain::DataSourceQueries,
64              Akonadi::DataSourceQueries(Akonadi::StorageInterface*,
65                                         Akonadi::SerializerInterface*,
66                                         Akonadi::MonitorInterface*)>();
67 
68     deps.add<Domain::DataSourceRepository,
69              Akonadi::DataSourceRepository(Akonadi::StorageInterface*,
70                                            Akonadi::SerializerInterface*)>();
71 
72     deps.add<Domain::ProjectQueries,
73              Akonadi::ProjectQueries(Akonadi::StorageInterface*,
74                                      Akonadi::SerializerInterface*,
75                                      Akonadi::MonitorInterface*)>();
76 
77     deps.add<Domain::ProjectRepository,
78              Akonadi::ProjectRepository(Akonadi::StorageInterface*,
79                                         Akonadi::SerializerInterface*)>();
80 
81     deps.add<Domain::TaskQueries,
82              Akonadi::TaskQueries(Akonadi::StorageInterface*,
83                                   Akonadi::SerializerInterface*,
84                                   Akonadi::MonitorInterface*,
85                                   Akonadi::Cache*)>();
86 
87     deps.add<Domain::TaskRepository,
88              Akonadi::TaskRepository(Akonadi::StorageInterface*,
89                                      Akonadi::SerializerInterface*)>();
90 }
91 
initializeDefaultPresentationDependencies(Utils::DependencyManager & deps)92 void Integration::initializeDefaultPresentationDependencies(Utils::DependencyManager &deps)
93 {
94     deps.add<Presentation::EditorModel>([] (Utils::DependencyManager *deps) {
95         auto model = new Presentation::EditorModel;
96         auto repository = deps->create<Domain::TaskRepository>();
97         model->setSaveFunction([repository] (const Domain::Task::Ptr &task) {
98             Q_ASSERT(task);
99             return repository->update(task);
100         });
101         return model;
102     });
103 
104     deps.add<Presentation::AvailablePagesModel,
105              Presentation::AvailablePagesModel(Domain::DataSourceQueries*,
106                                                Domain::ProjectQueries*,
107                                                Domain::ProjectRepository*,
108                                                Domain::ContextQueries*,
109                                                Domain::ContextRepository*,
110                                                Domain::TaskQueries*,
111                                                Domain::TaskRepository*)>();
112 
113     deps.add<Presentation::AvailableSourcesModel,
114              Presentation::AvailableSourcesModel(Domain::DataSourceQueries*,
115                                                  Domain::DataSourceRepository*)>();
116 
117     deps.add<Presentation::RunningTaskModel,
118              Presentation::RunningTaskModel(Domain::TaskQueries*,
119                                             Domain::TaskRepository*)>();
120 }
121