001
014
015 package com.liferay.portal.kernel.lar.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<XStreamConverter>();
082 private final ServiceTracker <XStreamConverter, XStreamConverter>
083 _serviceTracker;
084 private final Set<XStreamConverter> _xStreamConverters =
085 new HashSet<XStreamConverter>();
086
087 private class XStreamConverterServiceTrackerCustomizer
088 implements ServiceTrackerCustomizer
089 <XStreamConverter, XStreamConverter> {
090
091 @Override
092 public XStreamConverter addingService(
093 ServiceReference<XStreamConverter> serviceReference) {
094
095 Registry registry = RegistryUtil.getRegistry();
096
097 XStreamConverter xStreamConverter = registry.getService(
098 serviceReference);
099
100 _xStreamConverters.add(xStreamConverter);
101
102 return xStreamConverter;
103 }
104
105 @Override
106 public void modifiedService(
107 ServiceReference<XStreamConverter> serviceReference,
108 XStreamConverter xStreamConverter) {
109 }
110
111 @Override
112 public void removedService(
113 ServiceReference<XStreamConverter> serviceReference,
114 XStreamConverter xStreamConverter) {
115
116 Registry registry = RegistryUtil.getRegistry();
117
118 registry.ungetService(serviceReference);
119
120 _xStreamConverters.remove(xStreamConverter);
121 }
122
123 }
124
125 }