KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > table > command > ViewHeaderListCommand


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
package org.columba.mail.gui.table.command;
17
18 import org.columba.api.command.ICommandReference;
19 import org.columba.api.command.IWorkerStatusController;
20 import org.columba.api.gui.frame.IFrameMediator;
21 import org.columba.api.selection.ISelectionListener;
22 import org.columba.api.selection.SelectionChangedEvent;
23 import org.columba.core.command.Command;
24 import org.columba.core.command.StatusObservableImpl;
25 import org.columba.core.command.Worker;
26 import org.columba.mail.command.IMailFolderCommandReference;
27 import org.columba.mail.folder.IMailFolder;
28 import org.columba.mail.folder.IMailbox;
29 import org.columba.mail.gui.frame.MailFrameMediator;
30 import org.columba.mail.gui.frame.TableViewOwner;
31 import org.columba.mail.gui.table.action.ClearHeaderlistAction;
32 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent;
33 import org.columba.mail.message.IHeaderList;
34
35 /**
36  * Show header list in message list component.
37  * <p>
38  * Registers as tree selection listener.
39  *
40  * @author Timo Stich (tstich@users.sourceforge.net)
41  * @author fdietz
42  */

43 public class ViewHeaderListCommand extends Command implements
44         ISelectionListener {
45
46     private IHeaderList headerList;
47
48     private IMailbox folder;
49
50     private boolean updateGui;
51
52     private IFrameMediator mediator;
53
54     public ViewHeaderListCommand(IFrameMediator mediator,
55             ICommandReference reference) {
56         super(reference);
57
58         this.mediator = mediator;
59
60         // Register as listener to the SelectionManger
61
// to check for selection changes
62
updateGui = true;
63
64         ((MailFrameMediator) mediator).registerTreeSelectionListener(this);
65
66         priority = Command.REALTIME_PRIORITY;
67     }
68
69     /**
70      * @see org.columba.api.command.Command#updateGUI()
71      */

72     public void updateGUI() throws Exception JavaDoc {
73         ((MailFrameMediator) mediator).removeTreeSelectionListener(this);
74
75         // Update only if the selection did not change
76
if (updateGui) {
77             ((TableViewOwner) mediator).getTableController().showHeaderList(
78                     folder, headerList);
79         }
80
81     }
82
83     /**
84      * @see org.columba.api.command.Command#execute(Worker)
85      */

86     public void execute(IWorkerStatusController worker) throws Exception JavaDoc {
87         // Register as SelectionListener to track the selection
88
// of the tree
89
if (!updateGui)
90             return;
91
92         IMailFolderCommandReference r = (IMailFolderCommandReference) getReference();
93
94         folder = (IMailbox) r.getSourceFolder();
95
96         // register for status events
97
((StatusObservableImpl) folder.getObservable()).setWorker(worker);
98
99         // fetch the headerlist
100
try {
101             headerList = (folder).getHeaderList();
102         } catch (Exception JavaDoc e) {
103             updateGui = false;
104
105             // Reset the selection
106
((MailFrameMediator) mediator).setTreeSelection(null);
107             new ClearHeaderlistAction(mediator).actionPerformed(null);
108
109             throw e;
110         }
111
112         updateGui &= !worker.cancelled();
113     }
114
115     /**
116      * @see org.columba.api.selection.ISelectionListener#selectionChanged(org.columba.api.selection.SelectionChangedEvent)
117      */

118     public void selectionChanged(SelectionChangedEvent e) {
119
120         // old command-specific selection
121
IMailFolderCommandReference r = (IMailFolderCommandReference) getReference();
122
123         // new selection
124
IMailFolder[] folders = ((TreeSelectionChangedEvent) e).getSelected();
125         // abort if nothing selected
126
if (folders.length == 0)
127             return;
128
129         // cancel command execution/updateGUI methods, if folder selection
130
// has been modified
131
if (r.getSourceFolder().getId() != folders[0].getId())
132             updateGui = false;
133     }
134 }
Popular Tags