/**
*
* OLAT - Online Learning and Training
* http://www.olat.org
*
* This software is protected by the OLAT software license.
* Use is subject to license terms.
* See LICENSE.TXT in this distribution for details.
*
* Copyright (c) 2003 OLAT Zentrum, University of Zurich, Switzerland.
* All rights reserved.
*
* Description:
* TODO: Class Description for SmackInstantMessagingImpl
*
*
* @version $Revision: 1.20 $
* Initial Date: 18.01.2005
* Last modified: $Date: 2005/02/02 14:40:03 $
*
* @author guido
*/
package org.olat.instantMessaging;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.jivesoftware.smack.packet.Presence;
import org.olat.basesecurity.Manager;
import org.olat.basesecurity.ManagerFactory;
import org.olat.basesecurity.SecurityGroup;
import org.olat.group.BusinessGroup;
import org.olat.gui.UserRequest;
import org.olat.gui.control.Controller;
import org.olat.gui.control.WindowControl;
import org.olat.instantMessaging.ui.ConferenceRoomController;
import org.olat.instantMessaging.ui.FlashClientController;
import org.olat.instantMessaging.ui.InstantMessagingClientController;
import org.olat.resource.OresHelper;
import org.olat.util.Util;
/**
*
*/
public class SmackInstantMessagingImpl implements InstantMessaging {
private final String PROVIDER_CHATROOMS="CHATROOM";
private final SynchronizeBuddygroupsOverHTTP buddyListSync = new SynchronizeBuddygroupsOverHTTP();
private static final Logger log = Util.getLogger(SmackInstantMessagingImpl.class);
/**
* for clarity since needed for dynamic class loading
*/
public SmackInstantMessagingImpl() {
super();
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#initAtStartup(org.olat.instantMessaging.InfoHandler)
*/
public void initAtStartup(InfoHandler infohandler) {
//buddyListSync.addUsersToSharedGroup();
}
/**
* @see org.olat.instantMessaging.InstantMessaging#syncAtStartup(java.util.List)
*/
public void syncAtStartup(List groups) {
// TODO Auto-generated method stub
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#createClientController(org.olat.gui.UserRequest,
* org.olat.gui.control.WindowControl)
*/
public Controller createClientController(UserRequest ureq,
WindowControl wControl) {
return new InstantMessagingClientController(ureq);
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#createChatRoomLinkController(boolean,
* java.lang.String, java.lang.String, org.olat.gui.UserRequest,
* org.olat.gui.control.WindowControl)
*/
public Controller createChatRoomLinkController(boolean passwordProtected,
String resourceId, String chatRoomName, UserRequest ureq,
WindowControl wControl) {
if(passwordProtected){
//TODO:gs save password in database for later usage
//Authentication auth = ManagerFactory.getManager()
//.findAuthentication(identity, PROVIDER_CHATROOMS);
// String pw = RandomStringUtils.randomAlphanumeric(6);
// ConferenceRoomManager.getInstance().createChatRoom(resourceId, chatRoomName, pw);
}else{
//ConferenceRoomManager.getInstance().createChatRoom(resourceId, chatRoomName);
}
return new ConferenceRoomController(ureq, resourceId, chatRoomName);
}
/**
* @see org.olat.instantMessaging.InstantMessaging#createFlashClientController(org.olat.gui.UserRequest,
* org.olat.gui.control.WindowControl, String, String)
*/
public Controller createFlashClientController(UserRequest ureq,
WindowControl wControl, String chatPartner, String chatRoom) {
String username = ureq.getIdentity().getName();
return new FlashClientController(ureq, username, ClientManager
.getInstance().getInstantMessagingClient(username)
.getPassword(), chatPartner, chatRoom);
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#addUserToFriendsRoster(org.olat.instantMessaging.SharedRosterGroup,
* java.lang.String)
*/
public void addUserToFriendsRoster(SharedRosterGroup group, String username) {
//buddyListSync.createSharedGroup();
//buddyListSync.addUserToSharedGroup(group.getId(),username);
}
/**
*
*
* @param groupOwner username of the user creating or adding new users
* @param groupId
* @param groupname
* @param username
* @see org.olat.instantMessaging.InstantMessaging#addUserToFriendsRoster(java.lang.String,
* java.lang.String)
*/
public void addUserToFriendsRoster(String groupOwner, String groupId, String groupname, String username) {
//we do not check wether a group already exists, we create it each time
buddyListSync.createSharedGroup(groupId, groupname, new String[]{groupOwner});
buddyListSync.addUserToSharedGroup(groupId,username);
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#removeUserFromFriendsRoster(java.lang.String,
* java.lang.String)
*/
public void removeUserFromFriendsRoster(String groupId, String username) {
buddyListSync.removeUserFromSharedGroup(groupId, username);
}
/**
* @see org.olat.instantMessaging.InstantMessaging#deleteRosterGroup(java.lang.String)
*/
public void deleteRosterGroup(String groupId) {
buddyListSync.deleteSharedGroup(groupId);
}
/**
*
*
* @see org.olat.instantMessaging.InstantMessaging#sendStatus(java.lang.String,
* java.lang.String)
*/
public void sendStatus(String username, String message) {
ClientManager.getInstance().getInstantMessagingClient(username)
.sendPresence(Presence.Type.AVAILABLE, message, 1,
Presence.Mode.AVAILABLE);
}
/**
* @see org.olat.instantMessaging.InstantMessaging#joinRoom(java.lang.String,
* java.lang.String, java.lang.String)
*/
public void joinRoom(String username, String roomName, String password) {
//TODO:gs make password protected rooms possible
ClientManager.getInstance().getInstantMessagingClient(username)
.sendConferenceParamsToFlashClient(roomName);
}
/**
*
* @see org.olat.instantMessaging.InstantMessaging#startChat(java.lang.String,
* java.lang.String)
*/
public void startChat(String username, String chatPartnerJid) {
InstantMessagingClient imClient = ClientManager.getInstance()
.getInstantMessagingClient(username);
if (imClient.getFlashClientIsRunning())
imClient.sendChatParamsToFlashClient(chatPartnerJid, imClient
.getMessage().getBody());
}
/**
* @see org.olat.instantMessaging.InstantMessaging#isFlashClientRunning(java.lang.String)
*/
public boolean isFlashClientRunning(String username) {
return ClientManager.getInstance().getInstantMessagingClient(username)
.getFlashClientIsRunning();
}
/**
* @see org.olat.instantMessaging.InstantMessaging#getIMPassword(java.lang.String)
*/
public String getIMPassword(String username) {
return ClientManager.getInstance().getInstantMessagingClient(username).getPassword();
}
/**
* @see org.olat.instantMessaging.InstantMessaging#getClients()
*/
public Map getClients() {
return ClientManager.getInstance().getClients();
}
/**
* @see org.olat.instantMessaging.InstantMessaging#enableChat(java.lang.String)
*/
public void enableChat(String username) {
ClientManager.getInstance()
.getInstantMessagingClient(username).enableCollaboration();
}
/**
* @param username
* @param reason A resason why the chat is disabled like "Doing test"
* @see org.olat.instantMessaging.InstantMessaging#disableChat(java.lang.String, java.lang.String)
*/
public void disableChat(String username, String reason) {
ClientManager.getInstance()
.getInstantMessagingClient(username).disableCollaboration(reason);
}
/**
* @see org.olat.instantMessaging.InstantMessaging#countConnectedUsers()
*/
public int countConnectedUsers() {
// -1 because we do not count the watching user
int connectedUsers = ClientManager.getInstance().countConnectedUsers()-1;
if(connectedUsers == -1)
connectedUsers = 0;
return connectedUsers;
}
/**
* @see org.olat.instantMessaging.InstantMessaging#synchonizeBuddyRoster(org.olat.group.BusinessGroup)
*/
public void synchonizeBuddyRoster(BusinessGroup group) {
if (log.isDebugEnabled()) {
log.debug("synchronizing group::" + group.toString());
}
Manager securityManager = ManagerFactory.getManager();
SecurityGroup owners = group.getOwnerGroup();
SecurityGroup participants = group.getPartipiciantGroup();
List users = securityManager.getIdentitiesOfSecurityGroup(owners);
users.addAll(securityManager.getIdentitiesOfSecurityGroup(participants));
OresHelper.createStringRepresenting(group);
}
}