groupchatparticipantlist.java.svn-base

来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 891 行 · 第 1/3 页

SVN-BASE
891
字号
        }


        final ImageIcon inviteIcon = SparkRes.getImageIcon(SparkRes.USER1_BACK_16x16);

        addUser(inviteIcon, nickname);

        invitees.put(nickname, message);
    }

    private ImageIcon getImageIcon(String participantJID) {
        String nickname = StringUtils.parseResource(participantJID);
        ImageIcon icon = SparkRes.getImageIcon(SparkRes.GREEN_BALL);
        icon.setDescription(nickname);
        return icon;
    }

    private void addParticipant(String participantJID, Presence presence) {
        // Remove reference to invitees
        for (String nick : invitees.keySet()) {
            String jid = SparkManager.getUserManager().getJIDFromNickname(nick);

            Occupant occ = chat.getOccupant(participantJID);
            if (occ != null) {
                String actualJID = occ.getJid();
                if (actualJID.equals(jid)) {
                    removeUser(nick);
                }
            }
        }

        String nickname = StringUtils.parseResource(participantJID);
        Occupant occupant = SparkManager.getUserManager().getOccupant(groupChatRoom, nickname);
        boolean isOwnerOrAdmin = SparkManager.getUserManager().isOwnerOrAdmin(occupant);
        boolean isModerator = SparkManager.getUserManager().isModerator(occupant);

        if (!exists(nickname)) {
            Icon icon = null;

            icon = PresenceManager.getIconFromPresence(presence);
            if (icon == null) {
                icon = SparkRes.getImageIcon(SparkRes.GREEN_BALL);
            }

            addUser(icon, nickname);
        }
        else {
            Icon icon = PresenceManager.getIconFromPresence(presence);
            if (icon == null) {
                icon = SparkRes.getImageIcon(SparkRes.GREEN_BALL);
            }

            int index = getIndex(nickname);
            if (index != -1) {
                final JLabel userLabel = new JLabel(nickname, icon, JLabel.HORIZONTAL);
                model.setElementAt(userLabel, index);
            }
        }
    }

    public void userHasLeft(ChatRoom room, String userid) {
        if (room != groupChatRoom) {
            return;
        }

        int index = getIndex(userid);

        if (index != -1) {
            removeUser(userid);
            userMap.remove(userid);
        }
    }

    private boolean exists(String nickname) {
        for (int i = 0; i < model.getSize(); i++) {
            final JLabel userLabel = (JLabel)model.getElementAt(i);
            if (userLabel.getText().equals(nickname)) {
                return true;
            }
        }
        return false;
    }


    private String getSelectedUser() {
        JLabel label = (JLabel)participantsList.getSelectedValue();
        if (label != null) {
            return label.getText();
        }

        return null;
    }


    private void startChat(ChatRoom groupChat, String groupJID) {
        String userNickname = StringUtils.parseResource(groupJID);
        String roomTitle = userNickname + " - " + StringUtils.parseName(groupChat.getRoomname());

        String nicknameOfUser = StringUtils.parseResource(groupJID);
        String nickname = groupChat.getNickname();

        if (nicknameOfUser.equals(nickname)) {
            return;
        }

        ChatRoom chatRoom = null;
        try {
            chatRoom = chatManager.getChatContainer().getChatRoom(groupJID);
        }
        catch (ChatRoomNotFoundException e) {
            Log.debug("Could not find chat room - " + groupJID);

            // Create new room
            chatRoom = new ChatRoomImpl(groupJID, nicknameOfUser, roomTitle);
            chatManager.getChatContainer().addChatRoom(chatRoom);
        }

        chatManager.getChatContainer().activateChatRoom(chatRoom);
    }

    public void tabSelected() {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public String getTabTitle() {
        return Res.getString("title.room.information");
    }

    public Icon getTabIcon() {
        return SparkRes.getImageIcon(SparkRes.SMALL_BUSINESS_MAN_VIEW);
    }

    public String getTabToolTip() {
        return Res.getString("title.room.information");
    }

    public JComponent getGUI() {
        return this;
    }


    /**
     * ****************************************************************
     */
    /*                     MUC Functions                                */
    private void kickUser(String nickname) {
        try {
            chat.kickParticipant(nickname, Res.getString("message.you.have.been.kicked"));
        }
        catch (XMPPException e) {
            groupChatRoom.insertText(Res.getString("message.kicked.error", nickname));
        }
    }

    private void banUser(String nickname) {
        try {
            Occupant occupant = chat.getOccupant((String)userMap.get(nickname));
            if (occupant != null) {
                String bareJID = StringUtils.parseBareAddress(occupant.getJid());
                chat.banUser(bareJID, Res.getString("message.you.have.been.banned"));
            }
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }

    private void unbanUser(String jid) {
        try {
            chat.grantMembership(jid);
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }

    private void grantVoice(String nickname) {
        try {
            chat.grantVoice(nickname);
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }

    private void revokeVoice(String nickname) {
        try {
            chat.revokeVoice(nickname);
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }


    private void grantModerator(String nickname) {
        try {
            chat.grantModerator(nickname);
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }

    private void revokeModerator(String nickname) {
        try {
            chat.revokeModerator(nickname);
        }
        catch (XMPPException e) {
            Log.error(e);
        }
    }


    /**
     * Let's make sure that the panel doesn't strech past the
     * scrollpane view pane.
     *
     * @return the preferred dimension
     */
    public Dimension getPreferredSize() {
        final Dimension size = super.getPreferredSize();
        size.width = 150;
        return size;
    }

    private void checkPopup(MouseEvent evt) {
        Point p = evt.getPoint();
        final int index = participantsList.locationToIndex(p);

        final JPopupMenu popup = new JPopupMenu();


        if (index != -1) {
            participantsList.setSelectedIndex(index);
            final JLabel userLabel = (JLabel)model.getElementAt(index);
            final String selectedUser = userLabel.getText();
            final String groupJID = (String)userMap.get(selectedUser);
            String groupJIDNickname = StringUtils.parseResource(groupJID);

            final String nickname = groupChatRoom.getNickname();
            final Occupant occupant = userManager.getOccupant(groupChatRoom, selectedUser);
            final boolean admin = SparkManager.getUserManager().isOwnerOrAdmin(groupChatRoom, chat.getNickname());
            final boolean moderator = SparkManager.getUserManager().isModerator(groupChatRoom, chat.getNickname());

            final boolean userIsAdmin = userManager.isOwnerOrAdmin(occupant);
            final boolean userIsModerator = userManager.isModerator(occupant);
            boolean isMe = nickname.equals(groupJIDNickname);

            // Handle invites
            if (groupJIDNickname == null) {
                Action inviteAgainAction = new AbstractAction() {
                    public void actionPerformed(ActionEvent actionEvent) {
                        String message = invitees.get(selectedUser);
                        String jid = userManager.getJIDFromNickname(selectedUser);
                        chat.invite(jid, message);
                    }
                };

                inviteAgainAction.putValue(Action.NAME, "Invite Again");
                popup.add(inviteAgainAction);


                Action removeInvite = new AbstractAction() {
                    public void actionPerformed(ActionEvent actionEvent) {
                        int index = getIndex(selectedUser);

                        if (index != -1) {
                            model.removeElementAt(index);
                        }
                    }
                };

                removeInvite.putValue(Action.NAME, "Remove");
                popup.add(removeInvite);

                popup.show(participantsList, evt.getX(), evt.getY());
                return;
            }

            if (isMe) {
                Action changeNicknameAction = new AbstractAction() {
                    public void actionPerformed(ActionEvent actionEvent) {
                        String newNickname = JOptionPane.showInputDialog(groupChatRoom, Res.getString("label.new.nickname") + ":", Res.getString("title.change.nickname"), JOptionPane.QUESTION_MESSAGE);
                        if (ModelUtil.hasLength(newNickname)) {
                            while (true) {
                                newNickname = newNickname.trim();
                                String nick = chat.getNickname();
                                if (newNickname.equals(nick)) {
                                    //return;
                                }
                                try {
                                    chat.changeNickname(newNickname);
                                    break;
                                }
                                catch (XMPPException e1) {
                                    newNickname = JOptionPane.showInputDialog(groupChatRoom, Res.getString("message.nickname.in.use") + ":", Res.getString("title.change.nickname"), JOptionPane.QUESTION_MESSAGE);

⌨️ 快捷键说明

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