/** *
 * 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); } }