/**
* 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.chat.util;
import com.liferay.chat.configuration.ChatGroupServiceConfiguration;
import com.liferay.chat.jabber.JabberUtil;
import com.liferay.chat.service.StatusLocalServiceUtil;
import com.liferay.chat.util.comparator.BuddyComparator;
import com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Modified;
/**
* @author Ankit Srivastava
* @author Tibor Lipusz
* @author Peter Fellwock
*/
@Component(
configurationPid = "com.liferay.chat.configuration.ChatConfiguration",
configurationPolicy = ConfigurationPolicy.OPTIONAL, enabled = false,
immediate = true, service = BuddyFinder.class
)
public class DefaultBuddyFinderImpl implements BuddyFinder {
@Override
public List<Object[]> getBuddies(long companyId, long userId) {
long modifiedDate =
System.currentTimeMillis() - ChatConstants.ONLINE_DELTA;
List<Object[]> buddies = null;
String buddyListStrategy =
_chatGroupServiceConfiguration.buddyListStrategy();
if (buddyListStrategy.equals("all")) {
buddies = StatusLocalServiceUtil.getAllStatuses(
companyId, userId, modifiedDate, 0,
_chatGroupServiceConfiguration.buddyListMaxBuddies());
}
else if (buddyListStrategy.equals("communities") ||
buddyListStrategy.equals("sites")) {
buddies = StatusLocalServiceUtil.getGroupStatuses(
userId, modifiedDate,
_chatGroupServiceConfiguration.buddyListSiteExcludes(), 0,
_chatGroupServiceConfiguration.buddyListMaxBuddies());
}
else if (buddyListStrategy.equals("friends") ||
buddyListStrategy.equals("social")) {
buddies = StatusLocalServiceUtil.getSocialStatuses(
userId,
_chatGroupServiceConfiguration.
buddyListAllowedSocialRelationTypes(),
modifiedDate, 0,
_chatGroupServiceConfiguration.buddyListMaxBuddies());
}
else if (buddyListStrategy.equals("communities,friends") ||
buddyListStrategy.equals("sites,social") ||
buddyListStrategy.equals("friends,sites")) {
List<Object[]> groupBuddies =
StatusLocalServiceUtil.getGroupStatuses(
userId, modifiedDate,
_chatGroupServiceConfiguration.buddyListSiteExcludes(), 0,
_chatGroupServiceConfiguration.buddyListMaxBuddies());
List<Object[]> socialBuddies =
StatusLocalServiceUtil.getSocialStatuses(
userId,
_chatGroupServiceConfiguration.
buddyListAllowedSocialRelationTypes(),
modifiedDate, 0,
_chatGroupServiceConfiguration.buddyListMaxBuddies());
buddies = new ArrayList<>(
groupBuddies.size() + socialBuddies.size());
buddies.addAll(groupBuddies);
BuddyComparator buddyComparator = new BuddyComparator(true);
for (Object[] socialBuddy : socialBuddies) {
if (Collections.binarySearch(
groupBuddies, socialBuddy, buddyComparator) < 0) {
buddies.add(socialBuddy);
}
}
Collections.sort(buddies, buddyComparator);
}
else {
buddies = new ArrayList<>();
}
buddies = JabberUtil.getStatuses(companyId, userId, buddies);
return buddies;
}
@Activate
@Modified
protected void activate(Map<String, Object> properties) {
_chatGroupServiceConfiguration = ConfigurableUtil.createConfigurable(
ChatGroupServiceConfiguration.class, properties);
}
private ChatGroupServiceConfiguration _chatGroupServiceConfiguration;
}