1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.task.app;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.task.TasksManager;
38 import info.magnolia.ui.contentapp.browser.preview.NoOpPreviewProvider;
39 import info.magnolia.ui.contentapp.browser.preview.PreviewProvider;
40 import info.magnolia.ui.framework.datasource.DatasourceBundle;
41
42 import java.util.HashMap;
43 import java.util.Map;
44 import java.util.Optional;
45
46 import javax.inject.Inject;
47 import javax.inject.Provider;
48 import javax.inject.Singleton;
49
50
51
52
53 @Singleton
54 public class TasksDataSourceBundle extends DatasourceBundle<TasksDataSourceDefinition> {
55
56 private final Provider<Context> contextProvider;
57 private final Map<TasksDataSourceDefinition, TasksDataProvider> tasksDataProviders = new HashMap<>();
58
59 @Inject
60 public TasksDataSourceBundle(TasksManager tasksManager, Provider<Context> contextProvider) {
61 super(TasksDataSourceDefinition.class);
62 this.contextProvider = contextProvider;
63
64 register(TasksPropertySetFactory.class, def -> new TasksPropertySetFactory());
65 register(TasksDataProvider.class, def -> getTasksDataProvider(tasksManager, def));
66 register(TasksItemDescriber.class, def -> new TasksItemDescriber(getTasksDataProvider(tasksManager, def)));
67 register(TasksItemResolver.class, def -> new TasksItemResolver(getTasksDataProvider(tasksManager, def)));
68 register(PreviewProvider.class, def -> new NoOpPreviewProvider());
69 }
70
71 private TasksDataProvider getTasksDataProvider(TasksManager tasksManager, TasksDataSourceDefinition definition) {
72 return Optional.ofNullable(tasksDataProviders.get(definition)).orElseGet(() -> {
73 final TasksDataProvider tasksDataProvider = new TasksDataProvider(tasksManager, contextProvider, definition.getCategory());
74 tasksDataProviders.put(definition, tasksDataProvider);
75 return tasksDataProvider;
76 });
77 }
78 }