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 import com.liferay.registry.collections.ServiceRegistrationMapImpl;
025
026 import java.util.HashSet;
027 import java.util.Set;
028
029
032 public class XStreamConverterRegistryUtil {
033
034 public static Set<XStreamConverter> getXStreamConverters() {
035 return _instance._getXStreamConverters();
036 }
037
038 public static void register(XStreamConverter xStreamConverter) {
039 _instance._register(xStreamConverter);
040 }
041
042 public static void unregister(XStreamConverter xStreamConverter) {
043 _instance._unregister(xStreamConverter);
044 }
045
046 private XStreamConverterRegistryUtil() {
047 Registry registry = RegistryUtil.getRegistry();
048
049 _serviceTracker = registry.trackServices(
050 XStreamConverter.class,
051 new XStreamConverterServiceTrackerCustomizer());
052
053 _serviceTracker.open();
054 }
055
056 private Set<XStreamConverter> _getXStreamConverters() {
057 return _xStreamConverters;
058 }
059
060 private void _register(XStreamConverter xStreamConverter) {
061 Registry registry = RegistryUtil.getRegistry();
062
063 ServiceRegistration<XStreamConverter> serviceRegistration =
064 registry.registerService(XStreamConverter.class, xStreamConverter);
065
066 _serviceRegistrations.put(xStreamConverter, serviceRegistration);
067 }
068
069 private void _unregister(XStreamConverter xStreamConverter) {
070 ServiceRegistration<XStreamConverter> serviceRegistration =
071 _serviceRegistrations.remove(xStreamConverter);
072
073 if (serviceRegistration != null) {
074 serviceRegistration.unregister();
075 }
076 }
077
078 private static final XStreamConverterRegistryUtil _instance =
079 new XStreamConverterRegistryUtil();
080
081 private final ServiceRegistrationMap<XStreamConverter>
082 _serviceRegistrations = new ServiceRegistrationMapImpl<>();
083 private final ServiceTracker <XStreamConverter, XStreamConverter>
084 _serviceTracker;
085 private final Set<XStreamConverter> _xStreamConverters = new HashSet<>();
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 }