001
014
015 package com.liferay.portlet.social.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.util.StringPool;
021 import com.liferay.portal.kernel.util.WebKeys;
022 import com.liferay.portal.service.ServiceContext;
023 import com.liferay.portal.service.ServiceContextFactory;
024 import com.liferay.portal.theme.ThemeDisplay;
025 import com.liferay.portal.util.PortalUtil;
026 import com.liferay.portal.util.PropsValues;
027 import com.liferay.portlet.social.model.SocialActivity;
028 import com.liferay.portlet.social.model.SocialActivityFeedEntry;
029 import com.liferay.portlet.social.model.SocialActivityInterpreter;
030 import com.liferay.portlet.social.model.SocialActivitySet;
031 import com.liferay.portlet.social.model.impl.SocialActivityInterpreterImpl;
032 import com.liferay.portlet.social.model.impl.SocialRequestInterpreterImpl;
033 import com.liferay.portlet.social.service.base.SocialActivityInterpreterLocalServiceBaseImpl;
034 import com.liferay.registry.Filter;
035 import com.liferay.registry.Registry;
036 import com.liferay.registry.RegistryUtil;
037 import com.liferay.registry.ServiceReference;
038 import com.liferay.registry.ServiceRegistration;
039 import com.liferay.registry.ServiceTracker;
040 import com.liferay.registry.ServiceTrackerCustomizer;
041 import com.liferay.registry.collections.ServiceRegistrationMap;
042
043 import java.util.ArrayList;
044 import java.util.HashMap;
045 import java.util.List;
046 import java.util.Map;
047
048 import javax.servlet.http.HttpServletRequest;
049
050
067 public class SocialActivityInterpreterLocalServiceImpl
068 extends SocialActivityInterpreterLocalServiceBaseImpl {
069
070
075 @Override
076 public void addActivityInterpreter(
077 SocialActivityInterpreter activityInterpreter) {
078
079 Registry registry = RegistryUtil.getRegistry();
080
081 Map<String, Object> properties = new HashMap<String, Object>();
082
083 SocialActivityInterpreterImpl activityInterpreterImpl =
084 (SocialActivityInterpreterImpl)activityInterpreter;
085
086 properties.put(
087 "javax.portlet.name", activityInterpreterImpl.getPortletId());
088
089 ServiceRegistration<SocialActivityInterpreter> serviceRegistration =
090 registry.registerService(
091 SocialActivityInterpreter.class, activityInterpreter,
092 properties);
093
094 _serviceRegistrations.put(activityInterpreter, serviceRegistration);
095 }
096
097 @Override
098 public void afterPropertiesSet() {
099 Registry registry = RegistryUtil.getRegistry();
100
101 Filter filter = registry.getFilter(
102 "(&(javax.portlet.name=*)(objectClass=" +
103 SocialActivityInterpreter.class.getName() + "))");
104
105 _serviceTracker = registry.trackServices(
106 filter, new SocialActivityInterpreterServiceTrackerCustomizer());
107
108 _serviceTracker.open();
109 }
110
111
116 @Override
117 public void deleteActivityInterpreter(
118 SocialActivityInterpreter activityInterpreter) {
119
120 ServiceRegistration<SocialActivityInterpreter> serviceRegistration =
121 _serviceRegistrations.remove(activityInterpreter);
122
123 if (serviceRegistration != null) {
124 serviceRegistration.unregister();
125 }
126 }
127
128 @Override
129 public Map<String, List<SocialActivityInterpreter>>
130 getActivityInterpreters() {
131
132 return _activityInterpreters;
133 }
134
135 @Override
136 public List<SocialActivityInterpreter> getActivityInterpreters(
137 String selector) {
138
139 return _activityInterpreters.get(selector);
140 }
141
142
146 @Deprecated
147 @Override
148 public SocialActivityFeedEntry interpret(
149 SocialActivity activity, ThemeDisplay themeDisplay) {
150
151 ServiceContext serviceContext = null;
152
153 try {
154 serviceContext = ServiceContextFactory.getInstance(
155 themeDisplay.getRequest());
156 }
157 catch (Exception e) {
158 return null;
159 }
160
161 return interpret(StringPool.BLANK, activity, serviceContext);
162 }
163
164
181 @Override
182 public SocialActivityFeedEntry interpret(
183 String selector, SocialActivity activity,
184 ServiceContext serviceContext) {
185
186 HttpServletRequest request = serviceContext.getRequest();
187
188 if (request == null) {
189 return null;
190 }
191
192 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
193 WebKeys.THEME_DISPLAY);
194
195 try {
196 if (activity.getUserId() == themeDisplay.getDefaultUserId()) {
197 return null;
198 }
199 }
200 catch (Exception e) {
201 _log.error(e, e);
202 }
203
204 if (activity.getMirrorActivityId() > 0) {
205 SocialActivity mirrorActivity = null;
206
207 try {
208 mirrorActivity = socialActivityLocalService.getActivity(
209 activity.getMirrorActivityId());
210 }
211 catch (Exception e) {
212 }
213
214 if (mirrorActivity != null) {
215 activity = mirrorActivity;
216 }
217 }
218
219 List<SocialActivityInterpreter> activityInterpreters =
220 _activityInterpreters.get(selector);
221
222 if (activityInterpreters == null) {
223 return null;
224 }
225
226 String className = PortalUtil.getClassName(activity.getClassNameId());
227
228 for (int i = 0; i < activityInterpreters.size(); i++) {
229 SocialActivityInterpreterImpl activityInterpreter =
230 (SocialActivityInterpreterImpl)activityInterpreters.get(i);
231
232 if (activityInterpreter.hasClassName(className)) {
233 SocialActivityFeedEntry activityFeedEntry =
234 activityInterpreter.interpret(activity, serviceContext);
235
236 if (activityFeedEntry != null) {
237 activityFeedEntry.setPortletId(
238 activityInterpreter.getPortletId());
239
240 return activityFeedEntry;
241 }
242 }
243 }
244
245 return null;
246 }
247
248 @Override
249 public SocialActivityFeedEntry interpret(
250 String selector, SocialActivitySet activitySet,
251 ServiceContext serviceContext) {
252
253 HttpServletRequest request = serviceContext.getRequest();
254
255 if (request == null) {
256 return null;
257 }
258
259 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
260 WebKeys.THEME_DISPLAY);
261
262 try {
263 if (activitySet.getUserId() == themeDisplay.getDefaultUserId()) {
264 return null;
265 }
266 }
267 catch (Exception e) {
268 _log.error(e, e);
269 }
270
271 List<SocialActivityInterpreter> activityInterpreters =
272 _activityInterpreters.get(selector);
273
274 if (activityInterpreters == null) {
275 return null;
276 }
277
278 String className = PortalUtil.getClassName(
279 activitySet.getClassNameId());
280
281 for (int i = 0; i < activityInterpreters.size(); i++) {
282 SocialActivityInterpreterImpl activityInterpreter =
283 (SocialActivityInterpreterImpl)activityInterpreters.get(i);
284
285 if (activityInterpreter.hasClassName(className)) {
286 SocialActivityFeedEntry activityFeedEntry =
287 activityInterpreter.interpret(activitySet, serviceContext);
288
289 if (activityFeedEntry != null) {
290 activityFeedEntry.setPortletId(
291 activityInterpreter.getPortletId());
292
293 return activityFeedEntry;
294 }
295 }
296 }
297
298 return null;
299 }
300
301 @Override
302 public void updateActivitySet(long activityId) throws PortalException {
303 if (!PropsValues.SOCIAL_ACTIVITY_SETS_BUNDLING_ENABLED) {
304 socialActivitySetLocalService.addActivitySet(activityId);
305
306 return;
307 }
308
309 List<SocialActivityInterpreter> activityInterpreters =
310 _activityInterpreters.get(
311 PropsValues.SOCIAL_ACTIVITY_SETS_SELECTOR);
312
313 if (activityInterpreters != null) {
314 SocialActivity activity =
315 socialActivityPersistence.findByPrimaryKey(activityId);
316
317 String className = PortalUtil.getClassName(
318 activity.getClassNameId());
319
320 for (int i = 0; i < activityInterpreters.size(); i++) {
321 SocialActivityInterpreterImpl activityInterpreter =
322 (SocialActivityInterpreterImpl)activityInterpreters.get(i);
323
324 if (activityInterpreter.hasClassName(className)) {
325 activityInterpreter.updateActivitySet(activityId);
326
327 return;
328 }
329 }
330 }
331 }
332
333 private static Log _log = LogFactoryUtil.getLog(
334 SocialActivityInterpreterLocalServiceImpl.class);
335
336 private Map<String, List<SocialActivityInterpreter>> _activityInterpreters =
337 new HashMap<String, List<SocialActivityInterpreter>>();
338 private ServiceRegistrationMap<SocialActivityInterpreter>
339 _serviceRegistrations =
340 new ServiceRegistrationMap<SocialActivityInterpreter>();
341 private ServiceTracker<SocialActivityInterpreter, SocialActivityInterpreter>
342 _serviceTracker;
343
344 private class SocialActivityInterpreterServiceTrackerCustomizer
345 implements ServiceTrackerCustomizer
346 <SocialActivityInterpreter, SocialActivityInterpreter> {
347
348 @Override
349 public SocialActivityInterpreter addingService(
350 ServiceReference<SocialActivityInterpreter> serviceReference) {
351
352 Registry registry = RegistryUtil.getRegistry();
353
354 SocialActivityInterpreter activityInterpreter = registry.getService(
355 serviceReference);
356
357 String portletId = (String)serviceReference.getProperty(
358 "javax.portlet.name");
359
360 if (!(activityInterpreter instanceof
361 SocialRequestInterpreterImpl)) {
362
363 activityInterpreter = new SocialActivityInterpreterImpl(
364 portletId, activityInterpreter);
365 }
366
367 List<SocialActivityInterpreter> activityInterpreters =
368 _activityInterpreters.get(activityInterpreter.getSelector());
369
370 if (activityInterpreters == null) {
371 activityInterpreters =
372 new ArrayList<SocialActivityInterpreter>();
373 }
374
375 activityInterpreters.add(activityInterpreter);
376
377 _activityInterpreters.put(
378 activityInterpreter.getSelector(), activityInterpreters);
379
380 return activityInterpreter;
381 }
382
383 @Override
384 public void modifiedService(
385 ServiceReference<SocialActivityInterpreter> serviceReference,
386 SocialActivityInterpreter activityInterpreter) {
387 }
388
389 @Override
390 public void removedService(
391 ServiceReference<SocialActivityInterpreter> serviceReference,
392 SocialActivityInterpreter activityInterpreter) {
393
394 Registry registry = RegistryUtil.getRegistry();
395
396 registry.ungetService(serviceReference);
397
398 List<SocialActivityInterpreter> activityInterpreters =
399 _activityInterpreters.get(activityInterpreter.getSelector());
400
401 if (activityInterpreters == null) {
402 return;
403 }
404
405 activityInterpreters.remove(activityInterpreter);
406 }
407
408 }
409
410 }