001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.social;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.social.SocialActivityManager;
019    import com.liferay.portal.model.ClassedModel;
020    import com.liferay.portal.model.GroupedModel;
021    import com.liferay.registry.ServiceReference;
022    import com.liferay.registry.collections.ServiceReferenceMapper;
023    import com.liferay.registry.collections.ServiceTrackerCollections;
024    import com.liferay.registry.collections.ServiceTrackerMap;
025    
026    import java.util.Date;
027    
028    /**
029     * @author Adolfo P??rez
030     */
031    public class SocialActivityManagerImpl<T extends ClassedModel & GroupedModel>
032            implements SocialActivityManager<T> {
033    
034            public SocialActivityManagerImpl(
035                    SocialActivityManager<T> defaultSocialActivityManager) {
036    
037                    _defaultSocialActivityManager = defaultSocialActivityManager;
038            }
039    
040            @Override
041            public void addActivity(
042                            long userId, T model, int type, String extraData,
043                            long receiverUserId)
044                    throws PortalException {
045    
046                    SocialActivityManager<T> socialActivityManager =
047                            getSocialActivityManager(model.getModelClassName());
048    
049                    socialActivityManager.addActivity(
050                            userId, model, type, extraData, receiverUserId);
051            }
052    
053            @Override
054            public void addUniqueActivity(
055                            long userId, Date createDate, T model, int type, String extraData,
056                            long receiverUserId)
057                    throws PortalException {
058    
059                    SocialActivityManager<T> socialActivityManager =
060                            getSocialActivityManager(model.getModelClassName());
061    
062                    socialActivityManager.addUniqueActivity(
063                            userId, createDate, model, type, extraData, receiverUserId);
064            }
065    
066            @Override
067            public void addUniqueActivity(
068                            long userId, T model, int type, String extraData,
069                            long receiverUserId)
070                    throws PortalException {
071    
072                    SocialActivityManager<T> socialActivityManager =
073                            getSocialActivityManager(model.getModelClassName());
074    
075                    socialActivityManager.addUniqueActivity(
076                            userId, model, type, extraData, receiverUserId);
077            }
078    
079            @Override
080            public void deleteActivities(T model) throws PortalException {
081                    SocialActivityManager<T> socialActivityManager =
082                            getSocialActivityManager(model.getModelClassName());
083    
084                    socialActivityManager.deleteActivities(model);
085            }
086    
087            @Override
088            public void updateLastSocialActivity(
089                            long userId, T model, int type, Date createDate)
090                    throws PortalException {
091    
092                    SocialActivityManager<T> socialActivityManager =
093                            getSocialActivityManager(model.getModelClassName());
094    
095                    socialActivityManager.updateLastSocialActivity(
096                            userId, model, type, createDate);
097            }
098    
099            protected SocialActivityManager<T> getSocialActivityManager(
100                    String className) {
101    
102                    SocialActivityManager<T> socialActivityManager =
103                            _serviceTrackerMap.getService(className);
104    
105                    if (socialActivityManager != null) {
106                            return socialActivityManager;
107                    }
108    
109                    return _defaultSocialActivityManager;
110            }
111    
112            private final SocialActivityManager<T> _defaultSocialActivityManager;
113    
114            private final ServiceTrackerMap<String, SocialActivityManager<T>>
115                    _serviceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
116                            (Class<SocialActivityManager<T>>)(Class<?>)
117                                    SocialActivityManager.class,
118                            "(model.class.name=*)",
119                            new ServiceReferenceMapper<String, SocialActivityManager<T>>() {
120    
121                                    @Override
122                                    public void map(
123                                            ServiceReference<SocialActivityManager<T>> serviceReference,
124                                            Emitter<String> emitter) {
125    
126                                            String modelClassName =
127                                                    (String)serviceReference.getProperty(
128                                                            "model.class.name");
129    
130                                            emitter.emit(modelClassName);
131                                    }
132    
133                            });
134    
135    }