001
014
015 package com.liferay.portlet.dynamicdatamapping.render;
016
017 import com.liferay.registry.Filter;
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.ArrayList;
025 import java.util.HashMap;
026 import java.util.List;
027 import java.util.Map;
028
029
032 public class DDMFormFieldValueRendererRegistryImpl
033 implements DDMFormFieldValueRendererRegistry {
034
035 public DDMFormFieldValueRendererRegistryImpl() {
036 Registry registry = RegistryUtil.getRegistry();
037
038 Class<?> clazz = getClass();
039
040 Filter filter = registry.getFilter(
041 "(&(objectClass=" + DDMFormFieldValueRenderer.class.getName() +
042 ")(!(objectClass=" + clazz.getName() + ")))");
043
044 _serviceTracker = registry.trackServices(
045 filter, new DDMFormFieldValueRendererServiceTrackerCustomizer());
046
047 _serviceTracker.open();
048 }
049
050 @Override
051 public DDMFormFieldValueRenderer getDDMFormFieldValueRenderer(
052 String ddmFormFieldType) {
053
054 List<DDMFormFieldValueRenderer> ddmFormFieldValueRenderers =
055 _ddmFormFieldValueRenderersMap.get(ddmFormFieldType);
056
057 if ((ddmFormFieldValueRenderers == null) ||
058 ddmFormFieldValueRenderers.isEmpty()) {
059
060 return null;
061 }
062
063 return ddmFormFieldValueRenderers.get(
064 ddmFormFieldValueRenderers.size() - 1);
065 }
066
067 public void setDefaultDDMFormFieldValueRenderers(
068 List<DDMFormFieldValueRenderer> ddmFormFieldValueRenderers) {
069
070 Registry registry = RegistryUtil.getRegistry();
071
072 for (DDMFormFieldValueRenderer ddmFormFieldValueRenderer :
073 ddmFormFieldValueRenderers) {
074
075 registry.registerService(
076 DDMFormFieldValueRenderer.class, ddmFormFieldValueRenderer);
077 }
078 }
079
080 private final Map<String, List<DDMFormFieldValueRenderer>>
081 _ddmFormFieldValueRenderersMap =
082 new HashMap<String, List<DDMFormFieldValueRenderer>>();
083 private final
084 ServiceTracker<DDMFormFieldValueRenderer, DDMFormFieldValueRenderer>
085 _serviceTracker;
086
087 private class DDMFormFieldValueRendererServiceTrackerCustomizer
088 implements
089 ServiceTrackerCustomizer
090 <DDMFormFieldValueRenderer, DDMFormFieldValueRenderer> {
091
092 @Override
093 public DDMFormFieldValueRenderer addingService(
094 ServiceReference<DDMFormFieldValueRenderer> serviceReference) {
095
096 Registry registry = RegistryUtil.getRegistry();
097
098 DDMFormFieldValueRenderer ddmFormFieldValueRenderer =
099 registry.getService(serviceReference);
100
101 String supportedDDMFormFieldType =
102 ddmFormFieldValueRenderer.getSupportedDDMFormFieldType();
103
104 List<DDMFormFieldValueRenderer> ddmFormFieldValueRenderers =
105 _ddmFormFieldValueRenderersMap.get(supportedDDMFormFieldType);
106
107 if (ddmFormFieldValueRenderers == null) {
108 ddmFormFieldValueRenderers =
109 new ArrayList<DDMFormFieldValueRenderer>();
110
111 _ddmFormFieldValueRenderersMap.put(
112 supportedDDMFormFieldType, ddmFormFieldValueRenderers);
113 }
114
115 ddmFormFieldValueRenderers.add(ddmFormFieldValueRenderer);
116
117 return ddmFormFieldValueRenderer;
118 }
119
120 @Override
121 public void modifiedService(
122 ServiceReference<DDMFormFieldValueRenderer> serviceReference,
123 DDMFormFieldValueRenderer ddmFormFieldValueRenderer) {
124 }
125
126 @Override
127 public void removedService(
128 ServiceReference<DDMFormFieldValueRenderer> serviceReference,
129 DDMFormFieldValueRenderer ddmFormFieldValueRenderer) {
130
131 Registry registry = RegistryUtil.getRegistry();
132
133 registry.ungetService(serviceReference);
134
135 String supportedDDMFormFieldType =
136 ddmFormFieldValueRenderer.getSupportedDDMFormFieldType();
137
138 List<DDMFormFieldValueRenderer> ddmFormFieldValueRenderers =
139 _ddmFormFieldValueRenderersMap.get(supportedDDMFormFieldType);
140
141 if (ddmFormFieldValueRenderers == null) {
142 return;
143 }
144
145 ddmFormFieldValueRenderers.remove(ddmFormFieldValueRenderer);
146 }
147
148 }
149
150 }