1
1
package life.qbic.portal.sampletracking
2
2
3
3
import com.vaadin.ui.VerticalLayout
4
- import life.qbic.business.project.Project
5
- import life.qbic.business.project.load.*
6
- import life.qbic.business.project.subscribe.SubscribeProject
7
- import life.qbic.business.project.subscribe.SubscribeProjectOutput
8
- import life.qbic.business.project.subscribe.Subscriber
9
- import life.qbic.business.project.subscribe.SubscriptionDataSource
10
- import life.qbic.business.samples.count.CountSamples
11
- import life.qbic.business.samples.count.CountSamplesDataSource
12
- import life.qbic.business.samples.count.CountSamplesOutput
13
- import life.qbic.business.samples.count.StatusCount
14
- import life.qbic.business.samples.download.DownloadSamples
15
- import life.qbic.business.samples.download.DownloadSamplesDataSource
16
- import life.qbic.business.samples.download.DownloadSamplesOutput
17
- import life.qbic.business.samples.info.GetSamplesInfo
18
- import life.qbic.business.samples.info.GetSamplesInfoDataSource
19
- import life.qbic.business.samples.info.GetSamplesInfoOutput
20
- import life.qbic.business.samples.info.SampleStatusDataSource
4
+ import groovy.transform.CompileStatic
5
+ import life.qbic.business.subscribe.Subscriber
21
6
import life.qbic.datamodel.dtos.portal.PortalUser
22
- import life.qbic.portal.sampletracking.communication.notification.MessageBroker
23
- import life.qbic.portal.sampletracking.communication.notification.NotificationService
24
- import life.qbic.portal.sampletracking.components.MainPage
25
- import life.qbic.portal.sampletracking.components.NotificationHandler
26
- import life.qbic.portal.sampletracking.components.ViewModel
27
- import life.qbic.portal.sampletracking.components.projectoverview.CountSamplesPresenter
28
- import life.qbic.portal.sampletracking.components.projectoverview.LoadProjectsPresenter
29
- import life.qbic.portal.sampletracking.components.projectoverview.ProjectView
30
- import life.qbic.portal.sampletracking.components.projectoverview.download.DownloadProjectController
31
- import life.qbic.portal.sampletracking.components.projectoverview.download.ManifestPresenter
32
- import life.qbic.portal.sampletracking.components.projectoverview.subscribe.SubscribeProjectController
33
- import life.qbic.portal.sampletracking.components.projectoverview.subscribe.SubscribeProjectPresenter
34
- import life.qbic.portal.sampletracking.components.sampleoverview.SampleOverviewController
35
- import life.qbic.portal.sampletracking.components.sampleoverview.SampleView
36
- import life.qbic.portal.sampletracking.datasources.Credentials
37
- import life.qbic.portal.sampletracking.datasources.OpenBisConnector
38
- import life.qbic.portal.sampletracking.datasources.database.DatabaseSession
39
- import life.qbic.portal.sampletracking.datasources.samples.SamplesDbConnector
40
- import life.qbic.portal.sampletracking.datasources.subscriptions.SubscriptionsDbConnector
41
- import life.qbic.portal.sampletracking.resource.ResourceService
42
- import life.qbic.portal.sampletracking.resource.project.ProjectResourceService
43
- import life.qbic.portal.sampletracking.resource.status.StatusCountResourceService
44
- import life.qbic.portal.sampletracking.services.sample.SampleTracking
45
- import life.qbic.portal.sampletracking.services.sample.SampleTrackingService
7
+ import life.qbic.portal.sampletracking.data.*
8
+ import life.qbic.portal.sampletracking.data.database.DatabaseSession
9
+ import life.qbic.portal.sampletracking.view.MainView
10
+ import life.qbic.portal.sampletracking.view.notifications.NotificationCenter
11
+ import life.qbic.portal.sampletracking.view.notifications.NotificationHandler
12
+ import life.qbic.portal.sampletracking.view.projects.ProjectStatusComponentProvider
13
+ import life.qbic.portal.sampletracking.view.projects.ProjectView
14
+ import life.qbic.portal.sampletracking.view.projects.SubscriptionCheckboxProvider
15
+ import life.qbic.portal.sampletracking.view.samples.SampleStatusComponentProvider
16
+ import life.qbic.portal.sampletracking.view.samples.SampleView
46
17
import life.qbic.portal.utils.ConfigurationManager
47
18
import life.qbic.portal.utils.ConfigurationManagerFactory
48
19
20
+ import java.util.concurrent.ExecutorService
21
+ import java.util.concurrent.Executors
22
+
49
23
import static java.util.Objects.requireNonNull
50
24
51
25
/**
@@ -58,38 +32,34 @@ import static java.util.Objects.requireNonNull
58
32
* @since 1.0.0
59
33
*
60
34
*/
35
+ @CompileStatic
61
36
class DependencyManager {
62
- private VerticalLayout portletView
63
37
private ConfigurationManager configurationManager
64
38
private final PortalUser portalUser
65
- private final NotificationHandler notificationHandler
66
-
67
- private LoadProjectsDataSource loadProjectsDataSource
68
- private LastChangedDateDataSource lastChangedDateDataSource
69
- private CountSamplesDataSource countSamplesDataSource
70
- private GetSamplesInfoDataSource getSamplesInfoDataSource
71
- private DownloadSamplesDataSource downloadSamplesDataSource
72
- private SubscriptionDataSource subscriptionDataSource
73
- private SubscribedProjectsDataSource subscribedProjectsDataSource
74
- private SampleStatusDataSource sampleStatusDataSource
75
-
76
- private ResourceService<Project > projectResourceService
77
- private ResourceService<StatusCount > statusCountService
78
- private NotificationService notificationService
39
+
79
40
private Subscriber subscriptionUser
80
41
81
- DependencyManager (PortalUser user ) {
42
+ private static final int PROJECT_LOADING_THREAD_COUNT = 2
43
+ private static final int SAMPLE_LOADING_THREAD_COUNT = 2
44
+ private final ExecutorService projectLoadingExecutor = Executors . newFixedThreadPool(PROJECT_LOADING_THREAD_COUNT )
45
+ private final ExecutorService sampleLoadingExecutor = Executors . newFixedThreadPool(SAMPLE_LOADING_THREAD_COUNT )
46
+
47
+
48
+ private OpenBisConnector openBisConnector
49
+ private ProjectStatusComponentProvider projectStatusComponentProvider
50
+ private SampleStatusComponentProvider sampleStatusComponentProvider
51
+ private SubscriptionCheckboxProvider subscriptionCheckboxProvider
52
+ private SampleTrackingConnector sampleTrackingConnector
53
+ private SubscriptionDatabaseConnector subscriptionDatabaseConnector
54
+ private NotificationCenter notificationCenter
55
+
56
+ DependencyManager (PortalUser user ) {
82
57
portalUser = user
83
58
subscriptionUser = subscriberFor(portalUser)
84
59
// Load the app environment configuration
85
60
configurationManager = ConfigurationManagerFactory . getInstance()
86
61
87
62
initializeDependencies()
88
- notificationHandler = new NotificationHandler (notificationService)
89
-
90
- populateProjectService()
91
- portletView = setupPortletView()
92
- populateStatusCountService()
93
63
}
94
64
95
65
private static Subscriber subscriberFor (PortalUser portalUser ) {
@@ -101,15 +71,11 @@ class DependencyManager {
101
71
102
72
103
73
private void initializeDependencies () {
104
- setupDatabaseConnections()
105
- setupServices()
74
+ setupDatabaseConnections()
75
+ setupOpenBisConnection()
76
+ setupSampleTracking()
106
77
}
107
78
108
- private void setupServices () {
109
- projectResourceService = new ProjectResourceService ()
110
- statusCountService = new StatusCountResourceService ()
111
- notificationService = new MessageBroker ()
112
- }
113
79
114
80
private void setupDatabaseConnections () {
115
81
String user = requireNonNull(configurationManager. getMysqlUser(), " Mysql user missing." )
@@ -119,108 +85,97 @@ class DependencyManager {
119
85
String sqlDatabase = requireNonNull(configurationManager. getMysqlDB(), " Mysql database name missing." )
120
86
121
87
DatabaseSession . init(user, password, host, port, sqlDatabase)
122
- SampleTrackingService service = setUpTrackingService()
123
- SamplesDbConnector samplesDbConnector = new SamplesDbConnector (DatabaseSession . getInstance(),service)
124
- countSamplesDataSource = samplesDbConnector
125
- downloadSamplesDataSource = samplesDbConnector
126
- lastChangedDateDataSource = samplesDbConnector
127
- sampleStatusDataSource = samplesDbConnector
128
-
129
- Credentials openBisCredentials = new Credentials (
130
- user : configurationManager. getDataSourceUser(),
131
- password : configurationManager. getDataSourcePassword()
132
- )
133
- OpenBisConnector openBisConnector = new OpenBisConnector (openBisCredentials, portalUser, configurationManager. getDataSourceUrl() + " /openbis/openbis" )
134
- loadProjectsDataSource = openBisConnector
135
- lastChangedDateDataSource = samplesDbConnector
136
-
137
- subscriptionDataSource = new SubscriptionsDbConnector (DatabaseSession . getInstance())
138
- getSamplesInfoDataSource = openBisConnector
139
-
140
-
141
- SubscriptionsDbConnector subscriptionsDbConnector = new SubscriptionsDbConnector (DatabaseSession . getInstance())
142
- subscriptionDataSource = subscriptionsDbConnector
143
- subscribedProjectsDataSource = subscriptionsDbConnector
144
- }
145
-
146
- private SampleTrackingService setUpTrackingService (){
147
- String serviceURL = requireNonNull(configurationManager. getSampleTrackingServiceUrl())
148
- def user = requireNonNull(configurationManager. getServiceUser())
88
+ subscriptionDatabaseConnector= new SubscriptionDatabaseConnector (DatabaseSession . getInstance(), subscriptionUser)
149
89
150
- Credentials credentials = new Credentials (
151
- user : user. name,
152
- password : user. password
153
- )
90
+ }
154
91
155
- return new SampleTracking (serviceURL, credentials)
92
+ private void setupOpenBisConnection () {
93
+ Credentials openBisCredentials = new Credentials (
94
+ user : configurationManager. getDataSourceUser(),
95
+ password : configurationManager. getDataSourcePassword()
96
+ )
97
+ this . openBisConnector = new OpenBisConnector (openBisCredentials, portalUser, configurationManager. getDataSourceUrl() + " /openbis/openbis" )
98
+ }
99
+
100
+ private void setupSampleTracking () {
101
+ if (Objects . nonNull(sampleTrackingConnector)) {
102
+ return
156
103
}
104
+ def credentials = new Credentials (configurationManager. getServiceUser(). name,
105
+ configurationManager. getServiceUser(). password)
106
+ sampleTrackingConnector = new SampleTrackingConnector (configurationManager. getSampleTrackingServiceUrl(),
107
+ " /v2/samples" ,
108
+ " /status" ,
109
+ " /v2/projects" ,
110
+ credentials, getNgsSampleRepository())
111
+ }
157
112
158
113
/**
159
114
* @return the main view of the application
160
115
* @since 1.0.0
161
116
*/
162
117
VerticalLayout getPortletView () {
163
- return portletView
118
+ def projectView = new ProjectView (getProjectRepository(), getSubscriptionRepository(), getSampleStatusSummaryProvider(), getSubscriptionCheckboxProvider(), getDownloadManifestProvider())
119
+ def sampleView = new SampleView (getSampleRepository(), getSampleStatusComponentProvider())
120
+ return new MainView (projectView, sampleView, notificationCenter)
164
121
}
165
122
166
- private VerticalLayout setupPortletView () {
167
- ViewModel viewModel = new ViewModel (projectResourceService, statusCountService)
168
- SampleView sampleView = new SampleView (viewModel, notificationService)
169
- ProjectView projectView = new ProjectView (viewModel, setupSubscribeProjectUseCase(), notificationService, subscriptionUser, setupDownloadProjectUseCase(viewModel))
170
- SampleOverviewController sampleOverviewController = setupProjectSamplesUseCase(sampleView. getPresenter())
171
-
172
- MainPage mainPage = new MainPage (projectView, sampleView, viewModel, sampleOverviewController)
123
+ ProjectRepository getProjectRepository () {
124
+ return openBisConnector
125
+ }
173
126
174
- return mainPage
175
- }
127
+ SampleRepository getSampleRepository () {
128
+ return openBisConnector
129
+ }
176
130
177
- private SampleOverviewController setupProjectSamplesUseCase ( GetSamplesInfoOutput output ) {
178
- GetSamplesInfo getSamplesInfo = new GetSamplesInfo (sampleStatusDataSource, downloadSamplesDataSource, getSamplesInfoDataSource, output)
179
- return new SampleOverviewController (getSamplesInfo)
131
+ SampleStatusComponentProvider getSampleStatusComponentProvider ( ) {
132
+ if ( Objects . nonNull(sampleStatusComponentProvider)) {
133
+ return sampleStatusComponentProvider
180
134
}
135
+ sampleStatusComponentProvider = new SampleStatusComponentProvider (sampleLoadingExecutor, getSampleStatusProvider())
136
+ return sampleStatusComponentProvider
137
+ }
181
138
182
- private DownloadProjectController setupDownloadProjectUseCase (ViewModel viewModel ) {
183
- DownloadSamplesOutput output = new ManifestPresenter (notificationService, viewModel)
184
- DownloadSamples downloadSamples = new DownloadSamples (downloadSamplesDataSource, output)
185
-
186
- return new DownloadProjectController (downloadSamples)
139
+ ProjectStatusComponentProvider getSampleStatusSummaryProvider () {
140
+ if (Objects . nonNull(projectStatusComponentProvider)) {
141
+ return projectStatusComponentProvider
187
142
}
188
-
189
- private SubscribeProjectController setupSubscribeProjectUseCase () {
190
- SubscribeProjectOutput output = new SubscribeProjectPresenter (projectResourceService, notificationService)
191
- SubscribeProject subscribeProject = new SubscribeProject (subscriptionDataSource, output)
192
- return new SubscribeProjectController (subscribeProject)
143
+ projectStatusComponentProvider = new ProjectStatusComponentProvider (projectLoadingExecutor, getProjectStatusProvider())
144
+ return projectStatusComponentProvider
145
+ }
146
+ SampleStatusProvider getSampleStatusProvider () {
147
+ return sampleTrackingConnector
148
+ }
149
+
150
+ ProjectStatusProvider getProjectStatusProvider () {
151
+ return sampleTrackingConnector
152
+ }
153
+
154
+ SubscriptionRepository getSubscriptionRepository () {
155
+ return subscriptionDatabaseConnector
156
+ }
157
+
158
+ SubscriptionCheckboxProvider getSubscriptionCheckboxProvider () {
159
+ if (Objects . nonNull(subscriptionCheckboxProvider)) {
160
+ return subscriptionCheckboxProvider
193
161
}
162
+ subscriptionCheckboxProvider = new SubscriptionCheckboxProvider (getSubscriptionRepository(), getNotificationHandler())
163
+ return subscriptionCheckboxProvider
164
+ }
194
165
195
- /**
196
- * Triggers the project loading initially to have data in the service
197
- * This is to be called after the view was initialized
198
- */
199
- private void populateProjectService () {
200
- LoadProjectsOutput output = new LoadProjectsPresenter (projectResourceService, notificationService)
201
- LoadProjectsInput loadProjects = new LoadProjects (loadProjectsDataSource, output, lastChangedDateDataSource, subscribedProjectsDataSource)
202
- loadProjects. withSubscriptions(subscriptionUser)
166
+ NotificationHandler getNotificationHandler () {
167
+ if (Objects . nonNull(notificationCenter)) {
168
+ return notificationCenter
203
169
}
170
+ notificationCenter = new NotificationCenter ()
171
+ return notificationCenter
172
+ }
204
173
205
- /**
206
- * Triggers the project status count loading initially to have data in the service
207
- */
208
- private void populateStatusCountService () {
209
- CountSamplesOutput output = new CountSamplesPresenter (notificationService, statusCountService)
210
- CountSamples countSamples = new CountSamples (countSamplesDataSource, output)
211
- List<String > projectCodes = projectResourceService. iterator(). collect {
212
- return it. code
213
- }
214
- projectCodes. each {
215
- countSamples. countSamplesPerStatus(it)
216
- }
217
- }
174
+ DownloadManifestProvider getDownloadManifestProvider () {
175
+ return sampleTrackingConnector
176
+ }
218
177
219
- /**
220
- * Returns the global notification center
221
- * @return a notification center that handles app notifications
222
- */
223
- NotificationHandler getNotificationCenter () {
224
- return notificationHandler
225
- }
178
+ NgsSampleRepository getNgsSampleRepository () {
179
+ return openBisConnector
180
+ }
226
181
}
0 commit comments