KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > search > SearchFrame


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.config.search;
17
18 import java.awt.BorderLayout JavaDoc;
19 import java.awt.Dimension JavaDoc;
20 import java.awt.GridLayout JavaDoc;
21 import java.awt.event.ActionEvent JavaDoc;
22 import java.awt.event.ActionListener JavaDoc;
23 import java.awt.event.KeyEvent JavaDoc;
24
25 import javax.swing.BorderFactory JavaDoc;
26 import javax.swing.JButton JavaDoc;
27 import javax.swing.JCheckBox JavaDoc;
28 import javax.swing.JComboBox JavaDoc;
29 import javax.swing.JComponent JavaDoc;
30 import javax.swing.JDialog JavaDoc;
31 import javax.swing.JLabel JavaDoc;
32 import javax.swing.JPanel JavaDoc;
33 import javax.swing.KeyStroke JavaDoc;
34 import javax.swing.SwingConstants JavaDoc;
35
36 import org.columba.api.gui.frame.IFrameMediator;
37 import org.columba.core.filter.FilterRule;
38 import org.columba.core.filter.IFilterRule;
39 import org.columba.core.folder.api.IFolder;
40 import org.columba.core.gui.base.ButtonWithMnemonic;
41 import org.columba.core.gui.base.CheckBoxWithMnemonic;
42 import org.columba.core.gui.base.LabelWithMnemonic;
43 import org.columba.core.gui.base.SingleSideEtchedBorder;
44 import org.columba.core.gui.util.DialogHeaderPanel;
45 import org.columba.core.resourceloader.IconKeys;
46 import org.columba.core.resourceloader.ImageLoader;
47 import org.columba.mail.command.MailFolderCommandReference;
48 import org.columba.mail.folder.IMailFolder;
49 import org.columba.mail.folder.IMailbox;
50 import org.columba.mail.folder.virtual.VirtualFolder;
51 import org.columba.mail.gui.config.filter.CriteriaList;
52 import org.columba.mail.gui.frame.MailFrameMediator;
53 import org.columba.mail.gui.tree.FolderTreeModel;
54 import org.columba.mail.gui.tree.util.SelectSearchFolderDialog;
55 import org.columba.mail.gui.tree.util.TreeNodeList;
56 import org.columba.mail.util.MailResourceLoader;
57
58 import com.jgoodies.forms.builder.PanelBuilder;
59 import com.jgoodies.forms.layout.CellConstraints;
60 import com.jgoodies.forms.layout.FormLayout;
61
62 /**
63  * Search message Dialog. Lets you specify a source-folder and the search
64  * criteria.
65  *
66  * @author fdietz
67  */

68 public class SearchFrame extends JDialog JavaDoc implements ActionListener JavaDoc {
69     private JLabel JavaDoc folderLabel;
70
71     private JLabel JavaDoc nameLabel;
72
73     private JButton JavaDoc selectButton;
74
75     private JButton JavaDoc searchButton;
76
77     private JCheckBox JavaDoc includeSubfolderButton;
78
79     private CriteriaList criteriaList;
80
81     private VirtualFolder destFolder;
82
83     private JComboBox JavaDoc condList;
84
85     private IFrameMediator frameController;
86
87     public SearchFrame(IFrameMediator frameController, IMailbox searchFolder) {
88         super(frameController.getView().getFrame(), true);
89
90         this.frameController = frameController;
91         this.destFolder = (VirtualFolder) searchFolder;
92
93         setTitle(MailResourceLoader.getString("dialog", "filter",
94                 "searchdialog_title"));
95
96         initComponents();
97         updateComponents(true);
98         pack();
99         setLocationRelativeTo(null);
100         setVisible(true);
101     }
102
103     public SearchFrame(IFrameMediator frameController, IMailbox searchFolder,
104             IMailbox sourceFolder) {
105         super(frameController.getView().getFrame(), true);
106
107         this.frameController = frameController;
108         this.destFolder = (VirtualFolder) searchFolder;
109
110         setTitle(MailResourceLoader.getString("dialog", "filter",
111                 "searchdialog_title"));
112
113         initComponents();
114
115         updateComponents(true);
116
117         setSourceFolder(sourceFolder);
118
119         pack();
120         setLocationRelativeTo(null);
121         setVisible(true);
122     }
123
124     public JPanel JavaDoc createPanel() {
125
126         FormLayout formlayout1 = new FormLayout("6DLU,FILL:DEFAULT:GROW(1.0)",
127                 "CENTER:DEFAULT:NONE,6DLU,CENTER:DEFAULT:NONE,6DLU,FILL:DEFAULT:GROW(1.0)");
128         formlayout1.setRowGroups(new int[][] { { 5 } });
129         CellConstraints cc = new CellConstraints();
130         PanelBuilder builder = new PanelBuilder(formlayout1);
131         builder.setDefaultDialogBorder();
132
133         builder.add(createPanel1(), cc.xywh(1, 1, 2, 1));
134
135         builder.addSeparator(MailResourceLoader.getString("dialog", "filter",
136                 "if"), cc.xywh(1, 3, 2, 1));
137
138         builder.add(createPanel2(), cc.xy(2, 5));
139
140         return builder.getPanel();
141     }
142
143     public JPanel JavaDoc createPanel1() {
144         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
145         FormLayout formlayout1 = new FormLayout(
146                 "LEFT:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE",
147                 "FILL:DEFAULT:NONE");
148         CellConstraints cc = new CellConstraints();
149         jpanel1.setLayout(formlayout1);
150
151         jpanel1.add(folderLabel, cc.xy(1, 1));
152
153         jpanel1.add(selectButton, cc.xy(3, 1));
154
155         jpanel1.add(includeSubfolderButton, cc.xy(5, 1));
156
157         return jpanel1;
158     }
159
160     public JPanel JavaDoc createPanel2() {
161         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
162         FormLayout formlayout1 = new FormLayout(
163                 "FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:NONE",
164                 "FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)");
165         CellConstraints cc = new CellConstraints();
166         jpanel1.setLayout(formlayout1);
167
168         jpanel1.add(nameLabel, cc.xy(3, 1));
169
170         jpanel1.add(condList, cc.xy(5, 1));
171
172         jpanel1.add(criteriaList, cc.xywh(1, 3, 5, 1));
173
174         return jpanel1;
175     }
176
177     /**
178      * init components
179      */

180     protected void initComponents() {
181
182         folderLabel = new LabelWithMnemonic(MailResourceLoader.getString(
183                 "dialog", "filter", "choose_folder"));
184
185         selectButton = new JButton JavaDoc();
186         folderLabel.setLabelFor(selectButton);
187         selectButton.setActionCommand("SELECT");
188         selectButton.addActionListener(this);
189
190         includeSubfolderButton = new CheckBoxWithMnemonic(MailResourceLoader
191                 .getString("dialog", "filter", "include_subfolders"));
192
193         nameLabel = new LabelWithMnemonic(MailResourceLoader.getString(
194                 "dialog", "filter", "execute_actions"));
195
196         String JavaDoc[] cond = {
197                 MailResourceLoader
198                         .getString("dialog", "filter", "all_criteria"),
199                 MailResourceLoader
200                         .getString("dialog", "filter", "any_criteria") };
201         condList = new JComboBox JavaDoc(cond);
202
203         criteriaList = new CriteriaList(destFolder.getFilter());
204         criteriaList.setPreferredSize(new Dimension JavaDoc(500, 100));
205
206         getContentPane().setLayout(new BorderLayout JavaDoc());
207         getContentPane().add(createPanel(), BorderLayout.CENTER);
208
209         getContentPane().add(createBottomPanel(), BorderLayout.SOUTH);
210
211         getContentPane().add(
212                 new DialogHeaderPanel(MailResourceLoader.getString("dialog",
213                         "filter", "header_title"), MailResourceLoader
214                         .getString("dialog", "filter", "header_description"),
215                         ImageLoader.getIcon(IconKeys.SEARCH)),
216                 BorderLayout.NORTH);
217     }
218
219     /**
220      * @param contentPane
221      */

222     private JPanel JavaDoc createBottomPanel() {
223         JPanel JavaDoc bottom = new JPanel JavaDoc(new BorderLayout JavaDoc());
224         bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
225
226         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 3, 6, 0));
227         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
228         searchButton = new JButton JavaDoc(MailResourceLoader.getString("dialog",
229                 "filter", "search"));
230         searchButton.setIcon(ImageLoader.getIcon(IconKeys.SEARCH));
231         searchButton.addActionListener(this);
232         searchButton.setActionCommand("SEARCH");
233         buttonPanel.add(searchButton);
234
235         ButtonWithMnemonic closeButton = new ButtonWithMnemonic(
236                 MailResourceLoader.getString("global", "close"));
237         closeButton.addActionListener(this);
238         closeButton.setActionCommand("CLOSE");
239         buttonPanel.add(closeButton);
240
241         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
242                 MailResourceLoader.getString("global", "help"));
243         helpButton.addActionListener(this);
244         helpButton.setActionCommand("HELP");
245         helpButton.setEnabled(false);
246         buttonPanel.add(helpButton);
247         bottom.add(buttonPanel, BorderLayout.EAST);
248
249         getRootPane().setDefaultButton(searchButton);
250         getRootPane().registerKeyboardAction(this, "CLOSE",
251                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
252                 JComponent.WHEN_IN_FOCUSED_WINDOW);
253
254         return bottom;
255     }
256
257     public void updateComponents(boolean b) {
258         if (b) {
259             IFilterRule filterRule = destFolder.getFilter().getFilterRule();
260             String JavaDoc value = filterRule.getCondition();
261
262             if (value.equals("matchall")) {
263                 condList.setSelectedIndex(0);
264             } else {
265                 condList.setSelectedIndex(1);
266             }
267
268             boolean isInclude = Boolean.valueOf(
269                     destFolder.getConfiguration().getString("property",
270                             "include_subfolders")).booleanValue();
271
272             includeSubfolderButton.setSelected(isInclude);
273
274             String JavaDoc uid = destFolder.getConfiguration().getString("property",
275                     "source_uid");
276
277             IMailFolder f = (IMailFolder) FolderTreeModel.getInstance()
278                     .getFolder(uid);
279
280             // If f==null because of deleted AbstractMessageFolder fallback to
281
// Inbox
282
if (f == null) {
283                 uid = "101";
284                 destFolder.getConfiguration().setString("property",
285                         "source_uid", uid);
286                 f = (IMailbox) FolderTreeModel.getInstance().getFolder(uid);
287             }
288
289             selectButton.setText(f.getTreePath());
290
291             criteriaList.updateComponents(b);
292         } else {
293             // get values from components
294
IFilterRule filterRule = destFolder.getFilter().getFilterRule();
295             int index = condList.getSelectedIndex();
296
297             if (index == 0) {
298                 filterRule.setCondition("matchall");
299             } else {
300                 filterRule.setCondition("matchany");
301             }
302
303             if (includeSubfolderButton.isSelected()) {
304                 destFolder.getConfiguration().setString("property",
305                         "include_subfolders", "true");
306             } else {
307                 destFolder.getConfiguration().setString("property",
308                         "include_subfolders", "false");
309             }
310
311             String JavaDoc path = selectButton.getText();
312             TreeNodeList list = new TreeNodeList(path);
313             IMailFolder folder = (IMailFolder) FolderTreeModel.getInstance()
314                     .getFolder(list);
315             String JavaDoc uid = folder.getId();
316             destFolder.getConfiguration().setString("property", "source_uid",
317                     uid);
318
319             criteriaList.updateComponents(b);
320         }
321     }
322
323     public void setSourceFolder(IMailbox f) {
324         selectButton.setText(f.getTreePath());
325     }
326
327     public void actionPerformed(ActionEvent JavaDoc e) {
328         String JavaDoc action = e.getActionCommand();
329
330         if (action.equals("CLOSE")) {
331             updateComponents(false);
332             setVisible(false);
333         } else if (action.equals("ADD_CRITERION")) {
334             criteriaList.add();
335         } else if (action.equals("SELECT")) {
336             SelectSearchFolderDialog dialog = new SelectSearchFolderDialog(
337                     frameController);
338
339             if (dialog.success()) {
340                 IFolder folder = dialog.getSelectedFolder();
341                 String JavaDoc path = folder.getTreePath();
342
343                 selectButton.setText(path);
344             }
345         } else if (action.equals("SEARCH")) {
346             updateComponents(false);
347             setVisible(false);
348
349             try {
350                 // Deactivate this vFolder because changes are about to happen
351
// and the search needs to be redone.
352
((VirtualFolder) destFolder).deactivate();
353                 ((VirtualFolder) destFolder).addSearchToHistory();
354             } catch (Exception JavaDoc ex) {
355                 ex.printStackTrace();
356             }
357
358             MailFolderCommandReference r = new MailFolderCommandReference(
359                     destFolder);
360             ((MailFrameMediator) frameController).setTreeSelection(r);
361         }
362     }
363 }
Popular Tags