Package com.valhalla.jbother.groupchat

Source Code of com.valhalla.jbother.groupchat.ListViewDialog$ListViewModel

/*
Copyright (C) 2003 Adam Olsen

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

package com.valhalla.jbother.groupchat;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;

import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.muc.*;
import com.valhalla.gui.Standard;
import com.valhalla.jbother.*;

/**
* Allows for viewing the different lists of JIDs in MUC
*
* @author Adam Olsen
*/
class ListViewDialog extends JDialog {
    private ResourceBundle resources = ResourceBundle.getBundle(
            "JBotherBundle", Locale.getDefault());

    public static final int TYPE_ADMIN = 1;

    public static final int TYPE_MEMBERS = 3;

    public static final int TYPE_MODERATORS = 2;

    public static final int TYPE_OUTCASTS = 4;

    public static final int TYPE_OWNERS = 5;

    public static final int TYPE_PARTICIPANTS = 6;

    private ChatRoomPanel panel;

    private JPanel container;

    private ListViewModel model = new ListViewModel();

    private JTable table = new JTable(model);

    private JPanel buttonPanel = new JPanel();

    private JButton okButton = new JButton(resources.getString("okButton"));

    private JButton addButton = new JButton(resources.getString("addButton"));

    private JButton banButton = new JButton(resources
            .getString("unbanSelected"));

    private Vector listeners = new Vector();

    private int type;

    private JScrollPane pane = new JScrollPane(table);

    private String title = "";

    public ListViewDialog(ChatRoomPanel panel, final int type) {
        super(BuddyList.getInstance().getTabFrame());
        this.panel = panel;
        this.type = type;

        if (type == TYPE_ADMIN)
            title = resources.getString("viewAdmins");
        else if (type == TYPE_MEMBERS)
            title = resources.getString("viewMembers");
        else if (type == TYPE_MODERATORS)
            title = resources.getString("viewModerators");
        else if (type == TYPE_OUTCASTS)
            title = resources.getString("viewOutcasts");
        else if (type == TYPE_OWNERS)
            title = resources.getString("viewOwners");
        else if (type == TYPE_PARTICIPANTS)
            title = resources.getString("viewParticipants");

        setTitle(title);

        container = (JPanel) getContentPane();
        container.setBorder(BorderFactory.createTitledBorder(title));
        container.setLayout(new BorderLayout());
        JPanel p = new JPanel(new BorderLayout());
        p.add(pane, BorderLayout.CENTER);
        pane.getViewport().setBackground(Color.WHITE);
        p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        container.add(p, BorderLayout.CENTER);
        pane.setBorder(BorderFactory.createEtchedBorder());

        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));

        buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        buttonPanel.add(Box.createHorizontalGlue());

        if (type != TYPE_OUTCASTS)
            banButton.setText(resources.getString("revokeSelected"));
        buttonPanel.add(banButton);
        if (type != TYPE_MODERATORS && type != TYPE_PARTICIPANTS)
            buttonPanel.add(addButton);
        buttonPanel.add(okButton);
        buttonPanel.add(Box.createHorizontalGlue());
        container.add(buttonPanel, BorderLayout.SOUTH);

        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });

        banButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String err = resources.getString("couldNotUnban");
                if (type != TYPE_OUTCASTS)
                    err = resources.getString("couldNotRevoke");
                table.setEnabled(false);
                banButton.setEnabled(false);
                Thread thread = new Thread(new UnbanThread(type, err));
                thread.start();
            }
        });

        addButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                addHandler();
            }
        });

        model.setWidths();
        pack();
        setSize(new Dimension(460, 400));
        setLocationRelativeTo(panel);

        Thread thread = new Thread(new GetListThread());
        thread.start();
    }

    private class UnbanThread implements Runnable {
        private String err;

        private int type;

        public UnbanThread(int type, String err) {
            this.type = type;
            this.err = err;
        }

        public void run() {
            String message = null;
            try {
                MultiUserChat chat = panel.getChat();
                int rows[] = table.getSelectedRows();
                ArrayList users = new ArrayList();
                for (int i = 0; i < rows.length; i++) {
                    String jid = (String) model.getValueAt(rows[i], 0);

                    if (type == TYPE_MODERATORS || type == TYPE_PARTICIPANTS) {
                        jid = (String) model.getValueAt(rows[i], 1);
                        if (jid == null)
                            continue;
                    }

                    users.add(jid);
                }

                if (type == TYPE_OUTCASTS)
                    chat.grantMembership(users);
                else if (type == TYPE_ADMIN)
                    chat.revokeAdmin(users);
                else if (type == TYPE_MEMBERS)
                    chat.revokeMembership(users);
                else if (type == TYPE_OWNERS)
                    chat.revokeOwnership(users);
                else if (type == TYPE_PARTICIPANTS)
                    chat.revokeVoice(users);
                else if (type == TYPE_MODERATORS)
                    chat.revokeModerator(users);

            } catch (XMPPException ex) {
                message = ex.getMessage();
                if (ex.getXMPPError() != null) {
                    message = resources.getString("xmppError"
                            + ex.getXMPPError().getCode());
                }

                Standard.warningMessage(ListViewDialog.this, resources
                        .getString("viewOutcasts"), err + ": " + message);
            }

            if (message == null) {
                Thread thread = new Thread(new GetListThread());
                thread.start();
            }

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    banButton.setEnabled(true);
                    table.setEnabled(true);
                }
            });
        }
    }

    private void addHandler() {
        String p = resources.getString("pleaseEnterJid");

        String result = (String) JOptionPane.showInputDialog(this, p, title,
                JOptionPane.QUESTION_MESSAGE, null, null, "");

        if (result.equals("") || result == null)
            return;
        Thread thread = new Thread(new AddThread(result));
        thread.start();
    }

    private class AddThread implements Runnable {
        String res;

        public AddThread(String jid) {
            this.res = jid;
        }

        public void run() {
            String message = null;
            String title = "";
            if (type == TYPE_ADMIN)
                title = resources.getString("grantAdmin");
            else if (type == TYPE_MEMBERS)
                title = resources.getString("grantMembership");
            else if (type == TYPE_OWNERS)
                title = resources.getString("grantOwnership");
            else if (type == TYPE_PARTICIPANTS)
                title = resources.getString("grantVoice");

            try {
                MultiUserChat chat = panel.getChat();
                if (type == TYPE_OUTCASTS)
                    chat.banUser(res, "None");
                else if (type == TYPE_ADMIN)
                    chat.grantAdmin(res);
                else if (type == TYPE_MEMBERS)
                    chat.grantMembership(res);
                else if (type == TYPE_OWNERS)
                    chat.grantOwnership(res);
            } catch (XMPPException ex) {
                message = ex.getMessage();
                if (ex.getXMPPError() != null) {
                    message = resources.getString("xmppError"
                            + ex.getXMPPError().getCode());
                }

                Standard.warningMessage(ListViewDialog.this, title, title + ": "
                        + message);
            }

            if (message == null) {
                Thread thread = new Thread(new GetListThread());
                thread.start();
            }
        }
    }

    private class GetListThread implements Runnable {
        public void run() {
            MultiUserChat chat = panel.getChat();
            Collection col = new Vector();
            try {
                if (type == TYPE_ADMIN)
                    col = chat.getAdmins();
                else if (type == TYPE_MEMBERS)
                    col = chat.getMembers();
                else if (type == TYPE_MODERATORS)
                    col = chat.getModerators();
                else if (type == TYPE_OUTCASTS)
                    col = chat.getOutcasts();
                else if (type == TYPE_OWNERS)
                    col = chat.getOwners();
                else if (type == TYPE_PARTICIPANTS)
                    col = chat.getParticipants();
            } catch (XMPPException ex) {
                String error = ex.getMessage();
                if (ex.getXMPPError() != null)
                    error = resources.getString("couldNotFetchList")
                            + ": "
                            + resources.getString("xmppError"
                                    + ex.getXMPPError().getCode());
                panel.serverErrorMessage(error);
                dispose();
                return;
            }

            final Collection temp = col;

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    updateList(temp);
                    setVisible(true);
                }
            });
        }
    }

    public void addActionListener(ActionListener listener) {
        listeners.add(listener);
    }

    public JPanel getButtonPanel() {
        return buttonPanel;
    }

    public void updateList(Collection col) {
        model.clear();
        model.setItems(col);
    }

    private class ListViewModel extends AbstractTableModel {
        private Collection items = new Vector();

        private String names[] = new String[] { "JID", "Nick", "Role",
                "Affiliation" };

        public ListViewModel() {
        }

        public void setWidths() {
            TableColumn column = null;

            for (int i = 0; i < getColumnCount(); i++) {
                column = table.getColumnModel().getColumn(i);
                if (i == 0) {
                    column.setPreferredWidth(300);
                } else if (i == 3)
                    column.setPreferredWidth(150);
                else
                    column.setPreferredWidth(100);
            }

            table.validate();
        }

        public void clear() {
            items.clear();
            table.tableChanged(new TableModelEvent(this));
        }

        public void setItems(Collection col) {
            this.items = col;
            table.tableChanged(new TableModelEvent(this));
        }

        public int getSize() {
            return items.size();
        }

        public String getColumnName(int index) {
            return names[index];
        }

        public int getColumnCount() {
            return names.length;
        }

        public int getRowCount() {
            return items.size();
        }

        public Object getValueAt(int row, int column) {
            Object[] array = items.toArray();
            Object item = array[row];

            if (item instanceof Affiliate) {
                Affiliate aff = (Affiliate) item;
                if (column == 0)
                    return aff.getJid();
                else if (column == 1) {
                    if (aff.getNick() == null)
                        return "n/a";
                    else
                        return aff.getNick();
                } else if (column == 2) {
                    if (aff.getRole() == null)
                        return "none";
                    else
                        return aff.getRole();
                } else if (column == 3) {
                    if (aff.getAffiliation() == null)
                        return "none";
                    else
                        return aff.getAffiliation();
                }
            } else {
                Occupant aff = (Occupant) item;
                if (column == 0)
                    return aff.getJid();
                else if (column == 1) {
                    if (aff.getNick() == null)
                        return "n/a";
                    else
                        return aff.getNick();
                } else if (column == 2) {
                    if (aff.getRole() == null)
                        return "none";
                    else
                        return aff.getRole();
                } else if (column == 3) {
                    if (aff.getAffiliation() == null)
                        return "none";
                    else
                        return aff.getAffiliation();
                }
            }

            return "none";
        }
    }
}
TOP

Related Classes of com.valhalla.jbother.groupchat.ListViewDialog$ListViewModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.