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