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

Java tutorial

Introduction

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

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.columba.core.gui.base.CheckBoxWithMnemonic;
import org.columba.core.gui.base.LabelWithMnemonic;
import org.columba.mail.config.AccountItem;
import org.columba.mail.config.Identity;
import org.columba.mail.config.MailConfig;
import org.columba.mail.folder.imap.IMAPRootFolder;
import org.columba.mail.gui.tree.FolderTreeModel;
import org.columba.mail.util.MailResourceLoader;
import org.columba.ristretto.message.Address;
import org.columba.ristretto.parser.ParserException;

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

public class IdentityPanel extends DefaultPanel implements ActionListener {
    private JLabel nameLabel;
    private JTextField nameTextField;
    private JLabel addressLabel;
    private JTextField addressTextField;
    private JLabel organisationLabel;
    private JTextField organisationTextField;
    private JLabel replyaddressLabel;
    private JTextField replyaddressTextField;
    private JLabel accountnameLabel;
    private JTextField accountnameTextField;
    private JCheckBox defaultAccountCheckBox;
    private JButton selectSignatureButton;
    private JCheckBox attachsignatureCheckBox;
    private AccountItem account;
    private JButton editSignatureButton;

    //private ConfigFrame frame;
    public IdentityPanel(AccountItem account) {
        super();

        //this.frame = frame;
        this.account = account;

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

    protected void updateComponents(boolean b) {
        Identity identity = account.getIdentity();
        if (b) {
            accountnameTextField.setText(account.getName());
            Address address = identity.getAddress();
            nameTextField.setText(address.getDisplayName());
            addressTextField.setText(address.getMailAddress());
            address = identity.getReplyToAddress();
            replyaddressTextField.setText(address == null ? "" : address.getMailAddress());
            organisationTextField.setText(identity.getOrganisation());
            File signature = identity.getSignature();
            selectSignatureButton
                    .setText(signature == null ? new File(System.getProperty("user.home"), ".signature").getPath()
                            : signature.getPath());

            attachsignatureCheckBox.setSelected(signature != null);

            defaultAccountCheckBox.setSelected(
                    MailConfig.getInstance().getAccountList().getDefaultAccountUid() == account.getInteger("uid"));
        } else {
            try {
                Address address = Address.parse(addressTextField.getText());
                if (nameTextField.getText() != null) {
                    address.setDisplayName(nameTextField.getText());
                }
                identity.setAddress(address);
                if (replyaddressTextField.getText().length() > 0) {
                    address = Address.parse(replyaddressTextField.getText());
                } else {
                    address = null;
                }
                identity.setReplyToAddress(address);
            } catch (ParserException pe) {
            } //does not occur
            identity.setOrganisation(organisationTextField.getText());
            if (attachsignatureCheckBox.isSelected()) {
                identity.setSignature(new File(selectSignatureButton.getText()));
            } else {
                identity.setSignature(null);
            }

            if (!account.getName().equals(accountnameTextField.getText())) {
                account.setName(accountnameTextField.getText());
                if (!account.isPopAccount()) {
                    // Account is an IMAP account -> change root folder name

                    IMAPRootFolder imapRoot = (IMAPRootFolder) FolderTreeModel.getInstance()
                            .getImapFolder(account.getUid());
                    try {
                        imapRoot.setName(accountnameTextField.getText());
                        FolderTreeModel.getInstance().nodeStructureChanged(imapRoot);
                    } catch (Exception e) {
                    }
                }
            }

            if (defaultAccountCheckBox.isSelected()) {
                MailConfig.getInstance().getAccountList().setDefaultAccount(account.getUid());
            }
        }
    }

    protected void initComponents() {
        accountnameLabel = new LabelWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "identity_accountname"));

        accountnameTextField = new JTextField();
        accountnameLabel.setLabelFor(accountnameTextField);
        defaultAccountCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "defaultaccount"));

        nameLabel = new LabelWithMnemonic(MailResourceLoader.getString("dialog", "account", "yourname"));

        nameTextField = new JTextField();
        nameLabel.setLabelFor(nameTextField);
        addressLabel = new LabelWithMnemonic(MailResourceLoader.getString("dialog", "account", "address"));

        addressTextField = new JTextField();
        addressLabel.setLabelFor(addressTextField);
        replyaddressLabel = new LabelWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "replytoaddress"));

        organisationLabel = new LabelWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "organisation"));

        replyaddressTextField = new JTextField();
        replyaddressLabel.setLabelFor(replyaddressTextField);
        organisationTextField = new JTextField();
        organisationLabel.setLabelFor(organisationTextField);

        attachsignatureCheckBox = new CheckBoxWithMnemonic(
                MailResourceLoader.getString("dialog", "account", "attachthissignature"));

        selectSignatureButton = new JButton("~/.signature");
        selectSignatureButton.setActionCommand("CHOOSE");
        selectSignatureButton.addActionListener(this);

        editSignatureButton = new JButton(new EditSignatureAction(null, account));
    }

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

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

        // create a form builder
        DefaultFormBuilder builder = new DefaultFormBuilder(layout, this);

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

        // skip the first column
        builder.setLeadingColumnOffset(1);

        // Add components to the panel:
        builder.appendSeparator(MailResourceLoader.getString("dialog", "account", "account_information"));
        builder.nextLine();

        builder.append(accountnameLabel, 1);
        builder.append(accountnameTextField);
        builder.nextLine();

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

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

        builder.append(nameLabel, 1);
        builder.append(nameTextField);
        builder.nextLine();

        builder.append(addressLabel, 1);
        builder.append(addressTextField);
        builder.nextLine();

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

        builder.append(organisationLabel, 1);
        builder.append(organisationTextField);
        builder.nextLine();

        builder.append(replyaddressLabel, 1);
        builder.append(replyaddressTextField);
        builder.nextLine(1);

        JPanel panel = new JPanel();
        FormLayout l = new FormLayout(
                "max(100;default), 3dlu, left:max(50dlu;default), 3dlu, left:max(50dlu;default)",

                // 3 columns
                "fill:default:grow"); // rows are added dynamically (no need to define them here)

        // create a form builder
        DefaultFormBuilder b = new DefaultFormBuilder(l, panel);

        b.append(attachsignatureCheckBox, selectSignatureButton, editSignatureButton);

        //b.append(selectSignatureButton);
        builder.append(panel, 3);
        builder.nextLine();

        /*
         * JPanel innerPanel = builder.getPanel();
         * FormDebugUtils.dumpAll(innerPanel); setLayout(new BorderLayout());
         * add(innerPanel, BorderLayout.CENTER);
         */
        /*
         * setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         *
         * GridBagLayout mainLayout = new GridBagLayout(); GridBagConstraints
         * mainConstraints = new GridBagConstraints();
         *
         * mainConstraints.anchor = GridBagConstraints.NORTHWEST;
         * mainConstraints.fill = GridBagConstraints.HORIZONTAL;
         * mainConstraints.weightx = 1.0;
         *
         * setLayout(mainLayout);
         *
         * JPanel accountPanel = new JPanel(); Border b1 =
         * BorderFactory.createEtchedBorder(); Border b2 =
         * BorderFactory.createTitledBorder( b1, MailResourceLoader.getString(
         * "dialog", "account", "account_information"));
         *
         * Border emptyBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5);
         * Border border = BorderFactory.createCompoundBorder(b2, emptyBorder);
         * accountPanel.setBorder(border);
         *
         * GridBagLayout layout = new GridBagLayout(); GridBagConstraints c =
         * new GridBagConstraints(); accountPanel.setLayout(layout);
         *
         * //defaultAccountCheckBox.setEnabled(false);
         *
         * c.fill = GridBagConstraints.HORIZONTAL; c.anchor =
         * GridBagConstraints.NORTHWEST; c.weightx = 0.1; c.gridwidth =
         * GridBagConstraints.RELATIVE; layout.setConstraints(accountnameLabel,
         * c); accountPanel.add(accountnameLabel);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(accountnameTextField, c);
         * accountPanel.add(accountnameTextField);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER;
         * layout.setConstraints(defaultAccountCheckBox, c);
         * accountPanel.add(defaultAccountCheckBox);
         *
         * mainConstraints.gridwidth = GridBagConstraints.REMAINDER;
         *
         * mainLayout.setConstraints(accountPanel, mainConstraints);
         * add(accountPanel);
         *
         * JPanel neededPanel = new JPanel(); b1 =
         * BorderFactory.createEtchedBorder(); b2 =
         * BorderFactory.createTitledBorder( b1, MailResourceLoader.getString(
         * "dialog", "account", "needed_information"));
         *
         * emptyBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5); border =
         * BorderFactory.createCompoundBorder(b2, emptyBorder);
         * neededPanel.setBorder(border);
         *
         * layout = new GridBagLayout(); c = new GridBagConstraints();
         * neededPanel.setLayout(layout);
         *
         * c.fill = GridBagConstraints.HORIZONTAL; c.anchor =
         * GridBagConstraints.NORTHWEST; c.weightx = 0.1;
         *
         * c.gridwidth = GridBagConstraints.RELATIVE;
         * layout.setConstraints(nameLabel, c); neededPanel.add(nameLabel);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(nameTextField, c);
         * neededPanel.add(nameTextField);
         *
         * c.gridwidth = GridBagConstraints.RELATIVE; c.weightx = 0.1;
         * layout.setConstraints(addressLabel, c);
         * neededPanel.add(addressLabel);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(addressTextField, c);
         * neededPanel.add(addressTextField);
         *
         * mainConstraints.gridwidth = GridBagConstraints.REMAINDER;
         *
         * mainLayout.setConstraints(neededPanel, mainConstraints);
         * add(neededPanel);
         *
         * JPanel optionalPanel = new JPanel(); b1 =
         * BorderFactory.createEtchedBorder(); b2 =
         * BorderFactory.createTitledBorder( b1, MailResourceLoader.getString(
         * "dialog", "account", "optional_information"));
         *
         * emptyBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5); border =
         * BorderFactory.createCompoundBorder(b2, emptyBorder);
         *
         * optionalPanel.setBorder(border);
         *
         * layout = new GridBagLayout(); c = new GridBagConstraints();
         * optionalPanel.setLayout(layout);
         *
         * c.fill = GridBagConstraints.HORIZONTAL; c.anchor =
         * GridBagConstraints.NORTHWEST; c.weightx = 0.1;
         *
         * c.gridwidth = GridBagConstraints.RELATIVE;
         * layout.setConstraints(replyaddressLabel, c);
         * optionalPanel.add(replyaddressLabel);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(replyaddressTextField, c);
         * optionalPanel.add(replyaddressTextField);
         *
         * c.gridwidth = GridBagConstraints.RELATIVE; c.weightx = 0.1;
         * layout.setConstraints(organisationLabel, c);
         * optionalPanel.add(organisationLabel);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(organisationTextField, c);
         * optionalPanel.add(organisationTextField);
         *
         * c.gridwidth = GridBagConstraints.RELATIVE; c.weightx = 0.1;
         * layout.setConstraints(attachsignatureCheckBox, c);
         * optionalPanel.add(attachsignatureCheckBox);
         *
         * c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 0.9;
         * layout.setConstraints(selectSignatureButton, c);
         * optionalPanel.add(selectSignatureButton);
         *
         * mainConstraints.gridwidth = GridBagConstraints.REMAINDER;
         * mainLayout.setConstraints(optionalPanel, mainConstraints);
         * add(optionalPanel);
         *
         * mainConstraints.gridheight = GridBagConstraints.REMAINDER;
         * mainConstraints.weighty = 1.0; mainConstraints.fill =
         * GridBagConstraints.VERTICAL; Component vglue =
         * Box.createVerticalGlue(); mainLayout.setConstraints(vglue,
         * mainConstraints); add(vglue);
         */
    }

    public boolean isFinished() {
        String address = addressTextField.getText();
        if (accountnameTextField.getText().length() == 0) {
            JOptionPane.showMessageDialog(this, MailResourceLoader.getString("dialog", "account", "namelabel"));
            return false;
        } else if (address.length() == 0) {
            JOptionPane.showMessageDialog(this, MailResourceLoader.getString("dialog", "account", "addresslabel"));
            return false;
        } else {
            try {
                Address.parse(address);
            } catch (ParserException pe) {
                JOptionPane.showMessageDialog(this,
                        MailResourceLoader.getString("dialog", "account", "invalidaddress"));
                return false;
            }
        }
        return true;
    }

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

        if (action.equals("CHOOSE")) {
            JFileChooser fc = new JFileChooser();
            if (account.getIdentity().getSignature() != null) {
                fc.setSelectedFile(account.getIdentity().getSignature());
            }

            int returnVal = fc.showOpenDialog(this);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                selectSignatureButton.setText(file.getPath());
            }
        }
    }
}