001
014
015 package com.liferay.portal.kernel.lar;
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
028 import java.util.Collection;
029 import java.util.List;
030 import java.util.Map;
031 import java.util.concurrent.ConcurrentHashMap;
032
033
041 @ProviderType
042 public class StagedModelDataHandlerRegistryUtil {
043
044
051 public static StagedModelDataHandler<?> getStagedModelDataHandler(
052 String className) {
053
054 return _instance._getStagedModelDataHandler(className);
055 }
056
057
062 public static List<StagedModelDataHandler<?>> getStagedModelDataHandlers() {
063 return _instance._getStagedModelDataHandlers();
064 }
065
066
071 public static void register(
072 StagedModelDataHandler<?> stagedModelDataHandler) {
073
074 _instance._register(stagedModelDataHandler);
075 }
076
077
083 public static void unregister(
084 List<StagedModelDataHandler<?>> stagedModelDataHandlers) {
085
086 for (StagedModelDataHandler<?> stagedModelDataHandler :
087 stagedModelDataHandlers) {
088
089 unregister(stagedModelDataHandler);
090 }
091 }
092
093
098 public static void unregister(
099 StagedModelDataHandler<?> stagedModelDataHandler) {
100
101 _instance._unregister(stagedModelDataHandler);
102 }
103
104 private StagedModelDataHandlerRegistryUtil() {
105 Registry registry = RegistryUtil.getRegistry();
106
107 _serviceTracker = registry.trackServices(
108 (Class<StagedModelDataHandler<?>>)(Class<?>)
109 StagedModelDataHandler.class,
110 new StagedModelDataHandlerServiceTrackerCustomizer());
111
112 _serviceTracker.open();
113 }
114
115 private StagedModelDataHandler<?> _getStagedModelDataHandler(
116 String className) {
117
118 return _stagedModelDataHandlers.get(className);
119 }
120
121 private List<StagedModelDataHandler<?>> _getStagedModelDataHandlers() {
122 Collection<StagedModelDataHandler<?>> values =
123 _stagedModelDataHandlers.values();
124
125 return ListUtil.fromCollection(values);
126 }
127
128 private void _register(StagedModelDataHandler<?> stagedModelDataHandler) {
129 Registry registry = RegistryUtil.getRegistry();
130
131 ServiceRegistration<StagedModelDataHandler<?>> serviceRegistration =
132 registry.registerService(
133 (Class<StagedModelDataHandler<?>>)(Class<?>)
134 StagedModelDataHandler.class, stagedModelDataHandler);
135
136 _serviceRegistrations.put(stagedModelDataHandler, serviceRegistration);
137 }
138
139 private void _unregister(StagedModelDataHandler<?> stagedModelDataHandler) {
140 ServiceRegistration<StagedModelDataHandler<?>> serviceRegistration =
141 _serviceRegistrations.remove(stagedModelDataHandler);
142
143 if (serviceRegistration != null) {
144 serviceRegistration.unregister();
145 }
146 }
147
148 private static final StagedModelDataHandlerRegistryUtil _instance =
149 new StagedModelDataHandlerRegistryUtil();
150
151 private final ServiceRegistrationMap<StagedModelDataHandler<?>>
152 _serviceRegistrations =
153 new ServiceRegistrationMap<StagedModelDataHandler<?>>();
154 private final
155 ServiceTracker<StagedModelDataHandler<?>, StagedModelDataHandler<?>>
156 _serviceTracker;
157 private final Map<String, StagedModelDataHandler<?>>
158 _stagedModelDataHandlers =
159 new ConcurrentHashMap<String, StagedModelDataHandler<?>>();
160
161 private class StagedModelDataHandlerServiceTrackerCustomizer
162 implements ServiceTrackerCustomizer
163 <StagedModelDataHandler<?>, StagedModelDataHandler<?>> {
164
165 @Override
166 public StagedModelDataHandler<?> addingService(
167 ServiceReference<StagedModelDataHandler<?>> serviceReference) {
168
169 Registry registry = RegistryUtil.getRegistry();
170
171 StagedModelDataHandler<?> stagedModelDataHandler =
172 registry.getService(serviceReference);
173
174 for (String className : stagedModelDataHandler.getClassNames()) {
175 _stagedModelDataHandlers.put(className, stagedModelDataHandler);
176 }
177
178 return stagedModelDataHandler;
179 }
180
181 @Override
182 public void modifiedService(
183 ServiceReference<StagedModelDataHandler<?>> serviceReference,
184 StagedModelDataHandler<?> stagedModelDataHandler) {
185 }
186
187 @Override
188 public void removedService(
189 ServiceReference<StagedModelDataHandler<?>> serviceReference,
190 StagedModelDataHandler<?> stagedModelDataHandler) {
191
192 Registry registry = RegistryUtil.getRegistry();
193
194 registry.ungetService(serviceReference);
195
196 for (String className : stagedModelDataHandler.getClassNames()) {
197 _stagedModelDataHandlers.remove(className);
198 }
199 }
200
201 }
202
203 }