001
014
015 package com.liferay.portlet.exportimport.xstream;
016
017 import com.liferay.registry.Registry;
018 import com.liferay.registry.RegistryUtil;
019 import com.liferay.registry.ServiceReference;
020 import com.liferay.registry.ServiceRegistration;
021 import com.liferay.registry.ServiceTracker;
022 import com.liferay.registry.ServiceTrackerCustomizer;
023 import com.liferay.registry.collections.ServiceRegistrationMap;
024
025 import java.util.HashSet;
026 import java.util.Set;
027
028
031 public class XStreamConverterRegistryUtil {
032
033 public static Set<XStreamConverter> getXStreamConverters() {
034 return _instance._getXStreamConverters();
035 }
036
037 public static void register(XStreamConverter xStreamConverter) {
038 _instance._register(xStreamConverter);
039 }
040
041 public static void unregister(XStreamConverter xStreamConverter) {
042 _instance._unregister(xStreamConverter);
043 }
044
045 private XStreamConverterRegistryUtil() {
046 Registry registry = RegistryUtil.getRegistry();
047
048 _serviceTracker = registry.trackServices(
049 XStreamConverter.class,
050 new XStreamConverterServiceTrackerCustomizer());
051
052 _serviceTracker.open();
053 }
054
055 private Set<XStreamConverter> _getXStreamConverters() {
056 return _xStreamConverters;
057 }
058
059 private void _register(XStreamConverter xStreamConverter) {
060 Registry registry = RegistryUtil.getRegistry();
061
062 ServiceRegistration<XStreamConverter> serviceRegistration =
063 registry.registerService(XStreamConverter.class, xStreamConverter);
064
065 _serviceRegistrations.put(xStreamConverter, serviceRegistration);
066 }
067
068 private void _unregister(XStreamConverter xStreamConverter) {
069 ServiceRegistration<XStreamConverter> serviceRegistration =
070 _serviceRegistrations.remove(xStreamConverter);
071
072 if (serviceRegistration != null) {
073 serviceRegistration.unregister();
074 }
075 }
076
077 private static final XStreamConverterRegistryUtil _instance =
078 new XStreamConverterRegistryUtil();
079
080 private final ServiceRegistrationMap<XStreamConverter>
081 _serviceRegistrations = new ServiceRegistrationMap<>();
082 private final ServiceTracker <XStreamConverter, XStreamConverter>
083 _serviceTracker;
084 private final Set<XStreamConverter> _xStreamConverters = new HashSet<>();
085
086 private class XStreamConverterServiceTrackerCustomizer
087 implements ServiceTrackerCustomizer
088 <XStreamConverter, XStreamConverter> {
089
090 @Override
091 public XStreamConverter addingService(
092 ServiceReference<XStreamConverter> serviceReference) {
093
094 Registry registry = RegistryUtil.getRegistry();
095
096 XStreamConverter xStreamConverter = registry.getService(
097 serviceReference);
098
099 _xStreamConverters.add(xStreamConverter);
100
101 return xStreamConverter;
102 }
103
104 @Override
105 public void modifiedService(
106 ServiceReference<XStreamConverter> serviceReference,
107 XStreamConverter xStreamConverter) {
108 }
109
110 @Override
111 public void removedService(
112 ServiceReference<XStreamConverter> serviceReference,
113 XStreamConverter xStreamConverter) {
114
115 Registry registry = RegistryUtil.getRegistry();
116
117 registry.ungetService(serviceReference);
118
119 _xStreamConverters.remove(xStreamConverter);
120 }
121
122 }
123
124 }