001
014
015 package com.liferay.portal.kernel.atom;
016
017 import aQute.bnd.annotation.ProviderType;
018
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.util.ListUtil;
022 import com.liferay.registry.Registry;
023 import com.liferay.registry.RegistryUtil;
024 import com.liferay.registry.ServiceReference;
025 import com.liferay.registry.ServiceTracker;
026 import com.liferay.registry.ServiceTrackerCustomizer;
027
028 import java.util.List;
029 import java.util.Map;
030 import java.util.concurrent.ConcurrentHashMap;
031
032
035 @ProviderType
036 public class AtomCollectionAdapterRegistryUtil {
037
038 public static AtomCollectionAdapter<?> getAtomCollectionAdapter(
039 String collectionName) {
040
041 return _instance._getAtomCollectionAdapter(collectionName);
042 }
043
044 public static List<AtomCollectionAdapter<?>> getAtomCollectionAdapters() {
045 return _instance._getAtomCollectionAdapters();
046 }
047
048 private AtomCollectionAdapterRegistryUtil() {
049 Registry registry = RegistryUtil.getRegistry();
050
051 _serviceTracker = registry.trackServices(
052 (Class<AtomCollectionAdapter<?>>)(Class<?>)
053 AtomCollectionAdapter.class,
054 new AtomCollectionAdapterServiceTrackerCustomizer());
055
056 _serviceTracker.open();
057 }
058
059 private AtomCollectionAdapter<?> _getAtomCollectionAdapter(
060 String collectionName) {
061
062 return _atomCollectionAdapters.get(collectionName);
063 }
064
065 private List<AtomCollectionAdapter<?>> _getAtomCollectionAdapters() {
066 return ListUtil.fromMapValues(_atomCollectionAdapters);
067 }
068
069 private static final Log _log = LogFactoryUtil.getLog(
070 AtomCollectionAdapterRegistryUtil.class);
071
072 private static final AtomCollectionAdapterRegistryUtil _instance =
073 new AtomCollectionAdapterRegistryUtil();
074
075 private final Map<String, AtomCollectionAdapter<?>>
076 _atomCollectionAdapters = new ConcurrentHashMap<>();
077 private final
078 ServiceTracker<AtomCollectionAdapter<?>, AtomCollectionAdapter<?>>
079 _serviceTracker;
080
081 private class AtomCollectionAdapterServiceTrackerCustomizer
082 implements ServiceTrackerCustomizer
083 <AtomCollectionAdapter<?>, AtomCollectionAdapter<?>> {
084
085 @Override
086 public AtomCollectionAdapter<?> addingService(
087 ServiceReference<AtomCollectionAdapter<?>> serviceReference) {
088
089 Registry registry = RegistryUtil.getRegistry();
090
091 AtomCollectionAdapter<?> atomCollectionAdapter =
092 registry.getService(serviceReference);
093
094 if (_atomCollectionAdapters.containsKey(
095 atomCollectionAdapter.getCollectionName())) {
096
097 if (_log.isWarnEnabled()) {
098 _log.warn(
099 "Duplicate collection name " +
100 atomCollectionAdapter.getCollectionName());
101 }
102
103 return null;
104 }
105
106 _atomCollectionAdapters.put(
107 atomCollectionAdapter.getCollectionName(),
108 atomCollectionAdapter);
109
110 return atomCollectionAdapter;
111 }
112
113 @Override
114 public void modifiedService(
115 ServiceReference<AtomCollectionAdapter<?>> serviceReference,
116 AtomCollectionAdapter<?> atomCollectionAdapter) {
117 }
118
119 @Override
120 public void removedService(
121 ServiceReference<AtomCollectionAdapter<?>> serviceReference,
122 AtomCollectionAdapter<?> atomCollectionAdapter) {
123
124 Registry registry = RegistryUtil.getRegistry();
125
126 registry.ungetService(serviceReference);
127
128 _atomCollectionAdapters.remove(
129 atomCollectionAdapter.getCollectionName());
130 }
131
132 }
133
134 }