@@ -131,119 +131,154 @@ public <C extends ModuleConfiguration, S extends ModuleState> C getModule(String
131
131
if (isNull (INSTANCE ) || state != READY ) {
132
132
return toLoadIfNotExists .getDefaultConfiguration ();
133
133
}
134
+ ReentrantLock lock = Context .LOCK ;
135
+ lock .lock ();
134
136
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
135
137
PreconfiguredModuleProvider preconfiguredModulesProvider ;
136
138
if (nonNull (moduleContainer )) {
139
+ lock .unlock ();
137
140
return cast (moduleContainer .getConfiguration ());
138
141
}
139
142
C configuration ;
140
143
if (nonNull (preconfiguredModulesProvider = contextConfiguration ().getPreconfiguredModulesProvider ())) {
144
+ lock .unlock ();
141
145
return loadModule (toLoadIfNotExists , preconfiguredModulesProvider );
142
146
}
147
+ lock .unlock ();
143
148
loadModule (toLoadIfNotExists , (configuration = toLoadIfNotExists .getDefaultConfiguration ()));
144
149
return cast (configuration );
145
150
}
146
151
147
152
public <C extends ModuleConfiguration , S extends ModuleState > S getModuleState (String moduleId , Module <C , S > toLoadIfNotExists ) {
148
153
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
154
+ ReentrantLock lock = Context .LOCK ;
155
+ lock .lock ();
149
156
if (isNull (INSTANCE ) || state == LOADING_MODULES ) {
157
+ lock .unlock ();
150
158
return toLoadIfNotExists .getState ();
151
159
}
152
160
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
153
161
PreconfiguredModuleProvider preconfiguredModulesProvider ;
154
162
if (nonNull (moduleContainer )) {
163
+ lock .unlock ();
155
164
return cast (moduleContainer .getModule ().getState ());
156
165
}
157
166
if (nonNull (preconfiguredModulesProvider = contextConfiguration ().getPreconfiguredModulesProvider ())) {
167
+ lock .unlock ();
158
168
loadModule (toLoadIfNotExists , preconfiguredModulesProvider );
159
169
return cast (toLoadIfNotExists .getState ());
160
170
}
171
+ lock .unlock ();
161
172
loadModule (toLoadIfNotExists , toLoadIfNotExists .getDefaultConfiguration ());
162
173
return cast (toLoadIfNotExists .getState ());
163
174
}
164
175
165
176
public <C extends ModuleConfiguration , S extends ModuleState > C getModule (String moduleId , Supplier <Module <C , S >> toLoadIfNotExists ) {
166
177
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
178
+ ReentrantLock lock = Context .LOCK ;
179
+ lock .lock ();
167
180
if (isNull (INSTANCE ) || state != READY ) {
181
+ lock .unlock ();
168
182
return toLoadIfNotExists .get ().getDefaultConfiguration ();
169
183
}
170
184
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
171
185
PreconfiguredModuleProvider preconfiguredModulesProvider ;
172
186
if (nonNull (moduleContainer )) {
187
+ lock .unlock ();
173
188
return cast (moduleContainer .getConfiguration ());
174
189
}
175
190
C configuration ;
176
191
Module <C , S > module = toLoadIfNotExists .get ();
177
192
if (nonNull (preconfiguredModulesProvider = contextConfiguration ().getPreconfiguredModulesProvider ())) {
193
+ lock .unlock ();
178
194
return loadModule (module , preconfiguredModulesProvider );
179
195
}
196
+ lock .unlock ();
180
197
loadModule (module , (configuration = module .getDefaultConfiguration ()));
181
198
return cast (configuration );
182
199
}
183
200
184
201
public <C extends ModuleConfiguration , S extends ModuleState > S getModuleState (String moduleId , Supplier <Module <C , S >> toLoadIfNotExists ) {
185
202
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
203
+ ReentrantLock lock = Context .LOCK ;
204
+ lock .lock ();
186
205
if (isNull (INSTANCE ) || state == LOADING_MODULES ) {
206
+ lock .unlock ();
187
207
return toLoadIfNotExists .get ().getState ();
188
208
}
189
209
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
190
210
PreconfiguredModuleProvider preconfiguredModulesProvider ;
191
211
if (nonNull (moduleContainer )) {
212
+ lock .unlock ();
192
213
return cast (moduleContainer .getModule ().getState ());
193
214
}
194
215
Module <C , S > module = toLoadIfNotExists .get ();
195
216
if (nonNull (preconfiguredModulesProvider = contextConfiguration ().getPreconfiguredModulesProvider ())) {
217
+ lock .unlock ();
196
218
loadModule (module , preconfiguredModulesProvider );
197
219
return module .getState ();
198
220
}
221
+ lock .unlock ();
199
222
loadModule (module , module .getDefaultConfiguration ());
200
223
return cast (module .getState ());
201
224
}
202
225
203
226
public <C extends ModuleConfiguration , S extends ModuleState > Context loadModule (Module <C , S > module ) {
204
227
if (isNull (module )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
228
+ ReentrantLock lock = Context .LOCK ;
229
+ lock .lock ();
205
230
ContextState currentState = state ;
206
231
state = LOADING_MODULES ;
207
232
C configuration = module .getDefaultConfiguration ();
208
233
modules .put (module .getId (), new ModuleContainer <>(module , cast (configuration )));
209
234
out .println (format (MODULE_LOADED_MESSAGE , module .getId (), currentTimeMillis () - lastActionTimestamp , configuration .getClass ().getName ()));
210
235
state = currentState ;
236
+ lock .unlock ();
211
237
module .onLoad ();
212
238
lastActionTimestamp = currentTimeMillis ();
213
239
return this ;
214
240
}
215
241
216
242
public <C extends ModuleConfiguration , S extends ModuleState > Context loadModule (Module <C , S > module , ModuleConfigurator <C , S > moduleConfigurator ) {
217
243
if (isNull (module )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
244
+ ReentrantLock lock = Context .LOCK ;
245
+ lock .lock ();
218
246
ContextState currentState = state ;
219
247
state = LOADING_MODULES ;
220
248
C configuration = cast (moduleConfigurator .configure (module ));
221
249
modules .put (module .getId (), new ModuleContainer <>(module , configuration ));
222
250
out .println (format (MODULE_LOADED_MESSAGE , module .getId (), currentTimeMillis () - lastActionTimestamp , configuration .getClass ().getName ()));
223
251
state = currentState ;
252
+ lock .unlock ();
224
253
module .onLoad ();
225
254
lastActionTimestamp = currentTimeMillis ();
226
255
return this ;
227
256
}
228
257
229
258
public <C extends ModuleConfiguration , S extends ModuleState > Context loadModule (Module <C , S > module , C customModuleConfiguration ) {
230
259
if (isNull (module )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
260
+ ReentrantLock lock = Context .LOCK ;
261
+ lock .lock ();
231
262
ContextState currentState = state ;
232
263
state = LOADING_MODULES ;
233
264
C configuration = cast (nonNull (customModuleConfiguration ) ? customModuleConfiguration : module .getDefaultConfiguration ());
234
265
modules .put (module .getId (), new ModuleContainer <>(module , configuration ));
235
266
state = currentState ;
267
+ lock .unlock ();
236
268
module .onLoad ();
237
269
out .println (format (MODULE_LOADED_MESSAGE , module .getId (), currentTimeMillis () - lastActionTimestamp , configuration .getClass ().getName ()));
238
270
lastActionTimestamp = currentTimeMillis ();
239
271
return this ;
240
272
}
241
273
242
274
private <C extends ModuleConfiguration , S extends ModuleState > C loadModule (Module <C , S > module , PreconfiguredModuleProvider preconfiguredModulesProvider ) {
275
+ ReentrantLock lock = Context .LOCK ;
276
+ lock .lock ();
243
277
ContextState currentState = state ;
244
278
state = LOADING_MODULES ;
245
279
C configuration = cast (preconfiguredModulesProvider .getModuleConfiguration (module .getId ()).orElse (module .getDefaultConfiguration ()));
246
280
state = currentState ;
281
+ lock .unlock ();
247
282
loadModule (module , configuration );
248
283
return cast (configuration );
249
284
}
@@ -254,56 +289,80 @@ public <C extends ModuleConfiguration> Context overrideModule(String moduleId, C
254
289
if (isNull (customModuleConfiguration )) {
255
290
throw new ContextInitializationException (CUSTOM_MODULE_CONFIGURATION_IS_NULL );
256
291
}
292
+ ReentrantLock lock = Context .LOCK ;
293
+ lock .lock ();
257
294
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
258
- if (isNull (moduleContainer )) return this ;
295
+ if (isNull (moduleContainer )) {
296
+ lock .unlock ();
297
+ return this ;
298
+ }
259
299
ContextState currentState = state ;
260
300
state = LOADING_MODULES ;
261
301
modules .put (moduleId , moduleContainer .overrideConfiguration (cast (customModuleConfiguration )));
262
302
out .println (format (MODULE_OVERRIDDEN_MESSAGE , moduleId , currentTimeMillis () - lastActionTimestamp ));
263
303
lastActionTimestamp = currentTimeMillis ();
264
304
state = currentState ;
305
+ lock .unlock ();
265
306
return this ;
266
307
}
267
308
268
309
@ SuppressWarnings ("Duplicates" )
269
310
public Context reloadModule (String moduleId ) {
270
311
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
312
+ ReentrantLock lock = Context .LOCK ;
313
+ lock .lock ();
271
314
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
272
- if (isNull (moduleContainer )) return this ;
315
+ if (isNull (moduleContainer )) {
316
+ lock .unlock ();
317
+ return this ;
318
+ }
273
319
ContextState currentState = state ;
274
320
state = RELOADING_MODULES ;
275
321
moduleContainer .reloadModule ();
276
322
out .println (format (MODULE_RELOADED_MESSAGE , moduleId , currentTimeMillis () - lastActionTimestamp ));
277
323
lastActionTimestamp = currentTimeMillis ();
278
324
state = currentState ;
325
+ lock .unlock ();
279
326
return this ;
280
327
}
281
328
282
329
@ SuppressWarnings ("Duplicates" )
283
330
public Context refreshModule (String moduleId ) {
284
331
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
332
+ ReentrantLock lock = Context .LOCK ;
333
+ lock .lock ();
285
334
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
286
- if (isNull (moduleContainer )) return this ;
335
+ if (isNull (moduleContainer )) {
336
+ lock .unlock ();
337
+ return this ;
338
+ }
287
339
ContextState currentState = state ;
288
340
state = REFRESHING_MODULES ;
289
341
moduleContainer .refreshConfiguration ();
290
342
out .println (format (MODULE_REFRESHED_MESSAGE , moduleId , currentTimeMillis () - lastActionTimestamp ));
291
343
lastActionTimestamp = currentTimeMillis ();
292
344
state = currentState ;
345
+ lock .unlock ();
293
346
return this ;
294
347
}
295
348
296
349
public Context refreshAndReloadModule (String moduleId ) {
297
350
if (isNull (moduleId )) throw new ContextInitializationException (MODULE_ID_IS_NULL );
351
+ ReentrantLock lock = Context .LOCK ;
352
+ lock .lock ();
298
353
ContextState currentState = state ;
299
354
state = REFRESHING_AND_RELOADING_MODULES ;
300
355
ModuleContainer <? extends ModuleConfiguration , ? extends ModuleState > moduleContainer = modules .get (moduleId );
301
- if (isNull (moduleContainer )) return this ;
356
+ if (isNull (moduleContainer )) {
357
+ lock .unlock ();
358
+ return this ;
359
+ }
302
360
moduleContainer .reloadModule ();
303
361
moduleContainer .refreshConfiguration ();
304
362
out .println (format (MODULE_REFRESHED_AND_RELOADED_MESSAGE , moduleId , currentTimeMillis () - lastActionTimestamp ));
305
363
lastActionTimestamp = currentTimeMillis ();
306
364
state = currentState ;
365
+ lock .unlock ();
307
366
return this ;
308
367
}
309
368
0 commit comments