KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > composer > contact > SelectAddressDialog


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.mail.gui.composer.contact;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Dimension JavaDoc;
22 import java.awt.GridLayout JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.awt.event.KeyEvent JavaDoc;
26 import java.awt.event.MouseEvent JavaDoc;
27 import java.util.List JavaDoc;
28
29 import javax.swing.BorderFactory JavaDoc;
30 import javax.swing.JButton JavaDoc;
31 import javax.swing.JComboBox JavaDoc;
32 import javax.swing.JComponent JavaDoc;
33 import javax.swing.JDialog JavaDoc;
34 import javax.swing.JFrame JavaDoc;
35 import javax.swing.JLabel JavaDoc;
36 import javax.swing.JPanel JavaDoc;
37 import javax.swing.JScrollPane JavaDoc;
38 import javax.swing.KeyStroke JavaDoc;
39 import javax.swing.ListModel JavaDoc;
40 import javax.swing.SwingConstants JavaDoc;
41
42 import org.columba.addressbook.facade.IContactFacade;
43 import org.columba.addressbook.facade.IFolder;
44 import org.columba.addressbook.facade.IFolderFacade;
45 import org.columba.addressbook.facade.IHeaderItem;
46 import org.columba.api.exception.ServiceNotFoundException;
47 import org.columba.core.gui.base.ButtonWithMnemonic;
48 import org.columba.core.gui.base.DoubleClickListener;
49 import org.columba.core.gui.base.SingleSideEtchedBorder;
50 import org.columba.mail.connector.ServiceConnector;
51 import org.columba.mail.gui.contact.list.ContactDNDListView;
52 import org.columba.mail.gui.contact.list.ContactListModel;
53 import org.columba.mail.util.MailResourceLoader;
54
55 import com.jgoodies.forms.builder.PanelBuilder;
56 import com.jgoodies.forms.layout.CellConstraints;
57 import com.jgoodies.forms.layout.FormLayout;
58
59 public class SelectAddressDialog extends JDialog JavaDoc implements ActionListener JavaDoc {
60
61     private static final java.util.logging.Logger JavaDoc LOG = java.util.logging.Logger
62             .getLogger("org.columba.addressbook.gui"); //$NON-NLS-1$
63

64     // recipient lists
65
private ContactDNDListView toList;
66
67     private ContactDNDListView ccList;
68
69     private ContactDNDListView bccList;
70
71     // addressbook list
72
private ContactDNDListView addressbookList;
73
74     // action buttons for moving contacts
75
private JButton JavaDoc toButton;
76
77     private JButton JavaDoc ccButton;
78
79     private JButton JavaDoc bccButton;
80
81     private JButton JavaDoc toRemoveButton;
82
83     private JButton JavaDoc ccRemoveButton;
84
85     private JButton JavaDoc bccRemoveButton;
86
87     // labels
88
private JLabel JavaDoc toLabel;
89
90     private JLabel JavaDoc ccLabel;
91
92     private JLabel JavaDoc bccLabel;
93
94     // choose addressbook
95
private FolderComboBox chooseComboBox;
96
97     private JLabel JavaDoc chooseLabel;
98
99     // models for addressbook/recipients lists
100
private ContactListModel[] dialogAddressbookListModel;
101
102     private List JavaDoc<IHeaderItem> toListModel;
103
104     private List JavaDoc<IHeaderItem> ccListModel;
105
106     private List JavaDoc<IHeaderItem> bccListModel;
107
108     private ButtonWithMnemonic cancelButton;
109
110     private ButtonWithMnemonic okButton;
111
112     private boolean success;
113
114     public SelectAddressDialog(JFrame JavaDoc frame, List JavaDoc<IHeaderItem> toListModel,
115             List JavaDoc<IHeaderItem> ccListModel, List JavaDoc<IHeaderItem> bccListModel) {
116         super(frame, true);
117
118         setTitle(MailResourceLoader.getString("dialog", "selectaddressdialog",
119                 "title"));
120
121         this.toListModel = toListModel;
122         this.ccListModel = ccListModel;
123         this.bccListModel = bccListModel;
124
125         dialogAddressbookListModel = new ContactListModel[3];
126
127         initComponents();
128
129         layoutComponents();
130
131         // try to fill the contact list
132
try {
133             IContactFacade contactFacade = ServiceConnector.getContactFacade();
134             IFolderFacade folderFacade = ServiceConnector.getFolderFacade();
135             IFolder folder = folderFacade.getLocalAddressbook();
136             List JavaDoc<IHeaderItem> list = contactFacade.getAllHeaderItems(folder
137                     .getId(), false);
138
139             addressbookList.setHeaderItemList(list);
140         } catch (ServiceNotFoundException e) {
141             e.printStackTrace();
142         }
143
144         pack();
145         setLocationRelativeTo(null);
146
147         setVisible(true);
148     }
149
150     public List JavaDoc<IHeaderItem> getToList() {
151         return toListModel;
152     }
153
154     public List JavaDoc<IHeaderItem> getCcList() {
155         return ccListModel;
156     }
157
158     public List JavaDoc<IHeaderItem> getBccList() {
159         return bccListModel;
160     }
161
162     /*
163      * public IHeaderItemList[] getHeaderItemLists() { return headerItemList; }
164      */

165     private JPanel JavaDoc createButtonPanel() {
166         JPanel JavaDoc panel = new JPanel JavaDoc();
167         FormLayout layout = new FormLayout(
168                 "fill:default:grow, 6px, fill:default:grow, 6px, fill:default:grow", //$NON-NLS-1$
169
"default"); //$NON-NLS-1$
170

171         PanelBuilder builder = new PanelBuilder(layout, panel);
172         CellConstraints cc = new CellConstraints();
173
174         builder.add(toButton, cc.xy(1, 1));
175         builder.add(ccButton, cc.xy(3, 1));
176         builder.add(bccButton, cc.xy(5, 1));
177
178         return panel;
179     }
180
181     private JPanel JavaDoc createRemoveButtonPanel() {
182         JPanel JavaDoc panel = new JPanel JavaDoc();
183         FormLayout layout = new FormLayout(
184                 "fill:default:grow, 6px, fill:default:grow, 6px, fill:default:grow", //$NON-NLS-1$
185
"default"); //$NON-NLS-1$
186

187         PanelBuilder builder = new PanelBuilder(layout, panel);
188         CellConstraints cc = new CellConstraints();
189
190         builder.add(toRemoveButton, cc.xy(1, 1));
191         builder.add(ccRemoveButton, cc.xy(3, 1));
192         builder.add(bccRemoveButton, cc.xy(5, 1));
193
194         return panel;
195     }
196
197     private JPanel JavaDoc createAddressbookPanel() {
198         JPanel JavaDoc panel = new JPanel JavaDoc();
199         FormLayout layout = new FormLayout("default, 6px, fill:default:grow", //$NON-NLS-1$
200
"default, 12px, fill:default:grow, 6px, default, 6px, default"); //$NON-NLS-1$
201

202         PanelBuilder builder = new PanelBuilder(layout, panel);
203         CellConstraints cc = new CellConstraints();
204
205         builder.add(chooseLabel, cc.xy(1, 1));
206         builder.add(chooseComboBox, cc.xy(3, 1));
207         builder.add(new JScrollPane JavaDoc(addressbookList), cc.xywh(1, 3, 3, 1));
208         builder.add(createButtonPanel(), cc.xywh(1, 5, 3, 1));
209         builder.add(createRemoveButtonPanel(), cc.xywh(1, 7, 3, 1));
210
211         return panel;
212     }
213
214     private JPanel JavaDoc createRecipientsPanel() {
215         JPanel JavaDoc panel = new JPanel JavaDoc();
216         FormLayout layout = new FormLayout(
217                 "fill:default:grow", //$NON-NLS-1$
218
"default, 6px, fill:default:grow, 12px, default, 6px, fill:default:grow, 12px, default, 6px, fill:default:grow"); //$NON-NLS-1$
219

220         PanelBuilder builder = new PanelBuilder(layout, panel);
221         CellConstraints cc = new CellConstraints();
222
223         int y = 1;
224         builder.add(toLabel, cc.xy(1, y));
225         y += 2;
226         builder.add(new JScrollPane JavaDoc(toList), cc.xy(1, y));
227         y += 2;
228         builder.add(ccLabel, cc.xy(1, y));
229         y += 2;
230         builder.add(new JScrollPane JavaDoc(ccList), cc.xy(1, y));
231         y += 2;
232         builder.add(bccLabel, cc.xy(1, y));
233         y += 2;
234         builder.add(new JScrollPane JavaDoc(bccList), cc.xy(1, y));
235
236         return panel;
237     }
238
239     private void layoutComponents() {
240         getContentPane().setLayout(new BorderLayout JavaDoc());
241
242         JPanel JavaDoc mainPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
243         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
244
245         FormLayout layout = new FormLayout(
246                 "fill:default:grow, 12px, fill:default:grow", //$NON-NLS-1$
247
"fill:default:grow"); //$NON-NLS-1$
248

249         CellConstraints cc = new CellConstraints();
250         mainPanel.setLayout(layout);
251
252         mainPanel.add(createAddressbookPanel(), cc.xy(1, 1));
253         mainPanel.add(createRecipientsPanel(), cc.xy(3, 1));
254
255         getContentPane().add(mainPanel, BorderLayout.CENTER);
256
257         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
258         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
259
260         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 2, 6, 0));
261         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
262         buttonPanel.add(okButton);
263
264         buttonPanel.add(cancelButton);
265         bottomPanel.add(buttonPanel, BorderLayout.EAST);
266         getContentPane().add(bottomPanel, BorderLayout.SOUTH);
267     }
268
269     private void initComponents() {
270         toLabel = new JLabel JavaDoc(MailResourceLoader.getString("dialog",
271                 "selectaddressdialog", "to")); //$NON-NLS-1$
272

273         dialogAddressbookListModel[0] = new ContactListModel();
274         dialogAddressbookListModel[0].setHeaderItemList(toListModel);
275         toList = new ContactDNDListView(dialogAddressbookListModel[0]);
276         toList.setMinimumSize(new Dimension JavaDoc(150, 150));
277         toList.addMouseListener(new DoubleClickListener() {
278
279             public void doubleClick(MouseEvent JavaDoc ev) {
280                 actionPerformed(new ActionEvent JavaDoc(toList, 0, "TO_REMOVE"));
281             }
282
283         });
284
285         ccLabel = new JLabel JavaDoc(MailResourceLoader.getString("dialog",
286                 "selectaddressdialog", "cc")); //$NON-NLS-1$
287

288         dialogAddressbookListModel[1] = new ContactListModel();
289         dialogAddressbookListModel[1].setHeaderItemList(ccListModel);
290         ccList = new ContactDNDListView(dialogAddressbookListModel[1]);
291         ccList.setMinimumSize(new Dimension JavaDoc(150, 150));
292         ccList.addMouseListener(new DoubleClickListener() {
293
294             public void doubleClick(MouseEvent JavaDoc ev) {
295                 actionPerformed(new ActionEvent JavaDoc(ccList, 0, "CC_REMOVE"));
296             }
297
298         });
299
300         bccLabel = new JLabel JavaDoc(MailResourceLoader.getString("dialog",
301                 "selectaddressdialog", "bcc")); //$NON-NLS-1$
302

303         dialogAddressbookListModel[2] = new ContactListModel();
304         dialogAddressbookListModel[2].setHeaderItemList(bccListModel);
305         bccList = new ContactDNDListView(dialogAddressbookListModel[2]);
306         bccList.setMinimumSize(new Dimension JavaDoc(150, 150));
307         bccList.addMouseListener(new DoubleClickListener() {
308
309             public void doubleClick(MouseEvent JavaDoc ev) {
310                 actionPerformed(new ActionEvent JavaDoc(bccList, 0, "BCC_REMOVE"));
311             }
312
313         });
314
315         toButton = new JButton JavaDoc(MailResourceLoader.getString("dialog",
316                 "selectaddressdialog", "right_arrow_to")); //$NON-NLS-1$
317
toButton.addActionListener(this);
318         toButton.setActionCommand("TO"); //$NON-NLS-1$
319

320         toRemoveButton = new JButton JavaDoc(MailResourceLoader.getString(
321                 "dialog", "selectaddressdialog", "left_arrow_to")); //$NON-NLS-1$
322
toRemoveButton.addActionListener(this);
323         toRemoveButton.setActionCommand("TO_REMOVE"); //$NON-NLS-1$
324

325         ccButton = new JButton JavaDoc(MailResourceLoader.getString("dialog",
326                 "selectaddressdialog", "right_arrow_cc")); //$NON-NLS-1$
327
ccButton.addActionListener(this);
328         ccButton.setActionCommand("CC"); //$NON-NLS-1$
329

330         ccRemoveButton = new JButton JavaDoc(MailResourceLoader.getString(
331                 "dialog", "selectaddressdialog", "left_arrow_cc")); //$NON-NLS-1$
332
ccRemoveButton.addActionListener(this);
333         ccRemoveButton.setActionCommand("CC_REMOVE"); //$NON-NLS-1$
334

335         bccButton = new JButton JavaDoc(MailResourceLoader.getString("dialog",
336                 "selectaddressdialog", "right_arrow_bcc")); //$NON-NLS-1$
337
bccButton.addActionListener(this);
338         bccButton.setActionCommand("BCC"); //$NON-NLS-1$
339

340         bccRemoveButton = new JButton JavaDoc(MailResourceLoader.getString(
341                 "dialog", "selectaddressdialog", "left_arrow_bcc")); //$NON-NLS-1$
342
bccRemoveButton.addActionListener(this);
343         bccRemoveButton.setActionCommand("BCC_REMOVE"); //$NON-NLS-1$
344

345         chooseLabel = new JLabel JavaDoc(MailResourceLoader.getString("dialog",
346                 "selectaddressdialog", "addressbook")); //$NON-NLS-1$
347

348         chooseComboBox = new FolderComboBox(false);
349
350         chooseComboBox.setActionCommand("CHOOSE"); //$NON-NLS-1$
351
chooseComboBox.addActionListener(this);
352
353         addressbookList = new ContactDNDListView();
354         addressbookList.setMinimumSize(new Dimension JavaDoc(450, 200));
355         addressbookList.setAcceptDrop(false);
356         addressbookList.addMouseListener(new DoubleClickListener() {
357
358             public void doubleClick(MouseEvent JavaDoc ev) {
359                 actionPerformed(new ActionEvent JavaDoc(addressbookList, 0, "TO"));
360             }
361
362         });
363
364         okButton = new ButtonWithMnemonic(MailResourceLoader.getString(
365                 "global", "ok")); //$NON-NLS-1$ //$NON-NLS-2$
366
okButton.setActionCommand("OK"); //$NON-NLS-1$
367
okButton.addActionListener(this);
368
369         cancelButton = new ButtonWithMnemonic(MailResourceLoader.getString(
370                 "global", "cancel")); //$NON-NLS-1$ //$NON-NLS-2$
371
cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
372
cancelButton.addActionListener(this);
373
374         getRootPane().setDefaultButton(okButton);
375         getRootPane().registerKeyboardAction(this, "CANCEL", //$NON-NLS-1$
376
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
377                 JComponent.WHEN_IN_FOCUSED_WINDOW);
378     }
379
380     /**
381      * @return Returns the success.
382      */

383     public boolean isSuccess() {
384         return success;
385     }
386
387     public void actionPerformed(ActionEvent JavaDoc e) {
388         String JavaDoc command = e.getActionCommand();
389
390         if (command.equals("CANCEL")) { //$NON-NLS-1$
391
setVisible(false);
392         } else if (command.equals("OK")) { //$NON-NLS-1$
393
success = true;
394             
395             setVisible(false);
396
397 // toListModel.clear();
398
// ccListModel.clear();
399
// bccListModel.clear();
400

401 // for (int i = 0; i < 3; i++) {
402
// Object[] array = dialogAddressbookListModel[i].toArray();
403
//
404
// for (int j = 0; j < array.length; j++) {
405
// IHeaderItem item = (IHeaderItem) array[j];
406
//
407
// if (i == 0) {
408
// ccListModel.add(item.clone());
409
// } else if (i == 1) {
410
// ccListModel.add(item.clone());
411
// } else if (i == 2) {
412
// bccListModel.add(item.clone());
413
// }
414
//
415
// }
416
// }
417
} else if (command.equals("TO")) { //$NON-NLS-1$
418

419             int[] array = addressbookList.getSelectedIndices();
420             ListModel JavaDoc model = addressbookList.getModel();
421             IHeaderItem item;
422
423             for (int j = 0; j < array.length; j++) {
424                 item = (IHeaderItem) model.getElementAt(array[j]);
425                 dialogAddressbookListModel[0].addElement(item
426                         );
427             }
428         } else if (command.equals("CC")) { //$NON-NLS-1$
429

430             int[] array = addressbookList.getSelectedIndices();
431             ListModel JavaDoc model = addressbookList.getModel();
432             IHeaderItem item;
433
434             for (int j = 0; j < array.length; j++) {
435                 item = (IHeaderItem) model.getElementAt(array[j]);
436                 dialogAddressbookListModel[1].addElement(item
437                         );
438             }
439         } else if (command.equals("BCC")) { //$NON-NLS-1$
440

441             int[] array = addressbookList.getSelectedIndices();
442             ListModel JavaDoc model = addressbookList.getModel();
443             IHeaderItem item;
444
445             for (int j = 0; j < array.length; j++) {
446                 item = (IHeaderItem) model.getElementAt(array[j]);
447                 dialogAddressbookListModel[2].addElement(item);
448             }
449         } else if (command.equals("TO_REMOVE")) { //$NON-NLS-1$
450

451             Object JavaDoc[] array = toList.getSelectedValues();
452
453             for (int j = 0; j < array.length; j++) {
454                 dialogAddressbookListModel[0]
455                         .removeElement((IHeaderItem) array[j]);
456             }
457         } else if (command.equals("CC_REMOVE")) { //$NON-NLS-1$
458

459             Object JavaDoc[] array = ccList.getSelectedValues();
460
461             for (int j = 0; j < array.length; j++) {
462                 dialogAddressbookListModel[1]
463                         .removeElement((IHeaderItem) array[j]);
464             }
465         } else if (command.equals("BCC_REMOVE")) { //$NON-NLS-1$
466

467             Object JavaDoc[] array = bccList.getSelectedValues();
468
469             for (int j = 0; j < array.length; j++) {
470                 dialogAddressbookListModel[2]
471                         .removeElement((IHeaderItem) array[j]);
472             }
473         } else if (command.equals("CHOOSE")) { //$NON-NLS-1$
474

475             // folder selection changed
476
JComboBox JavaDoc cb = (JComboBox JavaDoc) e.getSource();
477
478             IFolder contactFolder = (IFolder) cb.getSelectedItem();
479
480             if (contactFolder != null) {
481
482                 try {
483                     IContactFacade contactFacade = ServiceConnector
484                             .getContactFacade();
485                     List JavaDoc<IHeaderItem> list = contactFacade
486                             .getAllHeaderItems(contactFolder.getId(), false);
487
488                     addressbookList.setHeaderItemList(list);
489                 } catch (ServiceNotFoundException e1) {
490                     e1.printStackTrace();
491                 }
492
493             }
494         }
495     }
496 }
Popular Tags