org.columba.mail.gui.config.account.SpamPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.columba.mail.gui.config.account.SpamPanel.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.mail.gui.config.account;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;

import org.columba.api.gui.frame.IFrameMediator;
import org.columba.core.gui.base.ButtonWithMnemonic;
import org.columba.core.gui.base.CheckBoxWithMnemonic;
import org.columba.core.gui.base.MultiLineLabel;
import org.columba.core.gui.base.RadioButtonWithMnemonic;
import org.columba.mail.config.AccountItem;
import org.columba.mail.config.SpamItem;
import org.columba.mail.folder.IMailFolder;
import org.columba.mail.folder.IMailbox;
import org.columba.mail.gui.tree.FolderTreeModel;
import org.columba.mail.gui.tree.util.SelectFolderDialog;
import org.columba.mail.gui.tree.util.TreeNodeList;
import org.columba.mail.util.MailResourceLoader;

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

/**
 * Panel for spam options.
 * 
 * @author fdietz
 */
public class SpamPanel extends DefaultPanel implements ActionListener {

    private AccountItem item;

    private JCheckBox enableCheckBox;

    private JCheckBox addressCheckBox;

    private JCheckBox incomingCheckBox;

    private JCheckBox markCheckBox;

    private JRadioButton incomingTrashRadioButton;

    private JRadioButton incomingMoveToRadioButton;

    private JButton incomingChooseFolderButton;

    private JRadioButton markTrashRadioButton;

    private JRadioButton markMoveToRadioButton;

    private JButton markChooseFolderButton;

    private MultiLineLabel label;

    private IFrameMediator mediator;

    public SpamPanel(IFrameMediator mediator, AccountItem item) {
        this.item = item;
        this.mediator = mediator;

        initComponents();
        updateComponents(true);
        layoutComponents();
    }

    protected void initComponents() {
        enableCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "enable_filter"));
        enableCheckBox.setActionCommand("ENABLE");
        enableCheckBox.addActionListener(this);

        addressCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "dont_mark_message"));

        incomingCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "move_incoming_messages"));
        incomingCheckBox.setActionCommand("INCOMING");
        incomingCheckBox.addActionListener(this);

        incomingChooseFolderButton = new ButtonWithMnemonic("Inbox");
        incomingChooseFolderButton.setActionCommand("INCOMING_BUTTON");
        incomingChooseFolderButton.addActionListener(this);

        incomingTrashRadioButton = new RadioButtonWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "trash_folder"));
        incomingMoveToRadioButton = new RadioButtonWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "move_to"));
        ButtonGroup group = new ButtonGroup();
        group.add(incomingTrashRadioButton);
        group.add(incomingMoveToRadioButton);

        markCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "when_marking_message"));
        markCheckBox.setActionCommand("MARK");
        markCheckBox.addActionListener(this);

        markTrashRadioButton = new RadioButtonWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "move_to_trash_folder"));
        markMoveToRadioButton = new RadioButtonWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "move_to"));
        ButtonGroup group2 = new ButtonGroup();
        group2.add(markTrashRadioButton);
        group2.add(markMoveToRadioButton);

        markChooseFolderButton = new ButtonWithMnemonic("Inbox");
        markChooseFolderButton.setActionCommand("MARK_BUTTON");
        markChooseFolderButton.addActionListener(this);

        label = new MultiLineLabel(MailResourceLoader.getString("dialog", "account", "spam_intro"));
    }

    protected void layoutComponents() {
        // Create a FormLayout instance.
        FormLayout layout = new FormLayout("10dlu, 10dlu, max(100;default), 3dlu, max(150dlu;default):grow, 3dlu",

                // 2 columns
                ""); // rows are added dynamically (no need to define them

        // here)
        DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);
        builder.setLeadingColumnOffset(1);

        // create EmptyBorder between components and dialog-frame
        builder.setDefaultDialogBorder();

        builder.setLeadingColumnOffset(1);

        builder.appendSeparator(
                MailResourceLoader.getString("dialog", "account", "separator_adaptive_spam_filter"));

        builder.append(label, 4);
        builder.nextLine();

        builder.append(enableCheckBox, 4);
        builder.nextLine();

        builder.appendSeparator(MailResourceLoader.getString("dialog", "account", "separator_filter_options"));
        builder.nextLine();

        builder.append(addressCheckBox, 4);
        builder.nextLine();

        builder.append(incomingCheckBox, 4);
        builder.nextLine();

        builder.setLeadingColumnOffset(2);

        builder.append(incomingTrashRadioButton, 3);
        builder.nextLine();
        builder.append(incomingMoveToRadioButton, 1);
        builder.append(incomingChooseFolderButton, 2);

        builder.setLeadingColumnOffset(1);

        builder.append(markCheckBox, 4);
        builder.nextLine();

        builder.setLeadingColumnOffset(2);

        builder.append(markTrashRadioButton, 3);
        builder.nextLine();

        builder.append(markMoveToRadioButton, 1);
        builder.append(markChooseFolderButton, 2);
    }

    public void updateComponents(boolean b) {
        SpamItem spam = item.getSpamItem();

        if (b) {
            enableCheckBox.setSelected(spam.isEnabled());

            incomingCheckBox.setSelected(spam.isMoveIncomingJunkMessagesEnabled());

            IMailbox folder = (IMailbox) FolderTreeModel.getInstance().getFolder(spam.getIncomingCustomFolder());
            String treePath = folder.getTreePath();
            incomingChooseFolderButton.setText(treePath);

            incomingMoveToRadioButton.setSelected(!spam.isIncomingTrashSelected());

            incomingTrashRadioButton.setSelected(spam.isIncomingTrashSelected());

            markCheckBox.setSelected(spam.isMoveMessageWhenMarkingEnabled());

            folder = (IMailbox) FolderTreeModel.getInstance().getFolder(spam.getMoveCustomFolder());
            treePath = folder.getTreePath();
            markChooseFolderButton.setText(treePath);

            markMoveToRadioButton.setSelected(!spam.isMoveTrashSelected());
            markTrashRadioButton.setSelected(spam.isMoveTrashSelected());
            addressCheckBox.setSelected(spam.checkAddressbook());

            enableComponents(enableCheckBox.isSelected());
        } else {
            spam.setEnabled(enableCheckBox.isSelected());

            spam.enableMoveIncomingJunkMessage(incomingCheckBox.isSelected());
            spam.enableMoveMessageWhenMarking(markCheckBox.isSelected());

            spam.selectedIncomingTrash(incomingTrashRadioButton.isSelected());
            spam.selectMoveTrash(markTrashRadioButton.isSelected());

            TreeNodeList list = new TreeNodeList(incomingChooseFolderButton.getText());
            IMailbox folder = (IMailbox) FolderTreeModel.getInstance().getFolder(list);

            if (folder == null) {
                // user didn't select any folder
                // -> make Inbox the default folder
                folder = (IMailbox) FolderTreeModel.getInstance().getFolder("101");
            }

            String uid = folder.getId();
            spam.setIncomingCustomFolder(uid);

            list = new TreeNodeList(markChooseFolderButton.getText());
            folder = (IMailbox) FolderTreeModel.getInstance().getFolder(list);

            if (folder == null) {
                // user didn't select any folder
                // -> make Inbox the default folder
                folder = (IMailbox) FolderTreeModel.getInstance().getFolder("101");
            }

            uid = folder.getId();
            spam.setMoveCustomFolder(uid);
            spam.enableCheckAddressbook(addressCheckBox.isSelected());
        }
    }

    public void actionPerformed(ActionEvent arg0) {
        String action = arg0.getActionCommand();

        if (action.equals("ENABLE")) {
            enableComponents(enableCheckBox.isSelected());
        } else if (action.equals("INCOMING")) {
            enableIncoming(incomingCheckBox.isSelected());
        } else if (action.equals("MARK")) {
            enableMark(markCheckBox.isSelected());
        } else if (action.equals("MARK_BUTTON")) {
            SelectFolderDialog dialog = new SelectFolderDialog(mediator);
            if (dialog.success()) {
                IMailFolder folder = (IMailFolder) dialog.getSelectedFolder();

                String treePath = folder.getTreePath();
                markChooseFolderButton.setText(treePath);
            }
        } else if (action.equals("INCOMING_BUTTON")) {
            SelectFolderDialog dialog = new SelectFolderDialog(mediator);
            if (dialog.success()) {
                IMailFolder folder = (IMailFolder) dialog.getSelectedFolder();

                String treePath = folder.getTreePath();
                incomingChooseFolderButton.setText(treePath);
            }
        }
    }

    private void enableComponents(boolean enable) {
        addressCheckBox.setEnabled(enable);

        incomingCheckBox.setEnabled(enable);
        enableIncoming(enable);

        markCheckBox.setEnabled(enable);
        enableMark(enable);
    }

    private void enableIncoming(boolean enable) {
        incomingChooseFolderButton.setEnabled(incomingCheckBox.isSelected());
        incomingMoveToRadioButton.setEnabled(incomingCheckBox.isSelected());
        incomingTrashRadioButton.setEnabled(incomingCheckBox.isSelected());
    }

    private void enableMark(boolean enable) {
        markChooseFolderButton.setEnabled(markCheckBox.isSelected());
        markMoveToRadioButton.setEnabled(markCheckBox.isSelected());
        markTrashRadioButton.setEnabled(markCheckBox.isSelected());
    }
}