⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspresencesofjid.java

📁 一款即时通讯软件
💻 JAVA
字号:
package edu.ou.kmi.buddyspace.core;

/*
 * BSPresencesOfJID.java
 *
 * Project: BuddySpace
 * (C) Copyright Knowledge Media Institute 2002
 *
 *
 * Created on 18 July 2002, 15:32
 */

import java.util.*;
import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.util.*;
//import org.jabber.jabberbeans.Extension.*;

/**
 * <code>BSPresencesOfJID</code> contains presence information
 * about all resources the given <code>JID</code> is logged from.
 * It includes list <code>BSPresenceInfo</code> records.
 *
 * @author  Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
 */
public class BSPresencesOfJID {
    protected Hashtable presences = null;
    protected JID jid = null;
    
    /**
     * Constructs <code>BSPresencesOfJID</code> from <code>Presence</code>
     * packet.
     */
    public BSPresencesOfJID(Presence p) {
        presences = new Hashtable();
        
        if (p == null) return;
        
        JID jid = p.getFromAddress();
        if (jid == null) return;
        
        this.jid = jid.getSimpleJID();
        
        setPresence(p);
    }
    
    /**
     * Constructs <code>BSPresencesOfJID</code>.
     */
    public BSPresencesOfJID(BSPresenceInfo pi) {
        presences = new Hashtable();
        
        JID jid;
        if (pi == null || (jid = pi.getJID()) == null) return;
        
        this.jid = jid.getSimpleJID();
        
        setPresence(pi);
    }

    /**
     * Changes presence of <code>JID</code> according to given <code>Presence</code>
     * packet.
     */
    public void changePresence(Presence p) {
        if (p == null) return;
        
        JID jid = p.getFromAddress();
        if (jid == null || 
            !this.jid.equals(jid.getSimpleJID())) return;
        
        setPresence(p);
    }
    
    /**
     * Changes presence of <code>JID</code> according to given <code>Presence</code>
     * packet.
     */
    public void changePresence(BSPresenceInfo pi) {
        if (pi == null || jid == null || pi.getJID() == null ||
            !jid.equals(pi.getJID().getSimpleJID())) return;
        
        setPresence(pi);
    }
    
    /**
     * Sets presence according to given <code>Presence</code> packet.
     * This is internal function and doesn't test JID,...
     */
    protected void setPresence(Presence p) {
        JID jidTmp = p.getFromAddress();
        String type = p.getType();
        
        String resource = jidTmp.getResource();
        if (resource == null) 
            resource = new String("no resource");
        
        if (type != null && type.equals("unavailable")) {
            presences.remove(resource);
        }
        else {
            BSPresenceInfo pi = new BSPresenceInfo(p);
            presences.put(resource, pi);
        }
    }
    
    /**
     * Sets presence.
     * This is internal function and doesn't test JID,...
     */
    protected void setPresence(BSPresenceInfo pi) {
        
        JID jid;
        if (pi == null || (jid = pi.getJID()) == null) return;
        
        String resource = jid.getResource();
        if (resource == null) 
            resource = new String("no resource");
        
        if (!pi.isOnline()) {
            presences.remove(resource);
        }
        else {
            presences.put(resource, pi);
        }
    }
    
    /**
     * Returns true if the <code>JID</code> is available at least from one
     * resource. It means if the hashtable is not empty.
     */
    public boolean isAvailable() {
        return !presences.isEmpty();
    }
    
    /**
     * Returns the "most online" <code>BSPresenceInfo</code>.
     */
    public BSPresenceInfo getBestPresence() {
        
        if (presences.isEmpty())
            return null;
        
        Enumeration e = presences.elements();
        BSPresenceInfo pi = null;
        
        int bestPresence = 0;
        while (e != null && e.hasMoreElements()) {
            BSPresenceInfo curPi = (BSPresenceInfo) e.nextElement();
            int curPresence;
            if (BSPresenceInfo.SHOW_XA.equals(curPi.getShow()))
                curPresence = 1;
            else if (BSPresenceInfo.SHOW_AWAY.equals(curPi.getShow()))
                curPresence = 2;
            else if (BSPresenceInfo.SHOW_DND.equals(curPi.getShow()))
                curPresence = 3;
            else if (BSPresenceInfo.SHOW_CHAT.equals(curPi.getShow()))
                curPresence = 5;
            else
                curPresence = 4;
            
            if (curPresence > bestPresence) {
                pi = curPi;
                bestPresence = curPresence;
            }
        }
        
        return pi;
    }
    
    /**
     * Compares the given presences and returns the one "more online".
     */
    public static BSPresenceInfo getBetterPresence(BSPresenceInfo p1, BSPresenceInfo p2) {
        
        if (p1 == null || !p1.isOnline()) return p2;
        if (p2 == null || !p2.isOnline()) return p1;
        
        int p1Pr, p2Pr;
        
        if (BSPresenceInfo.SHOW_XA.equals(p1.getShow())) p1Pr = 1;
        else if (BSPresenceInfo.SHOW_AWAY.equals(p1.getShow())) p1Pr = 2;
        else if (BSPresenceInfo.SHOW_DND.equals(p1.getShow())) p1Pr = 3;
        else if (BSPresenceInfo.SHOW_CHAT.equals(p1.getShow())) p1Pr = 5;
        else p1Pr = 4;
        
        if (BSPresenceInfo.SHOW_XA.equals(p2.getShow())) p2Pr = 1;
        else if (BSPresenceInfo.SHOW_AWAY.equals(p2.getShow())) p2Pr = 2;
        else if (BSPresenceInfo.SHOW_DND.equals(p2.getShow())) p2Pr = 3;
        else if (BSPresenceInfo.SHOW_CHAT.equals(p2.getShow())) p2Pr = 5;
        else p2Pr = 4;
        
        if (p1Pr > p2Pr) return p1;
        else return p2;
    }
    
    /**
     * Returns <code>BSPresenceInfo</code> of JID. If the JID has resource,
     * returns presence for the resource. Otherwise returns the best presence.
     */
    public BSPresenceInfo getJIDPresence(JID jid) {
        if (jid == null || 
            !this.jid.equals(jid.getSimpleJID()) ||
            presences.isEmpty())
            return null;
        
        String resource = jid.getResource();
        if (resource == null || resource.equals(""))
            return getBestPresence();
        
        BSPresenceInfo result = (BSPresenceInfo) presences.get(resource);
        return result;
    }
    
    /**
     * Returns <code>Enumeration</code> of all <code>BSPresenceInfo</code>s
     * which are available. If the JID is not available, returns null.
     */
    public Enumeration getAllPresences() {
        return presences.elements();
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -