001
014
015 package com.liferay.portlet.exportimport.controller;
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 import com.liferay.registry.util.StringPlus;
029
030 import java.util.Collection;
031 import java.util.List;
032 import java.util.Map;
033 import java.util.concurrent.ConcurrentHashMap;
034
035
038 @ProviderType
039 public class ExportImportControllerRegistryUtil {
040
041 public static ExportController getExportController(String className) {
042 return _instance._getExportController(className);
043 }
044
045 public static List<ExportImportController> getExportImportControllers() {
046 return _instance._getExportImportControllers();
047 }
048
049 public static ImportController getImportController(String className) {
050 return _instance._getImportController(className);
051 }
052
053 public static void register(ExportImportController exportImportController) {
054 _instance._register(exportImportController);
055 }
056
057 public static void unregister(
058 ExportImportController exportImportController) {
059
060 _instance._unregister(exportImportController);
061 }
062
063 private ExportImportControllerRegistryUtil() {
064 Registry registry = RegistryUtil.getRegistry();
065
066 _serviceTracker = registry.trackServices(
067 ExportImportController.class,
068 new ExportImportControllerServiceTrackerCustomizer());
069
070 _serviceTracker.open();
071 }
072
073 private ExportController _getExportController(String className) {
074 return _exportControllers.get(className);
075 }
076
077 private List<ExportImportController> _getExportImportControllers() {
078 Collection<ExportImportController> values =
079 _exportImportControllers.values();
080
081 return ListUtil.fromCollection(values);
082 }
083
084 private ImportController _getImportController(String className) {
085 return _importControllers.get(className);
086 }
087
088 private void _register(ExportImportController exportImportController) {
089 Registry registry = RegistryUtil.getRegistry();
090
091 ServiceRegistration<ExportImportController> serviceRegistration =
092 registry.registerService(
093 ExportImportController.class, exportImportController);
094
095 _serviceRegistrations.put(exportImportController, serviceRegistration);
096 }
097
098 private void _unregister(ExportImportController exportImportController) {
099 ServiceRegistration<ExportImportController> serviceRegistration =
100 _serviceRegistrations.remove(exportImportController);
101
102 if (serviceRegistration != null) {
103 serviceRegistration.unregister();
104 }
105 }
106
107 private static final ExportImportControllerRegistryUtil _instance =
108 new ExportImportControllerRegistryUtil();
109
110 private final Map<String, ExportController> _exportControllers =
111 new ConcurrentHashMap<>();
112 private final Map<String, ExportImportController> _exportImportControllers =
113 new ConcurrentHashMap<>();
114 private final Map<String, ImportController> _importControllers =
115 new ConcurrentHashMap<>();
116 private final ServiceRegistrationMap<ExportImportController>
117 _serviceRegistrations = new ServiceRegistrationMapImpl<>();
118 private final ServiceTracker<ExportImportController, ExportImportController>
119 _serviceTracker;
120
121 private class ExportImportControllerServiceTrackerCustomizer
122 implements ServiceTrackerCustomizer
123 <ExportImportController, ExportImportController> {
124
125 @Override
126 public ExportImportController addingService(
127 ServiceReference<ExportImportController> serviceReference) {
128
129 Registry registry = RegistryUtil.getRegistry();
130
131 ExportImportController exportImportController = registry.getService(
132 serviceReference);
133
134 List<String> modelClassNames = StringPlus.asList(
135 serviceReference.getProperty("model.class.name"));
136
137 for (String modelClassName : modelClassNames) {
138 if (exportImportController instanceof ExportController) {
139 _exportControllers.put(
140 modelClassName,
141 (ExportController)exportImportController);
142 }
143 else if (exportImportController instanceof ImportController) {
144 _importControllers.put(
145 modelClassName,
146 (ImportController)exportImportController);
147 }
148
149 _exportImportControllers.put(
150 modelClassName, exportImportController);
151 }
152
153 return exportImportController;
154 }
155
156 @Override
157 public void modifiedService(
158 ServiceReference<ExportImportController> serviceReference,
159 ExportImportController stagedModelDataHandler) {
160 }
161
162 @Override
163 public void removedService(
164 ServiceReference<ExportImportController> serviceReference,
165 ExportImportController exportImportController) {
166
167 Registry registry = RegistryUtil.getRegistry();
168
169 registry.ungetService(serviceReference);
170
171 List<String> modelClassNames = StringPlus.asList(
172 serviceReference.getProperty("model.class.name"));
173
174 for (String modelClassName : modelClassNames) {
175 if (exportImportController instanceof ExportController) {
176 _exportControllers.remove(modelClassName);
177 }
178 else if (exportImportController instanceof ImportController) {
179 _importControllers.remove(modelClassName);
180 }
181
182 _exportImportControllers.remove(modelClassName);
183 }
184 }
185
186 }
187
188 }