/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.social;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.ClassedModel;
import com.liferay.portal.kernel.model.GroupedModel;
import com.liferay.portal.kernel.social.SocialActivityManager;
import com.liferay.registry.ServiceReference;
import com.liferay.registry.collections.ServiceReferenceMapper;
import com.liferay.registry.collections.ServiceTrackerCollections;
import com.liferay.registry.collections.ServiceTrackerMap;
import java.util.Date;
/**
* @author Adolfo PĂ©rez
*/
public class SocialActivityManagerImpl<T extends ClassedModel & GroupedModel>
implements SocialActivityManager<T> {
public SocialActivityManagerImpl(
SocialActivityManager<T> defaultSocialActivityManager) {
_defaultSocialActivityManager = defaultSocialActivityManager;
}
@Override
public void addActivity(
long userId, T model, int type, String extraData,
long receiverUserId)
throws PortalException {
SocialActivityManager<T> socialActivityManager =
getSocialActivityManager(model.getModelClassName());
socialActivityManager.addActivity(
userId, model, type, extraData, receiverUserId);
}
@Override
public void addUniqueActivity(
long userId, Date createDate, T model, int type, String extraData,
long receiverUserId)
throws PortalException {
SocialActivityManager<T> socialActivityManager =
getSocialActivityManager(model.getModelClassName());
socialActivityManager.addUniqueActivity(
userId, createDate, model, type, extraData, receiverUserId);
}
@Override
public void addUniqueActivity(
long userId, T model, int type, String extraData,
long receiverUserId)
throws PortalException {
SocialActivityManager<T> socialActivityManager =
getSocialActivityManager(model.getModelClassName());
socialActivityManager.addUniqueActivity(
userId, model, type, extraData, receiverUserId);
}
@Override
public void deleteActivities(T model) throws PortalException {
SocialActivityManager<T> socialActivityManager =
getSocialActivityManager(model.getModelClassName());
socialActivityManager.deleteActivities(model);
}
@Override
public void updateLastSocialActivity(
long userId, T model, int type, Date createDate)
throws PortalException {
SocialActivityManager<T> socialActivityManager =
getSocialActivityManager(model.getModelClassName());
socialActivityManager.updateLastSocialActivity(
userId, model, type, createDate);
}
protected SocialActivityManager<T> getSocialActivityManager(
String className) {
SocialActivityManager<T> socialActivityManager =
_serviceTrackerMap.getService(className);
if (socialActivityManager != null) {
return socialActivityManager;
}
return _defaultSocialActivityManager;
}
private final SocialActivityManager<T> _defaultSocialActivityManager;
private final ServiceTrackerMap<String, SocialActivityManager<T>>
_serviceTrackerMap = ServiceTrackerCollections.openSingleValueMap(
(Class<SocialActivityManager<T>>)(Class<?>)
SocialActivityManager.class,
"(model.class.name=*)",
new ServiceReferenceMapper<String, SocialActivityManager<T>>() {
@Override
public void map(
ServiceReference<SocialActivityManager<T>> serviceReference,
Emitter<String> emitter) {
String modelClassName =
(String)serviceReference.getProperty(
"model.class.name");
emitter.emit(modelClassName);
}
});
}