org.columba.addressbook.gui.dialog.group.EditGroupDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.columba.addressbook.gui.dialog.group.EditGroupDialog.java

Source

// The contents of this file are subject to the Mozilla Public License Version
// 1.1
//(the "License"); you may not use this file except in compliance with the
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
//
//Software distributed under the License is distributed on an "AS IS" basis,
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
//for the specific language governing rights and
//limitations under the License.
//
//The Original Code is "The Columba Project"
//
//The Initial Developers of the Original Code are Frederik Dietz and Timo
// Stich.
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
//
//All Rights Reserved.
package org.columba.addressbook.gui.dialog.group;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;

import org.columba.addressbook.folder.AbstractFolder;
import org.columba.addressbook.gui.list.AddressbookDNDListView;
import org.columba.addressbook.gui.list.AddressbookListModel;
import org.columba.addressbook.model.IBasicModelPartial;
import org.columba.addressbook.model.IContactModelPartial;
import org.columba.addressbook.model.IGroupModel;
import org.columba.addressbook.util.AddressbookResourceLoader;
import org.columba.core.gui.base.ButtonWithMnemonic;
import org.columba.core.gui.base.DoubleClickListener;
import org.columba.core.gui.base.SingleSideEtchedBorder;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class EditGroupDialog extends JDialog implements ActionListener, KeyListener {

    private AddressbookDNDListView parentList;

    private AddressbookListModel parentMembers;

    private AddressbookDNDListView groupList;

    private AddressbookListModel groupMembers;

    private JButton addButton;

    private JButton removeButton;

    private JLabel nameLabel;

    private JLabel descriptionLabel;

    private JTextField nameTextField;

    private JTextField descriptionTextField;

    private boolean result;

    private ButtonWithMnemonic okButton;

    private ButtonWithMnemonic cancelButton;

    private IGroupModel group;

    private AbstractFolder parentFolder;

    /**
     * Constructor
     *
     * @param frame
     *            parent frame
     * @param groupNode
     *            null, if you want to create a new group. Otherwise, the
     *            groupNode will be modified.
     */
    public EditGroupDialog(JFrame frame, IGroupModel group, AbstractFolder parentFolder) {
        super(frame, true);

        this.group = group;
        this.parentFolder = parentFolder;

        result = false;

        setTitle(AddressbookResourceLoader.getString("dialog", "editgroupdialog", "contact_list_editor")); //$NON-NLS-2$

        // set title
        initComponents();

        layoutComponents();

        updateComponents(true);

        pack();

        setLocationRelativeTo(null);

        setVisible(true);
    }

    private JPanel createGroupNamePanel() {
        JPanel panel = new JPanel();
        FormLayout layout = new FormLayout("12px, right:default, 6px, default:grow", ""); //$NON-NLS-1$ //$NON-NLS-2$

        DefaultFormBuilder b = new DefaultFormBuilder(layout, panel);
        b.setRowGroupingEnabled(true);
        b.setLeadingColumnOffset(1);

        b.appendSeparator(AddressbookResourceLoader.getString("dialog", "editgroupdialog", "description_3")); //$NON-NLS-2$

        b.append(nameLabel);
        b.append(nameTextField);

        b.append(descriptionLabel);
        b.append(descriptionTextField);

        return panel;
    }

    private JPanel createGroupPanel() {
        JPanel panel = new JPanel();
        FormLayout layout = new FormLayout("fill:default:grow, 12dlu, fill:default:grow", //$NON-NLS-1$
                "default, 4px, fill:default:grow, 6px, default"); //$NON-NLS-1$

        PanelBuilder builder = new PanelBuilder(layout, panel);
        CellConstraints cc = new CellConstraints();

        builder.addSeparator(AddressbookResourceLoader.getString("dialog", "editgroupdialog", "addressbook"), //$NON-NLS-2$
                cc.xy(1, 1));
        builder.addSeparator(AddressbookResourceLoader.getString("dialog", "editgroupdialog", "group_members"), //$NON-NLS-2$
                cc.xy(3, 1));

        builder.add(new JScrollPane(parentList), cc.xy(1, 3));
        builder.add(new JScrollPane(groupList), cc.xy(3, 3));

        builder.add(addButton, cc.xy(1, 5));
        builder.add(removeButton, cc.xy(3, 5));

        return panel;
    }

    private void layoutComponents() {
        getContentPane().setLayout(new BorderLayout());

        JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));

        FormLayout layout = new FormLayout("fill:default:grow", //$NON-NLS-1$
                "default, 16px, fill:default:grow"); //$NON-NLS-1$

        CellConstraints cc = new CellConstraints();
        mainPanel.setLayout(layout);

        mainPanel.add(createGroupNamePanel(), cc.xy(1, 1));
        mainPanel.add(createGroupPanel(), cc.xy(1, 3));

        getContentPane().add(mainPanel, BorderLayout.CENTER);

        JPanel bottomPanel = new JPanel(new BorderLayout());
        bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));

        JPanel buttonPanel = new JPanel(new GridLayout(1, 2, 6, 0));
        buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));

        buttonPanel.add(okButton);
        buttonPanel.add(cancelButton);
        bottomPanel.add(buttonPanel, BorderLayout.EAST);

        getContentPane().add(bottomPanel, BorderLayout.SOUTH);
    }

    private void initComponents() {
        nameLabel = new JLabel(AddressbookResourceLoader.getString("dialog", "editgroupdialog", "name")); //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-3$
        nameTextField = new JTextField();

        descriptionLabel = new JLabel(
                AddressbookResourceLoader.getString("dialog", "editgroupdialog", "description_2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        descriptionTextField = new JTextField();

        groupMembers = new AddressbookListModel();
        parentList = new AddressbookDNDListView(groupMembers);
        parentList.setMinimumSize(new Dimension(200, 300));
        parentList.setAcceptDrop(false);
        parentList.addMouseListener(new DoubleClickListener() {
            public void doubleClick(MouseEvent ev) {
                actionPerformed(new ActionEvent(parentList, 0, "ADD"));
            }

        });

        parentMembers = new AddressbookListModel();
        Map<String, IContactModelPartial> l = parentFolder.getContactItemMap();

        for (Iterator<IContactModelPartial> it = l.values().iterator(); it.hasNext();) {
            IContactModelPartial p = (IContactModelPartial) it.next();
            parentMembers.addElement(p);
        }
        parentList.setModel(parentMembers);

        groupMembers = new AddressbookListModel();
        groupList = new AddressbookDNDListView(groupMembers);
        groupList.setMinimumSize(new Dimension(200, 300));

        addButton = new JButton("Add"); //$NON-NLS-1$
        addButton.addActionListener(this);
        addButton.setActionCommand("ADD"); //$NON-NLS-1$

        removeButton = new JButton("Remove"); //$NON-NLS-1$
        removeButton.addActionListener(this);
        removeButton.setActionCommand("REMOVE"); //$NON-NLS-1$

        okButton = new ButtonWithMnemonic(AddressbookResourceLoader.getString("global", "ok")); //$NON-NLS-1$ //$NON-NLS-2$
        okButton.setActionCommand("OK"); //$NON-NLS-1$
        okButton.addActionListener(this);

        cancelButton = new ButtonWithMnemonic(AddressbookResourceLoader.getString("global", "cancel")); //$NON-NLS-1$ //$NON-NLS-2$
        cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
        cancelButton.addActionListener(this);

        getRootPane().setDefaultButton(okButton);
        getRootPane().registerKeyboardAction(this, "CANCEL", //$NON-NLS-1$
                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
    }

    public boolean getResult() {
        return result;
    }

    public void updateComponents(boolean b) {
        if (b) {
            // gettext
            nameTextField.setText(group.getName()); //$NON-NLS-1$
            descriptionTextField.setText(group.getDescription()); //$NON-NLS-1$

            groupMembers = new AddressbookListModel();

            String[] m = group.getMembers();

            try {
                Map<String, IContactModelPartial> l = parentFolder.getContactItemMap();

                for (int i = 0; i < m.length; i++) {

                    IContactModelPartial item = l.get(m[i]);

                    groupMembers.addElement(item);
                }
            } catch (Exception e) {

                e.printStackTrace();
            }

            this.groupList.setModel(groupMembers);
        } else {
            // settext
            group.setName(nameTextField.getText()); //$NON-NLS-1$
            group.setDescription(descriptionTextField.getText()); //$NON-NLS-1$

            // remove all children
            group.removeAllMembers();

            // add children
            for (int i = 0; i < groupMembers.getSize(); i++) {
                group.addMember(groupMembers.get(i).getId());
            }
        }
    }

    /**
     * Add headeritem from ComboBox to List
     *
     */
    private void addHeaderItem() {
        Object[] list = parentList.getSelectedValues();

        for (int i = 0; i < list.length; i++) {
            groupMembers.addElement((IBasicModelPartial) list[i]);
        }
    }

    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();

        if (command.equals("CANCEL")) { //$NON-NLS-1$
            result = false;
            setVisible(false);
        } else if (command.equals("OK")) { //$NON-NLS-1$

            if (nameTextField.getText().length() == 0) {
                JOptionPane.showMessageDialog(this, AddressbookResourceLoader.getString("dialog", "editgroupdialog", //$NON-NLS-2$
                        "you_must_enter_a_name_for_the_group")); //$NON-NLS-1$ //$NON-NLS-3$

                return;
            }

            result = true;

            updateComponents(false);

            setVisible(false);
        } else if (command.equals("ADD")) { //$NON-NLS-1$
            addHeaderItem();
        } else if (command.equals("REMOVE")) { //$NON-NLS-1$
            Object[] list = groupList.getSelectedValues();

            for (int i = 0; i < list.length; i++) {
                groupMembers.removeElement((IBasicModelPartial) list[i]);
            }
        }
    }

    /** ************************* KeyListener **************************** */
    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
    }

    public void keyReleased(KeyEvent e) {
        char ch = e.getKeyChar();

        if (ch == KeyEvent.VK_ENTER) {
            addHeaderItem();
        }
    }
}