1 package com.atlassian.seraph.ioc;
2
3 import com.atlassian.seraph.service.rememberme.NoopRememberMeService;
4 import com.atlassian.seraph.service.rememberme.RememberMeService;
5
6 /**
7 * This class represents an extension point for Seraph. Applications that use Seraph library can register implementations of service interfaces
8 * defined by Seraph. To register an implementation host application must call an appropriate setter method eg. {@link #setRememberMeService(RememberMeService)}
9 * Once host application registers a service Seraph will use the registered service. Host application may chose not to register a service,
10 * in such case Seraph will use default Noop implementation of it. E.g. if a host application does not set a {@link RememberMeService} through
11 * {@link #setRememberMeService(RememberMeService)} Seraph will use a {@link NoopRememberMeService} implementation of {@link RememberMeService}.
12 *
13 * If in the future Seraph defines new SPIs and expects host application to provide implementations for them then this class will have to add
14 * setters and getters definitions for new interfaces.
15 *
16 * @author anatoli
17 *
18 */
19 public class ApplicationServicesRegistry
20 {
21 private static volatile RememberMeService rememberMeService = NoopRememberMeService.INSTANCE;
22
23 /**
24 * This method provides the ability for a host application to set an implementation of {@link RememberMeService} for Seraph to use.
25 * If host application does not set its implementation of {@link RememberMeService} Seraph will use a {@link NoopRememberMeService}.
26 *
27 * @param rememberMeService
28 *
29 * @throws IllegalArgumentException if argument is null
30 */
31 public static void setRememberMeService(RememberMeService rememberMeService)
32 {
33 if (rememberMeService == null)
34 {
35 throw new IllegalArgumentException("rememberMeService must not be null.");
36 }
37 ApplicationServicesRegistry.rememberMeService = rememberMeService;
38 }
39
40 /**
41 * Returns a RememberMeService that was set by an application via {@link #setRememberMeService(RememberMeService)}
42 * or a {@link NoopRememberMeService} if application has not set one. Will never return null.
43 * @return
44 */
45 public static RememberMeService getRememberMeService()
46 {
47 return rememberMeService;
48 }
49 }