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

📄 bsrosterbean.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        
        try {
            rosterBean.addRosterItem(rib.build());
            return true;
        } catch (InstantiationException e) {
            return false;
        }
    }
    
    /**
     * Returns true if there is a contact in roster with given JID.
     */
    public boolean isJIDInRoster(JID jid) {
        String str = getRosterItemHashString(jid, "", false);
        RosterItem old = (RosterItem) curRoster.get(str);
        return old != null;
    }
    
    /**
     * Returns true if there is subscription to presence of given JID.
     */
    public boolean isSubscriptionToJID(JID jid) {
        String str = getRosterItemHashString(jid, "", false);
        RosterItem old = (RosterItem) curRoster.get(str);
        if (old == null) return false;
        String subscr = old.getSubscriptionType();
        return (subscr != null && (subscr.equals("to") || subscr.equals("both")));
    }
    
    /**
     * Returns <code>Iterator</code> over all groups in roster.
     */
    public Iterator getGroups() {
        Enumeration contacts = curRoster.elements();
        //Hashtable groups = new Hashtable();
        TreeSet groups = new TreeSet();
        while (contacts.hasMoreElements()) {
            RosterItem ri = (RosterItem) contacts.nextElement();
            Enumeration itemGroups = ri.enumerateGroups();
            // for all groups of roster element
            while (itemGroups != null && itemGroups.hasMoreElements()) {
                String gr = (String) itemGroups.nextElement();
                groups.add(gr);
            }
        }
        return groups.iterator();
    }
    
    /**
     * Returns <code>Enumeration</code> over all JIDs in given group.
     */
    public Enumeration getJIDsInGroup(String groupName) {
        Vector groupJids = new Vector();
        
        Enumeration contacts = curRoster.elements();
        while (contacts.hasMoreElements()) {
            RosterItem ri = (RosterItem) contacts.nextElement();
            Enumeration itemGroups = ri.enumerateGroups();
            
            // for all groups of roster element
            while (itemGroups != null && itemGroups.hasMoreElements()) {
                String gr = (String) itemGroups.nextElement();
                
                if (((groupName == null || groupName.equals("")) && gr == null)
                    || (groupName != null && groupName.equals(gr))) {
                    JID j = ri.getJID();
                    
                    if (!groupJids.contains(j))
                        groupJids.add(j);
                }
            }
        }
        
        return groupJids.elements();
    }

    // *** help functions ***
    
    /**
     * Returns string used as a key in roster hashtable.
     */
    public String getRosterItemHashString(JID jid, String group, boolean useGroup) {
        if (jid == null)
            return (group != null)? group : "";
        
        /*String res = new String((useGroup? group + "/" : "")
                                + jid.getUsername() + "@" + jid.getServer());*/
        String res = new String((useGroup? group + "/" : "")
                                + jid.getSimpleJID().normalize());
        return res;
    }

    // *** roster events ***
    
    /**
     * The changedRoster event is fired when there has been a change to the
     * roster state.
     */
    public void changedRoster(Roster roster) {
        BSCore.logEvent(name, "changed roster");
        Enumeration items = roster.items();
        // for all items
        while (items != null && items.hasMoreElements()) {
            RosterItem i = (RosterItem) items.nextElement();
            // if removed
            if ("remove".equals(i.getSubscriptionType())) {
                // removes the item from roster
                curRoster.remove(getRosterItemHashString(i.getJID(), "", false));
            }
            // else added or changed
            else {
                RosterItem old = (RosterItem) curRoster.put(getRosterItemHashString(i.getJID(), "", false), i);
            }
        }
        
        fireChangedRoster(roster);
    }
    

    /**
     * The replacedRoster event is fired when a completely new roster has
     * replaced the existing one.
     */
    public void replacedRoster(Roster roster) {
        BSCore.logEvent(name, "replaced roster");
        curRoster.clear();
        Enumeration items = roster.items();
        // for all items
        while (items != null && items.hasMoreElements()) {
            RosterItem i = (RosterItem) items.nextElement();
            //curRoster.put(i.getJID(), i);
            curRoster.put(getRosterItemHashString(i.getJID(), "", false), i);
        }
        fireReplacedRoster(roster);
        //showRoster();
    }
    
    /**
     * Returns friendly name of the <code>JID</code> according to appropriate
     * <code>RosterItem</code>.
     */
    public String getFriendlyName(JID jid) {
        if (jid == null) return null;
        
        String str = getRosterItemHashString(jid, "", false);
        RosterItem item = (RosterItem) curRoster.get(str);
        
        if (item == null) return null;
        
        return item.getFriendlyName();
    }
    
    // *** roster listeners ***
    
    /**
     * Adds <code>RosterListener</code> from listeners notified when
     * roster changes.
     *
     * @see #removeRosterListener
     * @see #removeAllRosterListeners
     * @see #fireChangedRoster
     * @see #fireReplacedRoster
     */
    public void addRosterListener(RosterListener listener) {
        //assert listener != null : listener;
        if (listener == null) return;
        if (!rosterListeners.contains(listener)) {
            rosterListeners.addElement(listener);
        }
    }

    /**
     * Removes <code>RosterListener</code> from listeners notified when
     * roster changes.
     *
     * @see #addRosterListener
     * @see #removeAllRosterListeners
     * @see #fireChangedRoster
     * @see #fireReplacedRoster
     */
    public void removeRosterListener(RosterListener listener) {
        //assert listener != null : listener;
        if (listener == null) return;
        rosterListeners.removeElement(listener);
    }

    /**
     * Removes all listeners notified when roster changes.
     * This can be used before to free dependencies and allow dispose of
     * all objects.
     *
     * @see #addRosterListener
     * @see #removeRosterListener
     * @see #fireChangedRoster
     * @see #fireReplacedRoster
     */
    public void removeAllRosterListeners() {
        rosterListeners.clear();
    }

    /**
     * Notifies roster listeners about roster change.
     *
     * @see #addRosterListener
     * @see #removeRosterListener
     * @see #removeAllRosterListeners
     * @see #fireReplacedRoster
     */
    private void fireChangedRoster(Roster roster) {
        for (Enumeration e = rosterListeners.elements(); e.hasMoreElements(); ) {
            RosterListener listener = (RosterListener) e.nextElement();
            listener.changedRoster(roster);
        }
    }
    
    /**
     * Notifies roster listeners about roster replace.
     *
     * @see #addRosterListener
     * @see #removeRosterListener
     * @see #removeAllRosterListeners
     * @see #fireChangedRoster
     */
    private void fireReplacedRoster(Roster roster) {
        for (Enumeration e = rosterListeners.elements(); e.hasMoreElements(); ) {
            RosterListener listener = (RosterListener) e.nextElement();
            listener.replacedRoster(roster);
        }
    }
    
    /**
     * Invoked when connection changes. 
     * If disconnected, clears the roster and fires its change.
     */
    public void connectionChanged(ConnectionEvent ce) {
        ConnectionEvent.EState connState = ce.getState();
        if (connState != ConnectionEvent.STATE_CONNECTED) {
            curRoster.clear();
            RosterBuilder rb = new RosterBuilder();
            try {
                Roster r = new Roster(rb);
                fireReplacedRoster(new Roster(rb));
            } catch (java.lang.InstantiationException e) {
                return;
            }
        }
    }
    
}

⌨️ 快捷键说明

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