001
014
015 package com.liferay.portlet.dynamicdatamapping.registry;
016
017 import com.liferay.portal.kernel.util.ListUtil;
018 import com.liferay.registry.Registry;
019 import com.liferay.registry.RegistryUtil;
020 import com.liferay.registry.ServiceReference;
021 import com.liferay.registry.ServiceTracker;
022 import com.liferay.registry.ServiceTrackerCustomizer;
023
024 import java.util.Collections;
025 import java.util.List;
026 import java.util.Map;
027 import java.util.Set;
028 import java.util.concurrent.ConcurrentHashMap;
029
030
033 public class DDMFormFieldTypeRegistryImpl implements DDMFormFieldTypeRegistry {
034
035 public DDMFormFieldTypeRegistryImpl() {
036 Registry registry = RegistryUtil.getRegistry();
037
038 _serviceTracker = registry.trackServices(
039 DDMFormFieldType.class,
040 new DDMFormFieldTypeServiceTrackerCustomizer());
041
042 _serviceTracker.open();
043 }
044
045 @Override
046 public DDMFormFieldType getDDMFormFieldType(String name) {
047 return _ddmFormFieldTypesMap.get(name);
048 }
049
050 @Override
051 public Set<String> getDDMFormFieldTypeNames() {
052 return Collections.unmodifiableSet(_ddmFormFieldTypesMap.keySet());
053 }
054
055 @Override
056 public List<DDMFormFieldType> getDDMFormFieldTypes() {
057 List<DDMFormFieldType> ddmFormFieldTypes = ListUtil.fromCollection(
058 _ddmFormFieldTypesMap.values());
059
060 return Collections.unmodifiableList(ddmFormFieldTypes);
061 }
062
063 private final Map<String, DDMFormFieldType> _ddmFormFieldTypesMap =
064 new ConcurrentHashMap<>();
065 private final ServiceTracker<DDMFormFieldType, DDMFormFieldType>
066 _serviceTracker;
067
068 private class DDMFormFieldTypeServiceTrackerCustomizer
069 implements
070 ServiceTrackerCustomizer<DDMFormFieldType, DDMFormFieldType> {
071
072 @Override
073 public DDMFormFieldType addingService(
074 ServiceReference<DDMFormFieldType> serviceReference) {
075
076 Registry registry = RegistryUtil.getRegistry();
077
078 DDMFormFieldType ddmFormFieldType = registry.getService(
079 serviceReference);
080
081 _ddmFormFieldTypesMap.put(
082 ddmFormFieldType.getName(), ddmFormFieldType);
083
084 return ddmFormFieldType;
085 }
086
087 @Override
088 public void modifiedService(
089 ServiceReference<DDMFormFieldType> serviceReference,
090 DDMFormFieldType ddmFormFieldType) {
091 }
092
093 @Override
094 public void removedService(
095 ServiceReference<DDMFormFieldType> serviceReference,
096 DDMFormFieldType ddmFormFieldType) {
097
098 Registry registry = RegistryUtil.getRegistry();
099
100 registry.ungetService(serviceReference);
101
102 _ddmFormFieldTypesMap.remove(ddmFormFieldType.getName());
103 }
104
105 }
106
107 }