001
014
015 package com.liferay.portal.kernel.util;
016
017 import aQute.bnd.annotation.ProviderType;
018
019 import com.liferay.registry.Registry;
020 import com.liferay.registry.RegistryUtil;
021 import com.liferay.registry.ServiceReference;
022 import com.liferay.registry.ServiceRegistration;
023 import com.liferay.registry.ServiceTracker;
024 import com.liferay.registry.ServiceTrackerCustomizer;
025 import com.liferay.registry.collections.ServiceRegistrationMap;
026 import com.liferay.registry.collections.ServiceRegistrationMapImpl;
027
028 import java.util.List;
029 import java.util.Map;
030 import java.util.Set;
031 import java.util.concurrent.ConcurrentHashMap;
032
033
036 @ProviderType
037 public class TermsOfUseContentProviderRegistryUtil {
038
039 public static String[] getClassNames() {
040 return _instance._getClassNames();
041 }
042
043 public static TermsOfUseContentProvider getTermsOfUseContentProvider() {
044 return _instance._getTermsOfUseContentProvider();
045 }
046
047 public static TermsOfUseContentProvider getTermsOfUseContentProvider(
048 String className) {
049
050 return _instance._getTermsOfUseContentProvider(className);
051 }
052
053 public static List<TermsOfUseContentProvider>
054 getTermsOfUseContentProviders() {
055
056 return _instance._getTermsOfUseContentProviders();
057 }
058
059 public static void register(
060 TermsOfUseContentProvider termsOfUseContentProvider) {
061
062 _instance._register(termsOfUseContentProvider);
063 }
064
065 public static void unregister(
066 TermsOfUseContentProvider termsOfUseContentProvider) {
067
068 _instance._unregister(termsOfUseContentProvider);
069 }
070
071 private TermsOfUseContentProviderRegistryUtil() {
072 Registry registry = RegistryUtil.getRegistry();
073
074 _serviceTracker = registry.trackServices(
075 TermsOfUseContentProvider.class,
076 new TermsOfUseContentProviderServiceTrackerCustomizer());
077
078 _serviceTracker.open();
079 }
080
081 private String[] _getClassNames() {
082 Set<String> classNames = _termsOfUseContentProviders.keySet();
083
084 return classNames.toArray(new String[classNames.size()]);
085 }
086
087 private TermsOfUseContentProvider _getTermsOfUseContentProvider() {
088 List<TermsOfUseContentProvider> termsOfUseContentProviders =
089 _getTermsOfUseContentProviders();
090
091 if (termsOfUseContentProviders.isEmpty()) {
092 return null;
093 }
094
095 return termsOfUseContentProviders.get(0);
096 }
097
098 private TermsOfUseContentProvider _getTermsOfUseContentProvider(
099 String className) {
100
101 return _termsOfUseContentProviders.get(className);
102 }
103
104 private List<TermsOfUseContentProvider> _getTermsOfUseContentProviders() {
105 return ListUtil.fromMapValues(_termsOfUseContentProviders);
106 }
107
108 private void _register(
109 TermsOfUseContentProvider termsOfUseContentProvider) {
110
111 Registry registry = RegistryUtil.getRegistry();
112
113 ServiceRegistration<TermsOfUseContentProvider> serviceRegistration =
114 registry.registerService(
115 TermsOfUseContentProvider.class, termsOfUseContentProvider);
116
117 _serviceRegistrations.put(
118 termsOfUseContentProvider, serviceRegistration);
119 }
120
121 private void _unregister(
122 TermsOfUseContentProvider termsOfUseContentProvider) {
123
124 ServiceRegistration<TermsOfUseContentProvider> serviceRegistration =
125 _serviceRegistrations.remove(termsOfUseContentProvider);
126
127 if (serviceRegistration != null) {
128 serviceRegistration.unregister();
129 }
130 }
131
132 private static final TermsOfUseContentProviderRegistryUtil _instance =
133 new TermsOfUseContentProviderRegistryUtil();
134
135 private final ServiceRegistrationMap<TermsOfUseContentProvider>
136 _serviceRegistrations = new ServiceRegistrationMapImpl<>();
137 private final ServiceTracker
138 <TermsOfUseContentProvider, TermsOfUseContentProvider> _serviceTracker;
139 private final Map<String, TermsOfUseContentProvider>
140 _termsOfUseContentProviders = new ConcurrentHashMap<>();
141
142 private class TermsOfUseContentProviderServiceTrackerCustomizer
143 implements ServiceTrackerCustomizer
144 <TermsOfUseContentProvider, TermsOfUseContentProvider> {
145
146 @Override
147 public TermsOfUseContentProvider addingService(
148 ServiceReference<TermsOfUseContentProvider> serviceReference) {
149
150 Registry registry = RegistryUtil.getRegistry();
151
152 TermsOfUseContentProvider termsOfUseContentProvider =
153 registry.getService(serviceReference);
154
155 _termsOfUseContentProviders.put(
156 termsOfUseContentProvider.getClassName(),
157 termsOfUseContentProvider);
158
159 return termsOfUseContentProvider;
160 }
161
162 @Override
163 public void modifiedService(
164 ServiceReference<TermsOfUseContentProvider> serviceReference,
165 TermsOfUseContentProvider termsOfUseContentProvider) {
166 }
167
168 @Override
169 public void removedService(
170 ServiceReference<TermsOfUseContentProvider> serviceReference,
171 TermsOfUseContentProvider termsOfUseContentProvider) {
172
173 Registry registry = RegistryUtil.getRegistry();
174
175 registry.ungetService(serviceReference);
176
177 _termsOfUseContentProviders.remove(
178 termsOfUseContentProvider.getClassName());
179 }
180
181 }
182
183 }