001
014
015 package com.liferay.portlet.ratings.transformer;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.kernel.util.UnicodeProperties;
024 import com.liferay.portlet.ratings.RatingsType;
025 import com.liferay.portlet.ratings.definition.PortletRatingsDefinitionUtil;
026 import com.liferay.portlet.ratings.definition.PortletRatingsDefinitionValues;
027 import com.liferay.portlet.ratings.service.RatingsEntryLocalServiceUtil;
028 import com.liferay.registry.Registry;
029 import com.liferay.registry.RegistryUtil;
030 import com.liferay.registry.ServiceTracker;
031
032 import java.util.Map;
033
034 import javax.portlet.PortletPreferences;
035
036
040 public class RatingsDataTransformerUtil {
041
042 public static String getPropertyKey(String className) {
043 return className + StringPool.UNDERLINE + "RatingsType";
044 }
045
046 public static void transformCompanyRatingsData(
047 final long companyId, PortletPreferences oldPortletPreferences,
048 UnicodeProperties unicodeProperties)
049 throws PortalException {
050
051 _instance._transformCompanyRatingsData(
052 companyId, oldPortletPreferences, unicodeProperties);
053 }
054
055 public static void transformGroupRatingsData(
056 final long groupId, UnicodeProperties oldUnicodeProperties,
057 UnicodeProperties unicodeProperties)
058 throws PortalException {
059
060 _instance._transformGroupRatingsData(
061 groupId, oldUnicodeProperties, unicodeProperties);
062 }
063
064 private RatingsDataTransformerUtil() {
065 Registry registry = RegistryUtil.getRegistry();
066
067 _serviceTracker = registry.trackServices(RatingsDataTransformer.class);
068
069 _serviceTracker.open();
070 }
071
072 private void _transformCompanyRatingsData(
073 final long companyId, PortletPreferences oldPortletPreferences,
074 UnicodeProperties unicodeProperties)
075 throws PortalException {
076
077 RatingsDataTransformer ratingsDataTransformer =
078 _serviceTracker.getService();
079
080 if (ratingsDataTransformer == null) {
081 return;
082 }
083
084 Map<String, PortletRatingsDefinitionValues>
085 portletRatingsDefinitionValuesMap =
086 PortletRatingsDefinitionUtil.
087 getPortletRatingsDefinitionValuesMap();
088
089 for (String className : portletRatingsDefinitionValuesMap.keySet()) {
090 String propertyKey = getPropertyKey(className);
091
092 RatingsType fromRatingsType = RatingsType.parse(
093 oldPortletPreferences.getValue(propertyKey, StringPool.BLANK));
094
095 if (fromRatingsType == null) {
096 PortletRatingsDefinitionValues portletRatingsDefinitionValues =
097 portletRatingsDefinitionValuesMap.get(className);
098
099 fromRatingsType =
100 portletRatingsDefinitionValues.getDefaultRatingsType();
101 }
102
103 RatingsType toRatingsType = RatingsType.parse(
104 unicodeProperties.getProperty(propertyKey));
105
106 _transformRatingsData(
107 "companyId", companyId, className, fromRatingsType,
108 toRatingsType);
109 }
110 }
111
112 private void _transformGroupRatingsData(
113 final long groupId, UnicodeProperties oldUnicodeProperties,
114 UnicodeProperties unicodeProperties)
115 throws PortalException {
116
117 RatingsDataTransformer ratingsDataTransformer =
118 _serviceTracker.getService();
119
120 if (ratingsDataTransformer == null) {
121 return;
122 }
123
124 Map<String, PortletRatingsDefinitionValues>
125 portletRatingsDefinitionValuesMap =
126 PortletRatingsDefinitionUtil.
127 getPortletRatingsDefinitionValuesMap();
128
129 for (String className : portletRatingsDefinitionValuesMap.keySet()) {
130 String propertyKey = getPropertyKey(className);
131
132 RatingsType fromRatingsType = RatingsType.parse(
133 oldUnicodeProperties.getProperty(propertyKey));
134
135 if (fromRatingsType == null) {
136 PortletRatingsDefinitionValues portletRatingsDefinitionValues =
137 portletRatingsDefinitionValuesMap.get(className);
138
139 fromRatingsType =
140 portletRatingsDefinitionValues.getDefaultRatingsType();
141 }
142
143 RatingsType toRatingsType = RatingsType.parse(
144 unicodeProperties.getProperty(propertyKey));
145
146 _transformRatingsData(
147 "groupId", groupId, className, fromRatingsType, toRatingsType);
148 }
149 }
150
151 private void _transformRatingsData(
152 final String classPKFieldName, final long classPKFieldValue,
153 final String className, RatingsType fromRatingsType,
154 RatingsType toRatingsType)
155 throws PortalException {
156
157 if ((toRatingsType == null) || fromRatingsType.equals(toRatingsType)) {
158 return;
159 }
160
161 RatingsDataTransformer ratingsDataTransformer =
162 _serviceTracker.getService();
163
164 ActionableDynamicQuery.PerformActionMethod performActionMethod =
165 ratingsDataTransformer.transformRatingsData(
166 fromRatingsType, toRatingsType);
167
168 if (performActionMethod == null) {
169 return;
170 }
171
172 ActionableDynamicQuery ratingsEntryActionableDynamicQuery =
173 RatingsEntryLocalServiceUtil.getActionableDynamicQuery();
174
175 ratingsEntryActionableDynamicQuery.setAddCriteriaMethod(
176 new ActionableDynamicQuery.AddCriteriaMethod() {
177
178 @Override
179 public void addCriteria(DynamicQuery dynamicQuery) {
180 Property property = PropertyFactoryUtil.forName(
181 classPKFieldName);
182
183 dynamicQuery.add(property.eq(classPKFieldValue));
184
185 property = PropertyFactoryUtil.forName("className");
186
187 dynamicQuery.add(property.eq(className));
188 }
189
190 });
191
192 ratingsEntryActionableDynamicQuery.setPerformActionMethod(
193 performActionMethod);
194
195 ratingsEntryActionableDynamicQuery.performActions();
196 }
197
198 private static final RatingsDataTransformerUtil _instance =
199 new RatingsDataTransformerUtil();
200
201 private final ServiceTracker<RatingsDataTransformer, RatingsDataTransformer>
202 _serviceTracker;
203
204 }