001
014
015 package com.liferay.portal.kernel.search;
016
017 import com.liferay.registry.Registry;
018 import com.liferay.registry.RegistryUtil;
019 import com.liferay.registry.ServiceReference;
020 import com.liferay.registry.ServiceTracker;
021 import com.liferay.registry.ServiceTrackerCustomizer;
022
023 import java.util.ArrayList;
024 import java.util.Collections;
025 import java.util.List;
026 import java.util.Map;
027 import java.util.concurrent.ConcurrentHashMap;
028
029
032 public class OpenSearchRegistryUtil {
033
034 public static OpenSearch getOpenSearch(Class<?> clazz) {
035 return _instance._openSearchInstances.get(clazz.getName());
036 }
037
038 public static OpenSearch getOpenSearch(String className) {
039 return _instance._openSearchInstances.get(className);
040 }
041
042 public static List<OpenSearch> getOpenSearchInstances() {
043 List<OpenSearch> openSearchInstances = new ArrayList<>(
044 _instance._openSearchInstances.values());
045
046 return Collections.unmodifiableList(openSearchInstances);
047 }
048
049 private OpenSearchRegistryUtil() {
050 Registry registry = RegistryUtil.getRegistry();
051
052 _serviceTracker = registry.trackServices(
053 OpenSearch.class, new OpenSearchServiceTrackerCustomizer());
054
055 _serviceTracker.open();
056 }
057
058 private static final OpenSearchRegistryUtil _instance =
059 new OpenSearchRegistryUtil();
060
061 private final Map<String, OpenSearch> _openSearchInstances =
062 new ConcurrentHashMap<>();
063 private final ServiceTracker<OpenSearch, OpenSearch> _serviceTracker;
064
065 private class OpenSearchServiceTrackerCustomizer
066 implements ServiceTrackerCustomizer<OpenSearch, OpenSearch> {
067
068 @Override
069 public OpenSearch addingService(
070 ServiceReference<OpenSearch> serviceReference) {
071
072 Registry registry = RegistryUtil.getRegistry();
073
074 OpenSearch openSearch = registry.getService(serviceReference);
075
076 _openSearchInstances.put(openSearch.getClassName(), openSearch);
077
078 return openSearch;
079 }
080
081 @Override
082 public void modifiedService(
083 ServiceReference<OpenSearch> serviceReference,
084 OpenSearch openSearch) {
085 }
086
087 @Override
088 public void removedService(
089 ServiceReference<OpenSearch> serviceReference,
090 OpenSearch openSearch) {
091
092 Registry registry = RegistryUtil.getRegistry();
093
094 registry.ungetService(serviceReference);
095
096 _openSearchInstances.remove(openSearch.getClassName());
097 }
098
099 }
100
101 }