KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > table > TableController


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.addressbook.gui.table;
19
20 import java.awt.event.MouseAdapter JavaDoc;
21 import java.awt.event.MouseEvent JavaDoc;
22
23 import javax.swing.JComponent JavaDoc;
24 import javax.swing.JTable JavaDoc;
25 import javax.swing.event.TreeSelectionEvent JavaDoc;
26 import javax.swing.event.TreeSelectionListener JavaDoc;
27 import javax.swing.table.JTableHeader JavaDoc;
28 import javax.swing.table.TableColumnModel JavaDoc;
29
30 import org.columba.addressbook.facade.IContactItem;
31 import org.columba.addressbook.folder.AbstractFolder;
32 import org.columba.addressbook.folder.AddressbookTreeNode;
33 import org.columba.addressbook.folder.FolderListener;
34 import org.columba.addressbook.folder.IContactStorage;
35 import org.columba.addressbook.folder.IFolderEvent;
36 import org.columba.addressbook.gui.focus.FocusManager;
37 import org.columba.addressbook.gui.focus.FocusOwner;
38 import org.columba.addressbook.gui.frame.AddressbookFrameMediator;
39 import org.columba.addressbook.gui.table.model.AddressbookTableModel;
40 import org.columba.addressbook.gui.table.model.FilterDecorator;
41 import org.columba.addressbook.gui.table.model.SortDecorator;
42 import org.columba.addressbook.model.IContactModelPartial;
43 import org.columba.core.gui.dialog.ErrorDialog;
44 import org.columba.core.logging.Logging;
45
46 /**
47  * @author fdietz
48  */

49 public class TableController implements TreeSelectionListener JavaDoc, FolderListener,
50         FocusOwner {
51
52     private TableView view;
53
54     private AddressbookFrameMediator mediator;
55
56     private AddressbookTableModel addressbookModel;
57
58     private SortDecorator sortDecorator;
59
60     private FilterDecorator filterDecorator;
61
62     private AddressbookTreeNode selectedFolder;
63
64     /**
65      *
66      */

67     public TableController(AddressbookFrameMediator mediator) {
68         super();
69
70         this.mediator = mediator;
71
72         addressbookModel = new AddressbookTableModel();
73
74         sortDecorator = new SortDecorator(addressbookModel);
75
76         filterDecorator = new FilterDecorator(sortDecorator);
77
78         view = new TableView(this, filterDecorator);
79
80         addMouseListenerToHeaderInTable();
81
82         view.addMouseListener(new TableMouseListener(this));
83
84         // register as focus owner
85
FocusManager.getInstance().registerComponent(this);
86
87         
88     }
89
90     /**
91      * Add MouseListener to JTableHeader to sort table based on clicked column
92      * header.
93      *
94      */

95     protected void addMouseListenerToHeaderInTable() {
96         final JTable JavaDoc tableView = getView();
97
98         tableView.setColumnSelectionAllowed(false);
99
100         MouseAdapter JavaDoc listMouseListener = new MouseAdapter JavaDoc() {
101             public void mouseClicked(MouseEvent JavaDoc e) {
102                 TableColumnModel JavaDoc columnModel = tableView.getColumnModel();
103                 int viewColumn = columnModel.getColumnIndexAtX(e.getX());
104                 int column = tableView.convertColumnIndexToModel(viewColumn);
105
106                 if ((e.getClickCount() == 1) && (column != -1)) {
107
108                     if (sortDecorator.getSelectedColumn() == column)
109                         sortDecorator
110                                 .setSortOrder(!sortDecorator.isSortOrder());
111
112                     sortDecorator.sort(column);
113
114                 }
115             }
116         };
117
118         JTableHeader JavaDoc th = tableView.getTableHeader();
119         th.addMouseListener(listMouseListener);
120     }
121
122     /**
123      * @return AddressbookFrameController
124      */

125     public AddressbookFrameMediator getMediator() {
126         return mediator;
127     }
128
129     /**
130      * @return TableView
131      */

132     public TableView getView() {
133         return view;
134     }
135
136     public void setSelectedFolder(IContactStorage store) {
137         filterDecorator.setContactItemMap(((AbstractFolder) store)
138                 .getContactItemMap());
139     }
140
141     /**
142      * Update table on tree selection changes.
143      */

144     public void valueChanged(TreeSelectionEvent JavaDoc e) {
145         AddressbookTreeNode node = (AddressbookTreeNode) e.getPath()
146                 .getLastPathComponent();
147
148         if (node == null) {
149             return;
150         }
151
152         if (node instanceof IContactStorage) {
153             try {
154
155                 ((AbstractFolder) node).removeFolderListener(this);
156
157                 selectedFolder = node;
158                 ((AbstractFolder) node).addFolderListener(this);
159
160                 filterDecorator
161                         .setContactItemMap(((AbstractFolder) selectedFolder)
162                                 .getContactItemMap());
163             } catch (Exception JavaDoc e1) {
164                 if (Logging.DEBUG)
165                     e1.printStackTrace();
166
167                 ErrorDialog.createDialog(e1.getMessage(), e1);
168             }
169         } else {
170             filterDecorator.setContactItemMap(null);
171         }
172     }
173
174     /**
175      * Get selected uids.
176      *
177      * @return
178      */

179     public String JavaDoc[] getUids() {
180         int[] rows = getView().getSelectedRows();
181         String JavaDoc[] uids = new String JavaDoc[rows.length];
182
183         IContactModelPartial item;
184
185         for (int i = 0; i < rows.length; i++) {
186             item = (IContactModelPartial) filterDecorator
187                     .getContactItem(rows[i]);
188             uids[i] = item.getId();
189         }
190
191         return uids;
192     }
193
194     /**
195      * @return Returns the addressbookModel.
196      */

197     public AddressbookTableModel getAddressbookModel() {
198         return addressbookModel;
199     }
200
201     public IContactItem getSelectedItem() {
202         int row = getView().getSelectedRow();
203         if (row == -1)
204             return null;
205
206         // we use the SortDecorator, because the indices are sorted
207
IContactItem item = (IContactItem) sortDecorator.getContactItem(row);
208
209         return item;
210     }
211
212     /** ********************** FolderListener ***************** */
213
214     /**
215      * @see org.columba.addressbook.folder.FolderListener#itemAdded(org.columba.addressbook.folder.FolderEvent)
216      */

217     public void itemAdded(IFolderEvent e) {
218         getAddressbookModel().update();
219
220     }
221
222     /**
223      * @see org.columba.addressbook.folder.FolderListener#itemChanged(org.columba.addressbook.folder.FolderEvent)
224      */

225     public void itemChanged(IFolderEvent e) {
226         getAddressbookModel().update();
227
228     }
229
230     /**
231      * @see org.columba.addressbook.folder.FolderListener#itemRemoved(org.columba.addressbook.folder.FolderEvent)
232      */

233     public void itemRemoved(IFolderEvent e) {
234         getAddressbookModel().update();
235
236     }
237
238     /** ************* FocusOwner Implementation ****************** */
239
240     /**
241      * @see org.columba.addressbook.gui.focus.FocusOwner#copy()
242      */

243     public void copy() {
244
245     }
246
247     /**
248      * @see org.columba.addressbook.gui.focus.FocusOwner#cut()
249      */

250     public void cut() {
251
252     }
253
254     /**
255      * @see org.columba.addressbook.gui.focus.FocusOwner#delete()
256      */

257     public void delete() {
258
259     }
260
261     /**
262      * @see org.columba.addressbook.gui.focus.FocusOwner#getComponent()
263      */

264     public JComponent JavaDoc getComponent() {
265         return getView();
266     }
267
268     /**
269      * @see org.columba.addressbook.gui.focus.FocusOwner#isCopyActionEnabled()
270      */

271     public boolean isCopyActionEnabled() {
272
273         return false;
274     }
275
276     /**
277      * @see org.columba.addressbook.gui.focus.FocusOwner#isCutActionEnabled()
278      */

279     public boolean isCutActionEnabled() {
280
281         return false;
282     }
283
284     /**
285      * @see org.columba.addressbook.gui.focus.FocusOwner#isDeleteActionEnabled()
286      */

287     public boolean isDeleteActionEnabled() {
288
289         return false;
290     }
291
292     /**
293      * @see org.columba.addressbook.gui.focus.FocusOwner#isPasteActionEnabled()
294      */

295     public boolean isPasteActionEnabled() {
296
297         return false;
298     }
299
300     /**
301      * @see org.columba.addressbook.gui.focus.FocusOwner#isRedoActionEnabled()
302      */

303     public boolean isRedoActionEnabled() {
304
305         return false;
306     }
307
308     /**
309      * @see org.columba.addressbook.gui.focus.FocusOwner#isSelectAllActionEnabled()
310      */

311     public boolean isSelectAllActionEnabled() {
312         if (getView().getRowCount() > 0) {
313             return true;
314         }
315
316         return false;
317     }
318
319     /**
320      * @see org.columba.addressbook.gui.focus.FocusOwner#isUndoActionEnabled()
321      */

322     public boolean isUndoActionEnabled() {
323
324         return false;
325     }
326
327     /**
328      * @see org.columba.addressbook.gui.focus.FocusOwner#paste()
329      */

330     public void paste() {
331
332     }
333
334     /**
335      * @see org.columba.addressbook.gui.focus.FocusOwner#redo()
336      */

337     public void redo() {
338
339     }
340
341     /**
342      * @see org.columba.addressbook.gui.focus.FocusOwner#selectAll()
343      */

344     public void selectAll() {
345         getView().selectAll();
346     }
347
348     /**
349      * @see org.columba.addressbook.gui.focus.FocusOwner#undo()
350      */

351     public void undo() {
352
353     }
354
355     /**
356      * @return Returns the sortDecorator.
357      */

358     public SortDecorator getSortDecorator() {
359         return sortDecorator;
360     }
361
362     /**
363      * @return Returns the filterDecorator.
364      */

365     public FilterDecorator getFilterDecorator() {
366         return filterDecorator;
367     }
368
369     
370 }
Popular Tags