package org.jivesoftware.openfire.plugin.rest.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.plugin.rest.entity.UserEntity;
import org.jivesoftware.openfire.plugin.rest.entity.UserProperty;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserAlreadyExistsException;
import org.jivesoftware.openfire.group.Group;
import org.jivesoftware.openfire.group.GroupManager;
import org.jivesoftware.openfire.group.GroupJID;
import org.jivesoftware.openfire.group.GroupNotFoundException;
import org.xmpp.packet.JID;
/**
* The Class UserUtils.
*/
public class UserUtils {
/**
* Instantiates a new user utils.
*/
private UserUtils() {
throw new AssertionError();
}
/**
* Convert users to user entities.
*
* @param users the users
* @param userSearch the user search
* @return the list
*/
public static List<UserEntity> convertUsersToUserEntities(Collection<User> users, String userSearch) {
List<UserEntity> result = new ArrayList<UserEntity>();
for (User user : users) {
if (userSearch != null) {
if (!user.getUsername().contains(userSearch)) {
continue;
}
}
result.add(convertUserToUserEntity(user));
}
return result;
}
/**
* Convert user to user entity.
*
* @param user
* the user
* @return the user entity
*/
public static UserEntity convertUserToUserEntity(User user) {
UserEntity userEntity = new UserEntity(user.getUsername(), user.getName(), user.getEmail());
List<UserProperty> userProperties = new ArrayList<UserProperty>();
for (Entry<String, String> property : user.getProperties().entrySet()) {
userProperties.add(new UserProperty(property.getKey(), property.getValue()));
}
userEntity.setProperties(userProperties);
return userEntity;
}
/**
* Checks if is valid sub type.
*
* @param subType the sub type
* @return true, if is valid sub type
* @throws UserAlreadyExistsException the user already exists exception
*/
public static void checkSubType(int subType) throws UserAlreadyExistsException {
if (!(subType >= -1 && subType <= 3)) {
throw new UserAlreadyExistsException();
}
}
/**
* Check and get jid.
*
* @param jid the jid
* @return the jid
*/
public static JID checkAndGetJID(String jid) {
if(isValidBareJid(jid)) {
return new JID(jid);
} else if (isValidGroupName(jid)) {
GroupJID gjid = new GroupJID(jid);
return gjid.asBareJID();
} else {
return XMPPServer.getInstance().createJID(jid, null);
}
}
/**
* Checks if is valid bare jid.
*
* @param jid the jid
* @return true, if is valid bare jid
*/
public static boolean isValidBareJid(String jid) {
final int index = jid.indexOf('@');
if (index == -1) {
return false;
} else if (jid.indexOf('@', index + 1) != -1) {
return false;
}
return true;
}
/**
* Checks if this group exists.
*
* @param groupname The groupname as a string
* @return true, if the groupname exists
*/
public static boolean isValidGroupName(String groupname) {
try {
Group g = GroupManager.getInstance().getGroup(groupname);
} catch(GroupNotFoundException e) {
return false;
}
return true;
}
}