/* * Copyright 2006-2010 Daniel Henninger. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package net.sf.kraken.protocols.sametime; import java.lang.ref.WeakReference; import java.util.Vector; import net.sf.kraken.type.TransportLoginStatus; import org.apache.log4j.Logger; import org.xmpp.packet.JID; import com.lotus.sametime.awareness.AwarenessServiceEvent; import com.lotus.sametime.awareness.AwarenessServiceListener; import com.lotus.sametime.awareness.StatusEvent; import com.lotus.sametime.awareness.StatusListener; import com.lotus.sametime.buddylist.BLEvent; import com.lotus.sametime.buddylist.BLServiceListener; import com.lotus.sametime.community.LoginEvent; import com.lotus.sametime.community.LoginListener; import com.lotus.sametime.im.Im; import com.lotus.sametime.im.ImEvent; import com.lotus.sametime.im.ImListener; import com.lotus.sametime.im.ImServiceListener; /** * @author Daniel Henninger */ public class SameTimeListener implements LoginListener, ImServiceListener, ImListener, BLServiceListener, AwarenessServiceListener, StatusListener { static Logger Log = Logger.getLogger(SameTimeListener.class); private Vector<Im> imOpened = new Vector<Im>(); SameTimeListener(SameTimeSession session) { this.sameTimeSessionRef = new WeakReference<SameTimeSession>(session); } WeakReference<SameTimeSession> sameTimeSessionRef; public SameTimeSession getSession() { return sameTimeSessionRef.get(); } public Im getIMSession(JID jid) { Im currentIm = null; for (int i = 0; i < imOpened.size(); i++) { currentIm = imOpened.elementAt(i); if (getSession().getTransport().convertIDToJID(currentIm.getPartner().getName()).equals(jid)) { return currentIm; } } return null; } public void loggedIn(LoginEvent loginEvent) { Log.debug("SameTime: Successful login: "+loginEvent); getSession().setLoginStatus(TransportLoginStatus.LOGGED_IN); } public void loggedOut(LoginEvent loginEvent) { Log.debug("SameTime: Logged out: "+loginEvent); } public void imReceived(ImEvent imEvent) { Log.debug("SameTime: Received IM: "+imEvent); Im im = imEvent.getIm(); boolean imExists = false; Im currentIm = null; for (int i = 0; i < imOpened.size(); i++) { currentIm = imOpened.elementAt(i); if(currentIm.equals(im)) { imExists = true; im = currentIm; break; } } if (!imExists) { imOpened.addElement(im); im.addImListener(this); } } public void blRetrieveFailed(BLEvent blEvent) { Log.error("SameTime: Failed to retrieve buddy list: "+blEvent); } public void blRetrieveSucceeded(BLEvent blEvent) { Log.debug("SameTime: Got buddy list success event: "+blEvent); } public void blSetFailed(BLEvent blEvent) { Log.error("SameTime: Failed to set buddy list: "+blEvent); } public void blSetSucceeded(BLEvent blEvent) { Log.debug("SameTime: Buddy list set succeeded: "+blEvent); } public void blUpdated(BLEvent blEvent) { Log.debug("SameTime: Buddy list update succeeded: "+blEvent); } public void serviceAvailable(BLEvent blEvent) { // Buddy list service is available, ignore } public void serviceUnavailable(BLEvent blEvent) { // Buddy list service is unavailable, ignore } public void serviceAvailable(AwarenessServiceEvent awarenessServiceEvent) { // Awareness service is available, ignore } public void serviceUnavailable(AwarenessServiceEvent awarenessServiceEvent) { // Awareness service is unavailable, ignore } public void groupCleared(StatusEvent statusEvent) { Log.debug("SameTime: Status group cleared: "+statusEvent); } public void userStatusChanged(StatusEvent statusEvent) { Log.debug("SameTime: User statis has changed: "+statusEvent); } public void dataReceived(ImEvent imEvent) { Log.debug("SameTime: Data Received data type = " + imEvent.getDataType()); } public void imClosed(ImEvent imEvent) { Log.debug("SameTime: Closed IM session: "+imEvent); Im im = imEvent.getIm(); Im currentIm = null; for (int i = 0; i < imOpened.size(); i++) { currentIm = imOpened.elementAt(i); if (currentIm.equals(im)) { imOpened.removeElement(im); im.close(0); im.removeImListener(this); break; } } } public void imOpened(ImEvent imEvent) { // We are not doing anything when an IM session is opened Log.debug("SameTime: Opened IM session: "+imEvent); } public void openImFailed(ImEvent imEvent) { Log.error("SameTime: Failed to open IM session: "+imEvent); } public void textReceived(ImEvent imEvent) { Log.debug("SameTime: Received IM text: "+imEvent); getSession().getTransport().sendMessage( getSession().getJID(), getSession().getTransport().convertIDToJID(imEvent.getIm().getPartner().getName()), imEvent.getText() ); } }