KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > accountwizard > IdentityStep


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16

17 package org.columba.mail.gui.config.accountwizard;
18
19 import java.lang.reflect.Method JavaDoc;
20
21 import javax.swing.Box JavaDoc;
22 import javax.swing.BoxLayout JavaDoc;
23 import javax.swing.JComponent JavaDoc;
24 import javax.swing.JLabel JavaDoc;
25 import javax.swing.JPanel JavaDoc;
26 import javax.swing.JTextField JavaDoc;
27 import javax.swing.SwingUtilities JavaDoc;
28 import javax.swing.event.DocumentEvent JavaDoc;
29 import javax.swing.event.DocumentListener JavaDoc;
30
31 import net.javaprog.ui.wizard.AbstractStep;
32 import net.javaprog.ui.wizard.DataLookup;
33 import net.javaprog.ui.wizard.DataModel;
34 import net.javaprog.ui.wizard.DefaultDataLookup;
35
36 import org.columba.core.gui.base.LabelWithMnemonic;
37 import org.columba.core.gui.base.MultiLineLabel;
38 import org.columba.core.gui.base.WizardTextField;
39 import org.columba.mail.util.MailResourceLoader;
40 import org.columba.ristretto.message.Address;
41 import org.columba.ristretto.parser.ParserException;
42
43 class IdentityStep extends AbstractStep {
44     protected DataModel data;
45     protected JTextField JavaDoc nameTextField;
46     protected JTextField JavaDoc addressTextField;
47     protected JTextField JavaDoc accountNameTextField;
48
49     public IdentityStep(DataModel data) {
50         super(MailResourceLoader.getString("dialog", "accountwizard", "identity"),
51             MailResourceLoader.getString("dialog", "accountwizard",
52                 "identity_description"));
53         this.data = data;
54         setCanGoNext(false);
55     }
56
57     protected JComponent JavaDoc createComponent() {
58         JComponent JavaDoc component = new JPanel JavaDoc();
59         component.setLayout(new BoxLayout JavaDoc(component, BoxLayout.Y_AXIS));
60         component.add(new MultiLineLabel(MailResourceLoader.getString(
61                     "dialog", "accountwizard", "identity_text")));
62         component.add(Box.createVerticalStrut(40));
63
64         WizardTextField middlePanel = new WizardTextField();
65
66         LabelWithMnemonic nameLabel = new LabelWithMnemonic(MailResourceLoader.getString(
67                     "dialog", "accountwizard", "name"));
68         middlePanel.addLabel(nameLabel);
69         nameTextField = new JTextField JavaDoc();
70
71         DocumentListener JavaDoc fieldListener = new DocumentListener JavaDoc() {
72                 public void removeUpdate(DocumentEvent JavaDoc e) {
73                     checkFields();
74                 }
75
76                 public void insertUpdate(DocumentEvent JavaDoc e) {
77                     checkFields();
78                 }
79
80                 protected void checkFields() {
81                     String JavaDoc s = addressTextField.getText();
82                     setCanGoNext((nameTextField.getDocument().getLength() > 0) &&
83                         (s.length() > 0) && isEmailAddress(s) &&
84                         (accountNameTextField.getDocument().getLength() > 0));
85                 }
86
87                 protected boolean isEmailAddress(String JavaDoc s) {
88                     int at = s.indexOf('@');
89                     int lastDot = s.lastIndexOf('.');
90
91                     return (at > 0) && (lastDot > (at + 1)) &&
92                     (lastDot < (s.length() - 1));
93                 }
94
95                 public void changedUpdate(DocumentEvent JavaDoc e) {
96                 }
97             };
98
99         nameTextField.getDocument().addDocumentListener(fieldListener);
100         nameLabel.setLabelFor(nameTextField);
101         middlePanel.addTextField(nameTextField);
102
103         JLabel JavaDoc exampleLabel = new JLabel JavaDoc(MailResourceLoader.getString(
104                     "dialog", "accountwizard", "example") + "Bill Gates");
105         middlePanel.addExample(exampleLabel);
106
107         LabelWithMnemonic addressLabel = new LabelWithMnemonic(MailResourceLoader.getString(
108                     "dialog", "accountwizard", "address"));
109         middlePanel.addLabel(addressLabel);
110         addressTextField = new JTextField JavaDoc();
111         addressTextField.getDocument().addDocumentListener(fieldListener);
112         addressLabel.setLabelFor(addressTextField);
113         middlePanel.addTextField(addressTextField);
114         middlePanel.addExample(new JLabel JavaDoc(MailResourceLoader.getString(
115                     "dialog", "accountwizard", "example") +
116                 "BillGates@microsoft.com"));
117
118         LabelWithMnemonic accountNameLabel = new LabelWithMnemonic(MailResourceLoader.getString(
119                     "dialog", "accountwizard", "accountname"));
120         middlePanel.addLabel(accountNameLabel);
121         accountNameTextField = new JTextField JavaDoc();
122         Method JavaDoc method = null;
123         try {
124             method = accountNameTextField.getClass().getMethod("getText", null);
125         } catch (NoSuchMethodException JavaDoc nsme) {}
126         data.registerDataLookup("Identity.accountName",
127             new DefaultDataLookup(accountNameTextField, method, null));
128         accountNameTextField.getDocument().addDocumentListener(fieldListener);
129         accountNameLabel.setLabelFor(accountNameTextField);
130         middlePanel.addTextField(accountNameTextField);
131         middlePanel.addExample(new JLabel JavaDoc(MailResourceLoader.getString(
132                     "dialog", "accountwizard", "example") +
133                 "Bill's private mail"));
134         component.add(middlePanel);
135
136         data.registerDataLookup("Identity.address", new DataLookup() {
137             public Object JavaDoc lookupData() {
138                 try {
139                     Address address = Address.parse(addressTextField.getText());
140                     address.setDisplayName(nameTextField.getText());
141                     return address;
142                 } catch (ParserException pe) {
143                     return null;
144                 }
145             }
146         });
147         return component;
148     }
149
150     public void prepareRendering() {
151         SwingUtilities.invokeLater(new Runnable JavaDoc() {
152                 public void run() {
153                     nameTextField.requestFocus();
154                 }
155             });
156     }
157 }
158
Popular Tags