rosterdialog.java

来自「开源项目openfire的完整源程序」· Java 代码 · 共 546 行 · 第 1/2 页

JAVA
546
字号
/** * $Revision: $ * $Date: $ * * Copyright (C) 2006 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Lesser Public License (LGPL), * a copy of which is included in this distribution. */package org.jivesoftware.spark.ui;import org.jivesoftware.resource.Res;import org.jivesoftware.smack.Roster;import org.jivesoftware.smack.RosterEntry;import org.jivesoftware.smack.RosterGroup;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.util.StringUtils;import org.jivesoftware.smackx.packet.VCard;import org.jivesoftware.spark.SparkManager;import org.jivesoftware.spark.UserManager;import org.jivesoftware.spark.component.TitlePanel;import org.jivesoftware.spark.component.borders.ComponentTitledBorder;import org.jivesoftware.spark.component.renderer.JPanelRenderer;import org.jivesoftware.spark.util.ModelUtil;import org.jivesoftware.spark.util.ResourceUtils;import org.jivesoftware.spark.util.SwingWorker;import org.jivesoftware.spark.util.log.Log;import org.jivesoftware.sparkimpl.plugin.gateways.Gateway;import org.jivesoftware.sparkimpl.plugin.gateways.transports.Transport;import org.jivesoftware.sparkimpl.plugin.gateways.transports.TransportUtils;import javax.swing.BorderFactory;import javax.swing.Icon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.ArrayList;import java.util.List;import java.util.Vector;/** * The RosterDialog is used to add new users to the users XMPP Roster. */public class RosterDialog implements PropertyChangeListener, ActionListener {    private JPanel panel;    private JTextField jidField;    private JTextField nicknameField;    private final Vector<String> groupModel = new Vector<String>();    private final JPanel networkPanel = new JPanel(new GridBagLayout());    private JComboBox groupBox;    private JComboBox accounts;    private JOptionPane pane;    private JDialog dialog;    private ContactList contactList;    private JCheckBox publicBox;    /**     * Create a new instance of RosterDialog.     */    public RosterDialog() {        contactList = SparkManager.getWorkspace().getContactList();        panel = new JPanel();        JLabel contactIDLabel = new JLabel();        jidField = new JTextField();        JLabel nicknameLabel = new JLabel();        nicknameField = new JTextField();        JLabel groupLabel = new JLabel();        groupBox = new JComboBox(groupModel);        JButton newGroupButton = new JButton();        JLabel accountsLabel = new JLabel();        accounts = new JComboBox();        publicBox = new JCheckBox(Res.getString("label.user.on.public.network"));        ResourceUtils.resLabel(accountsLabel, publicBox, Res.getString("label.network"));        pane = null;        dialog = null;        panel.setLayout(new GridBagLayout());        panel.add(contactIDLabel, new GridBagConstraints(0, 0, 1, 1, 0.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        panel.add(jidField, new GridBagConstraints(1, 0, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        panel.add(nicknameLabel, new GridBagConstraints(0, 1, 1, 1, 0.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        panel.add(nicknameField, new GridBagConstraints(1, 1, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        ComponentTitledBorder componentBorder = new ComponentTitledBorder(publicBox, networkPanel                , BorderFactory.createEtchedBorder());        networkPanel.add(accountsLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        networkPanel.add(accounts, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        networkPanel.setBorder(componentBorder);        networkPanel.setVisible(false);        accounts.setEnabled(false);        panel.add(groupLabel, new GridBagConstraints(0, 4, 1, 1, 0.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        panel.add(groupBox, new GridBagConstraints(1, 4, 1, 1, 1.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        panel.add(newGroupButton, new GridBagConstraints(2, 4, 1, 1, 0.0D, 0.0D, 17, 2, new Insets(5, 5, 5, 5), 0, 0));        newGroupButton.addActionListener(this);        panel.add(networkPanel, new GridBagConstraints(0, 5, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));        ResourceUtils.resLabel(contactIDLabel, jidField, Res.getString("label.username") + ":");        ResourceUtils.resLabel(nicknameLabel, nicknameField, Res.getString("label.nickname") + ":");        ResourceUtils.resLabel(groupLabel, groupBox, Res.getString("label.group") + ":");        ResourceUtils.resButton(newGroupButton, Res.getString("button.new"));        accounts.setRenderer(new JPanelRenderer());        for (ContactGroup group : contactList.getContactGroups()) {            if (!group.isOfflineGroup() && !"Unfiled".equalsIgnoreCase(group.getGroupName()) && !group.isSharedGroup()) {                groupModel.add(group.getGroupName());            }        }        groupBox.setEditable(true);        if (groupModel.size() == 0) {            groupBox.addItem("Friends");        }        if (groupModel.size() > 0) {            groupBox.setSelectedIndex(0);        }        jidField.addFocusListener(new FocusListener() {            public void focusGained(FocusEvent e) {            }            public void focusLost(FocusEvent e) {                String jid = getJID();                String vcardNickname = null;                if (!publicBox.isSelected()) {                    // This is not a transport.                    String fullJID = getJID();                    if (fullJID.indexOf("@") == -1) {                        fullJID = fullJID + "@" + SparkManager.getConnection().getServiceName();                    }                    VCard vCard = SparkManager.getVCardManager().getVCard(fullJID);                    if (vCard != null && vCard.getError() == null) {                        String firstName = vCard.getFirstName();                        String lastName = vCard.getLastName();                        String nickname = vCard.getNickName();                        if (ModelUtil.hasLength(nickname)) {                            vcardNickname = nickname;                        }                        else if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) {                            vcardNickname = firstName + " " + lastName;                        }                        else if (ModelUtil.hasLength(firstName)) {                            vcardNickname = firstName;                        }                    }                }                String nickname = nicknameField.getText();                if (!ModelUtil.hasLength(nickname) && ModelUtil.hasLength(jid)) {                    nickname = StringUtils.parseName(jid);                    if (!ModelUtil.hasLength(nickname)) {                        nickname = jid;                    }                    nicknameField.setText(vcardNickname != null ? vcardNickname : nickname);                }            }        });        final List<AccountItem> accountCol = getAccounts();        for (AccountItem item : accountCol) {            accounts.addItem(item);        }        if (accountCol.size() > 0) {            accountsLabel.setVisible(true);            accounts.setVisible(true);            publicBox.setVisible(true);            networkPanel.setVisible(true);        }        publicBox.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent actionEvent) {                accounts.setEnabled(publicBox.isSelected());            }        });    }    /**     * Sets the default <code>ContactGroup</code> to display in the combo box.     *     * @param contactGroup the default ContactGroup.     */    public void setDefaultGroup(ContactGroup contactGroup) {        String groupName = contactGroup.getGroupName();        if (groupModel.contains(groupName)) {            groupBox.setSelectedItem(groupName);        }        else if (groupModel.size() > 0) {            groupBox.addItem(groupName);            groupBox.setSelectedItem(groupName);        }    }    /**     * Sets the default jid to show in the jid field.     *     * @param jid the jid.     */    public void setDefaultJID(String jid) {        jidField.setText(jid);    }    /**     * Sets the default nickname to show in the nickname field.     *     * @param nickname the nickname.     */    public void setDefaultNickname(String nickname) {        nicknameField.setText(nickname);    }    public void actionPerformed(ActionEvent e) {        String group = JOptionPane.showInputDialog(dialog, Res.getString("label.enter.group.name") + ":", Res.getString("title.new.roster.group"), 3);        if (group != null && group.length() > 0 && !groupModel.contains(group)) {            SparkManager.getConnection().getRoster().createGroup(group);            groupModel.add(group);            int size = groupModel.size();            groupBox.setSelectedIndex(size - 1);        }    }    /**     * Display the RosterDialog using a parent container.     *     * @param parent the parent Frame.     */    public void showRosterDialog(JFrame parent) {        TitlePanel titlePanel = new TitlePanel(Res.getString("title.add.contact"), Res.getString("message.add.contact.to.list"), null, true);

⌨️ 快捷键说明

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