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